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までは普通に使えていた。
なので証明書の更新が原因ではないかも。