Let’s Encrypt が Beta 期間を無事終了し正式公開となったようですが、Oracle の JRE/JDK が Trusted root CA として Let’s Encrypt で使われているものを含んでいません。
先週 LINE の BOT API が公開されて多くの方がこぞって試されていたようですが Let’s Encrypt の証明書を使った場合には Callback へのアクセスがないと報告されています。私も試しましたが、ダメでした。
これもおそらく Oracle の Java が Let’s Encrypt で使われている DST Root CA X3 も ISRG Root X1 も含んでいないからではないかと勝手に推測してます。
Community にもいくつか thread が立ってます
Will the cross root cover trust by the default list in the JDK/JRE?
私は Java のコードを書けませんが、簡単なテストコードが公開されていたのでこれを試してみました。
http://alvinalexander.com/blog/post/java/simple-https-example
$ mkdir foo $ vi foo/JavaHttpsExample.java $ javac foo/JavaHttpsExample.java $ java foo/JavaHttpsExample
Oracle の JRE/JDK では次のようなエラーとなります。
Exception in thread "main" javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
OpenJDK ではアクセスできました。
$ java -version openjdk version "1.8.0_77" OpenJDK Runtime Environment (build 1.8.0_77-b03) OpenJDK 64-Bit Server VM (build 25.77-b03, mixed mode)
クライアント側が keystore に登録すればアクセスできるわけですが、Let’s Encrypt を使おうとされているサーバーに Java のクライアントがいる場合は要注意です。
LINE Bot でもうちょい遊びたいから RapidSSL 更新しなきゃ。