さくら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を見てみます。

認識されてますね。
先ほどエラーが出たスクリプトを再度実行してみると、エラーは出なくなりました。
(以下、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です。