Let’s Encryptの証明書はJava未対応でエラーとなる

2016年7月31日

SSL通信に切り替えたら、RSS配信でエラーが発生した

Googleが本格的にHTTPSプロトコロル(SSL通信)に力を入れ始めたので、今まで一部の企業サイト程度しか導入していなかったSSL通信の導入を検討し始めた方も多いのではないでしょうか。

ウェブサイトをSSL通信に切り替えるためにはサーバー証明書が必要なのですが、無償SSLサーバー証明書「Let’s Encrypt」の提供が始まったことでぐっと敷居が下がったため、明日か明後日にでも導入してみたいと考えてたりしませんか?

しかし、Let’s Encryptを使うことで発生するデメリットも存在するので紹介しておきます。

JavaはLet’s Encrypt未対応

2016年7月現在、JavaではLet’s Encryptに未対応となっています。(正確にはOracle JRE/JDK)

訂正
2016年7月19日にリリースされたVersion 8 Update 101からLet’s Encryptに対応したとのこと。企業側のJavaがアップデートされるのを待ちましょう。

これがどういうことかというと、せっかくLet’s Encryptを使ってサーバー証明書を手に入れても、「Javaを介して証明書を認証するとエラーが発生する」ということです。

技術的な説明を簡単にすれば、Java(Oracle JRE/JDK)がチェックの際に参照する信用できるサーバー証明書発行元リスト(Trusted root CA)に、Let’s Encryptがまだ登録されていないことに由来します。つまり現状JavaからはLet’s Encryptの証明書は怪しいと判断されているわけです。

海外のフォーラムではさらに技術的な議論が行われ検証されたようです。

スマートニュース向けRSSなどのエラーの原因

ニュースアプリとして知られる”スマートニュース”などでは、自分のブログのRSSフィードを登録しておくことで、ブログ記事をスマートニュースに掲載することが可能です。

スマートニュースに登録するRSSは掲示されているフォーマットに沿った内容となっているかチェックを通過する必要があるのですが、それを確認するための「SmartFormat Validator」では、Let’s Encryptの証明書を利用したRSSに対して下記のようなエラーを出力します。

sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

出力されているのはセキュリティに関するエラー、つまりこの場合はサーバー証明書が怪しいというエラーが出力されています。

エラーの解決方法

現状ではクライアント側(スマートニュース)が、Let’s Encryptを信用できるリスト(keystore)に登録することでこのエラーは解消できます。

しかし現実的には企業がLet’s Encryptを全面的に信用してコードを改修する、なんて手は打ってくれないと思いますので、打つ手なしです。Oracleがはやく対応してくれることを祈りましょう。

暫定措置としては「HTTPプロトコル利用をスマートニュース向けのRSSのみやめる」ことが、個人ブロガーができる対応となります。もしくは本末転倒ですが、既にOracleからも認証されている有償のサーバー証明書に切り替えることです。