javaでhttpsアクセスしようとすると証明書エラーが発生します。
unable to find valid certification path to requested target redhat
別のサーバーであれば問題なく接続できるので、十中八九、証明書の問題なのだと思われます。
そして、証明書エラーが発生するのが「Let’s Encrypt」なので、どう考えてもこいつだと思われます・・・。
Let’s Encryptが利用できるのはどのjavaバージョンから?
公式情報によると、以下のように記載があります。
Java 8 >= 8u101
証明書の互換性(Let’s Encrypt公式サイト、日本語)
つまり、java1.8 update101 以降であればOKということになります。であれば、今回は要件を満たしているのでなんの問題もない・・・
しかし、日本語だけに頼っていると罠に引っかかります。よく見ると原文の英語の方にはより新しいページがあります。以下が英語版です。
Java >= 7u151, 8u141, 9+
証明書の互換性(Let’s Encrypt公式サイト、英語)
そうです、java1.8 update141 以上である必要があるのです。Let’s Encryptを利用するには
- java1.7 update111 以上
- java1.8 update141 以上
- java1.9 以上
なぜ必要なjavaのバージョンが変わったの?
さて、なぜjavaのupdate要件が変わっているのかというと、2021年にLet’s Encrypt が利用するルート証明書が変更されたからです。
2021年9月末時点でLet’s Encryptが利用するルート証明書である「DST Root X3」が利用できなくなり、「ISRG Root X1」に切り替わっています。
「DST Root X3」→「ISRG Root X1」
そのため、java1.8 update101 では、「ISRG Root X1」が入っていないので、証明書エラーとなってしまうわけです。
まとめ
javaのバージョンをあげるか、トラストストアファイル(jssecacerts)を追加する方法になるかと思いますが、長い目で見てjavaのバージョンアップが良いと思います。