EC-CUBE決済モジュールTLS1.2未満使用停止で接続エラーになった場合の解決方法
決済モジュールが続々とTLS1.2未満使用停止の流れになっておりますが、皆さまのサーバはいかがお過ごしでしょうか。 OpenSSL/1.0.1e だから問題ないなと余裕な顔をしてテストしたら全然大丈夫じゃなかった、という私のような方、もしかしたらPHPが使っているSSL認証方式がOpenSSLではなくNSSなのかもしれません。
参考サイト様
- https://qiita.com/hirohiro77/items/73321e2c483a3d68f98d
- http://kayakuguri.github.io/blog/2016/07/07/curl-openssl-tls/
- http://www.denet.ad.jp/technology/2018/02/tls12centos6curl.html
環境
- OS CentOS 6.4
- php 5.3.3
- curl 7.19.7 (i386-redhat-linux-gnu) libcurl/7.19.7 NSS/3.13.6.0 zlib/1.2.3 libidn/1.18 libssh2/1.4.2
エラー内容
HttpsRequestSender 35: SSL connect error
原因
決済サーバーとの通信時、SSLの認証方式としてNSS/3.13.6.0が使われており、TLS1.2での通信に対応していないのが原因でした。
※PHPが使っているcurlライブラリのSSL認証方式は、phpinfo の curl → SSL Version で確認できます。
# php -i|grep 'SSL Version' SSL Version => NSS/3.13.6.0
解決方法
NSSのアップデートか、認証方式をOpenSSLに変更する方法のいずれかで解消されます。 今回はアップデートで大丈夫そうだったので、前者の方法をとりました。
yum udpate nss
phpinfoで確認してみると、バージョンが変わっていないので、httpdを再起動。
service httpd restart
phpinfo上でNSSのバージョンが変わり、購入テストも通りました。
まとめ
参考サイト様にて
CentOS6(Redhat EL6系)では、OpenSSLに変更する方法をお勧めします
とあったのですが、なぜお勧めなのかが調査しきれませんでした。
セキュリティ的な問題があるのでしょうか……。yum updateでよかったのか、ちょっとひっかかっています。