【PHP】PEAR/HTTP_Request2がバージョンアップしててハマった話

PHP logo
先日、業務で使用しているサーバの定期メンテナンスがありまして、使用しているライブラリの更新などを行ったのですが、その更新以来、クレジットカード決済が出来なくなってかなり焦りました。



エラーログを見てみると、


Unable to connect to tls://www.****.jp:443. Error: stream_socket_client(): unable to connect to tls://www.****.jp:443 (Unknown error)
stream_socket_client(): Failed to enable crypto
stream_socket_client(): SSL operation failed with code 1. OpenSSL Error messages:
error:1407742F:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert insufficient security


となっていて、どうやら「お前、TLS1.0 で接続しようとしているようだけど、それ出来ないから」と言われているみたい。確かに接続先には「TLS1.1」または「TLS1.2」で接続するようにと言われているけれど、これまでそれ対応出来ていたはずなんですよね。なんでいきなり出来なくなった?



原因特定に苦戦

なんせ composer による一括アップロードの結果であり、そのあとに yum update もカマしているので、「どうやら更新したせいだ」というのはわかるものの原因が特定出来ずに改修作業は難航。最初はOpenSSLとか証明書とかの問題を調べていたんですが特に問題がなさそうで、もしやそんなことはあるまいなと思いつつPEAR/HTTP_Request2を見てみたら、バージョン変わってんじゃん。


HTTP_Request2 :: 2.4.1


翌週アップデートする予定になっていたサーバ上のアプリケーションで試したら、クレジット決済は問題なく完了。HTTP_Request2のバージョンは2.3.0。一方で問題が起きているサーバのHTTP_Request2のバージョンは2.4.1。

HTTP_Request2の更新履歴を見てみると……7/26に2.4.0が、8/1に2.4.1がリリースされていることが判明。「PHP 5.6.0以降」は満たしているし、特に問題ないはずなんだけどなあと思いつつ、バージョンを2.3.0にダウングレードしてみたら……


直りました。

マジかよ。



とりあえず2.3.0で緊急対応

セキュリティリスクのことを考えると、2.4.1でも動くようにしておく必要はあり、その改修は今後行っていく予定なのですが、とりあえず現状は2.3.0にすることで対応。ていうかこんな影響あるアップデートするならどっかで告知してくれよと思ったけどその告知を受け取る立場にはいないから難しいか。でもまさか、後方互換ない更新が行われるとは……それともうちのプログラム(前任者実装)がなんか問題あるのかしら。

わかんないけど、久しぶりに肝を冷やした事件でした。大事に至らなくて良かった。あと、次のアップデートで同じことやらかさないようにしておかないと。