java8でhttps通信に失敗する2

@iwasaki 379views 更新:2017年3月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

ログイン / 新規登録してコメントする

このソースコードをストックして後で利用したり、作業に利用したソースコードをまとめることができます。

こちらもお役に立つかもしれません