phpのcurl(35) Unknown SSL protocol error in connectionの対処法

cURLは、さまざまなプロトコルを用いてデータを転送するライブラリとコマンドラインツールを提供するプロジェクトです。


PHPcURLサポート機能付きでコンパイルすると、curl 関数を使用可能となります。


今回は、決済モジュールへのリクエストが必要になり、エラーで躓いたので、エラーの対処方法をメモしておきます。


正しいSSLプロトコルを設定
curl_setopt($curl, CURLOPT_SSLVERSION, 3);

curl_setopt($curl, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1);
or
curl_setopt($curl, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2); //(Added in 7.34.0)

デフォルトでは PHPが自動的に判断しますが、これを手動で設定する必要がある場合もあるようです。
※追記(2014/10/19) POODLE SSLv3.0 脆弱性問題対応のためSSLv3ではなく、TLSでアクセスするように修正


暗号のリストの設定

curl_setopt($curl, CURLOPT_SSL_CIPHER_LIST, 'rsa_rc4_128_sha');

SSLでは、クライアントがサポートしている暗号アルゴリズムのリストをサーバーに提示し、サーバーが適当なものを選ぶ仕組みになっています。したがって、相手さえまともなら、128ビットRC4や、256ビットAESなど、より強いアルゴリズムが選ばれるので問題はないはずなのですが。Webサーバーによっては暗号のリストの設定をしないとうまくいかないこともあるようです。


暗号アルゴリズムが解らない場合は、SSLのページで、右クリック・メニューから「ページの情報を表示」を選ぶと、使用されている暗号アルゴリズムを確認できます。以下のコマンドでも確認することができます。


暗号リスト確認コマンド
$ curl https://<対象サイト> --sslv3 --head --ciphers rsa_rc4_128_sha

$ curl https://<対象サイト> --tlsv1 --head --ciphers rsa_rc4_128_sha

※追記(2014/10/19) POODLE SSLv3.0 脆弱性問題対応のためSSLv3ではなく、TLSでアクセスするように修正