今回はPHPでSSL通信したい時の注意点などを紹介します。
PHPでSSL通信を行う際には、
- fsockopen
- pfsockopen
- file_get_contents
- fopen
- stream_socket_client
など様々であり、利用する場面がありますが、SSL通信が許可されている必要があります。
よくHTTP_Requestなどを利用してPOSTしたいがhttpsだとうまくいかない!という記事を見かけますが、参考になればと思います。
- * allow_url_fopenが有効かどうか
上記の関数についてfile_get_contents・fopenでは上記設定が有効かを調べます。
php.iniで設定されていますが、通常デフォルトで使用可能なのですが、レンタルサーバーなどでは使えないこともありますので調べてみましょう。
phpinfo()関数を利用するか、コマンドラインでは
php -i | grep allow_url_fopen
で知ることが出来ます。
またphp4.0.3以前では
--disable-url-fopen-wrapper
でコンパイルされていると利用不可となっています。
- サポートされているプロトコル・ラッパーを調べる
通信する際のプロトコル、及びラッパが使用可能かを調べます。この場合はhttps://(PHP4.3.0以降)が対象です。
phpinfo()ではRegisterd PHP Streamで確認できます。
SSL通信の場合OpenSSLがインストールされている必要があり、PHP4.3.0以降では静的にコンパイルされ組み込まれている必要がありますが、PHP5以降ではモジュールとしてコンパイルされていても使用できます。
レンタルサーバーなどでPHP4.3以降を利用し、かつOpenSSLサポートがなければ、管理者によってリコンパイルされなければなりません。
ですが、もしcurlコマンド(SSLが有効であること)が使える環境であれば、popen・proc_open関数から利用することもできます。(レスポンス速度等の問題はありますが)
なおOpenSSLのバージョンもPHPによって異なるので注意が必要です。
以下をまとめると次のような表になります。
PHP | 再コンパイル | OpenSSL |
---|---|---|
~4.0.4 | × | 0.9.6~ |
4.0.5~4.2.3 | × | 0.9.5~ |
4.3.0~4.3.1 | ○ | 0.9.5~ |
4.3.2~ | ○ | 0.9.6~ |
5.0.0~ | × | 0.9.6~ |
利用するなら、PHP5がお手軽なようです。