java8でhttps通信に失敗する2

https://hacknote.jp/archives/8039/

では、JVMのオプションに以下を指定することで、ServerNameの設定が変更されてないなどSSL証明書の設定がよろしくないサイトもよしなに通してくれるようになりました。

-Djsse.enableSNIExtension=false

参考

http://ttshiko.hatenablog.jp/entry/20121103/1351927402

http://www.todesking.com/blog/2017-02-11-openssl-alert-handshake-failure/

しかし逆にSSL証明書の設定が厳し目のサイトなどでは弾かれてしまうことがあります。

javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure

試しに同様の接続設定をcurlでやってみると以下のようになります。

curl -I https://XXXX/ -k
curl: (35) SSL peer handshake failed, the server most likely requires a client certificate to connect

Route53 × CloudFront × ACM × S3 みたいな構成のケースですね。

正しい設定をしているケースの方を通して、だめだった時には例外処理をする、という流れがよさそうなので、JVMのオプションの設定からは外して、SSLProtocolExceptionだった時にはHostnameVerifierをtrueにする対応が必要なようです。

参考

http://stackoverflow.com/questions/12361090/server-name-indication-sni-on-java