openSSLの脆弱性で証明書が変わり、APIで四苦八苦した備忘録 (主にwebpay)

phpの下記のようなエラーで悩まされたので、こんな馬鹿なのは自分だけと思いつつも、備忘録も兼ねて掲載。

Network error [errno 35]: error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure

OpenSSLの脆弱性APIの証明書を再発行したSSLサーバーが多いと思うのだが、自分が使っていたAPIのサーバーも同様に更新していた。
APIはWebPayでライブラリにStripeを使用。

クライアントである自分のサーバーに古い証明書が残っていて、バッティングしてるのかなぁと思って、

$curl = curl_init();
curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,false);

と証明書の検証を行わない設定にしてみたが、改善せず。

色々やってみたのだが、結局下記設定で直った。

$curl = curl_init();
curl_setopt($curl, CURLOPT_SSLVERSION, 3);
curl_setopt($curl, CURLOPT_SSL_CIPHER_LIST, 'SSLv3');

SSLのバージョンと暗号のリストの指定。
今回はライブラリにStripeを使用していたので[ lib/Stripe/ApiRequestor.php ]の172行目辺りに下記設定を追記。

$opts[CURLOPT_SSLVERSION] = 3;
$opts[CURLOPT_SSL_CIPHER_LIST] = 'SSLv3';

今回、WebPayのSSL証明書の更新は4/9なのに、4/11までは普通に使えていた。
なので証明書の更新が原因ではないかも。

SSL通信における脆弱性に対するWebPayの対応