さくらVPSにopensslインストールしてphpからhttps接続させる

phpのfile_get_contens()関数で引数のURLがhttpsの場合、以下のエラーが出る環境があります。

Warning: file_get_contents() [function.file-get-contents]: Unable to find the wrapper “https” – did you forget to enable it when you configured PHP? in ssl.php on line 2

その対応としてopensslをインストールしたので、そのメモです。

opensslのインストール

参考)http://memorva.jp/memo/linux/openssl.php

ここからソースをDL http://www.openssl.org/

$ wget http://www.openssl.org/source/openssl-1.0.0e.tar.gz

$ tar xzvf openssl-1.0.0e.tar.gz

$ cd openssl-1.0.0e

./config -fPIC shared

make

make test

make install

なぜか./configもmakeも permisionで怒られたので、以降rootで実行しました。

php連携

–with-openssl オプションをつけてインストールし直します。

参考)http://www.php.net/manual/ja/openssl.installation.php

./configure (今までのオプション)–with-openssl

$ make

$ make test

make install

./configure時に権限のエラーが起きたのでrootで実行してます。

また、make test時にphpインストールしたときと同じエラーがでましたが、ssl関連では出てないようだったので、スルーします。

動作確認

apacheを再起動してからphpinfoを見てみます。

phpinfo

認識されてますね。

先ほどエラーが出たスクリプトを再度実行してみると、エラーは出なくなりました。

(以下、2011/02/09 追記)

SSLの設定

ここを参考にしました。

http://www.server-memo.net/server-setting/apache/apache-mod_ssl.html

実際の作業は整理後追記予定。(以下追記)

関連ファイル保存用にフォルダを作成。

$cd /etc/httpd/conf/

$mkdir ssl.key

$cd ssl.key

鍵やら証明書やら作成。パスワードの設定もあります。

#openssl genrsa -des3 -out server.key 1024

#chmod 400 server.key

#openssl req -new -key server.key -out server.csr

#chmod 400 server.csr

#openssl x509 -in server.csr -out server.crt -req -signkey server.key -days 365

#chmod 400 server.crt

続いてapacheの設定で、ssl.confに以下を追記します。

#vi ssl.conf

SSLCertificateKeyFile /etc/httpd/conf/ssl.key/server.key
SSLCertificateFile /etc/httpd/conf/ssl.key/server.crt

で、apache再起動

/usr/local/apache2/bin/httpd -k stop

/usr/local/apache2/bin/httpd -k start

パスワードを聞かれるので、先ほど設定したパスワードを入力します。これで、完了。

自動起動のためのパスワード解除

このままだと、サーバreboot時などで、apache再起動時にパスワード問い合わせのため、apache起動できません。そのためセキュリティリスクは高まりますが、運用性を重視してパスワードを解除します。

cd /etc/httpd/conf/ssl.key

mv server.key server.key_org

openssl rsa -in server.key_org -out server.key

先ほど設定したパスワードを入力

chmod 400 server.key

再びapache再起動してパスワードを聞かれないか確認

/usr/local/apache2/bin/httpd -k stop

/usr/local/apache2/bin/httpd -k start

聞かれなければこれでOKです。