2020/9/29以降、Android7.1以前でLet's Encryptが発行した証明書が無効になる件(追記有)


追記4(2021/05/03)

 Androidではないですが、件の状況がまた変わりました。今度は、OpenSSL 1.0.xの環境下で問題が発生するとのこと。詳しくはこちらを参照

追記3(2020/12/23)

 結局、何も対応しなくても2024年初めまで古いAndroid環境もサポートされることになりそうです。新ルートCAであるISRG Root X1は、従来のルートCAであるDST Root CA X3のクロス署名を受けることにより、古いAndroidでも機能するようになる模様。また、デフォルトルートCAの切替日が2021/01/11から2021/06へ延期されました。詳しくはこちらを参照

追記2

 Chromeも、Firefox同様に自前のルートストアを持つようになるみたいですね(iOS版を除く)。ルートストアにはISRG Root X1証明書も含まれるので、時期こそ不明ですが、Chromeを更新できる環境は当問題を解消できるかもしれません。詳しくはこちらを参照

追記

 ルート証明書の切替日が2020/09/29から2021/01/11に変更されました。詳しくはこちらを参照

はじめに

 今月の初め頃、こちらのサイトにて「Android7.1以前でLet's Encrypt証明書のサイトが見られなくなる」事が報じられて、一部界隈で話題になりました。これは、Let's Encryptで発行する証明書に使うルート証明書が、従来の他認証局の証明書(DST Root CA X3)から自前の証明書(ISRG Root X1)に切り替ることが原因です。
 しかし、変更の影響が大きいこともあり、あと1年(2021/09/29迄)は証明書チェーンに従来のルート証明書を指定することもできるようです。これをもってLet's Encryptから離れるならよいのですが、とりあえず1年延命して様子を見たい方も多いと思うので、以降は来年の2021/09/29まで、従来通りの証明書発行・更新を続ける方法を記載します。なお、証明書の発行・更新にはcertbotを利用することとします。

環境

バージョン
OS CentOS 7系
certbot 1.6.0以降 (yum版はNGなので注意)

対策

 上記サイトでもリンクがありますが、certbotへ渡すオプションに--preferred-chainを追加します。これで、任意の証明書チェーンを指定することができるので、従来のルート証明書に紐付く証明書を発行・更新できます。

従来の証明書チェーンを指定する例(DNS版)
$ certbot certonly --manual --noninteractive --preferred-challenges=dns \
    --preferred-chain "DST Root CA X3" \
    --manual-auth-hook /path/to/dns/authenticator.sh \
    --manual-cleanup-hook /path/to/dns/cleanup.sh \
    -d secure.example.com

 しかし、来年(2021/09/29)には、従来のルート証明書を指定するとエラーになる可能性もある為、新ルート証明書を指定して問題なく動作することも確認しておき、来年(2021年)の頃合いを見計らって新ルート証明書に切り替えるべきでしょう。

新しい証明書チェーンを指定する例(DNS版)
$ certbot certonly --manual --noninteractive --preferred-challenges=dns \
    --preferred-chain "ISRG Root X1" \
    --manual-auth-hook /path/to/dns/authenticator.sh \
    --manual-cleanup-hook /path/to/dns/cleanup.sh \
    -d secure.example.com

備考

 そもそも、Android7.1以前の端末を見放すことができれば上記の対応は不要ですが、各種統計を見る限り、2020/08現在でも30%前後の利用者がいるようで、これを切り捨てるのは現実的ではないと思います。特に、高齢者向けの所謂かんたんスマホは全体的にOSバージョンが古い傾向にあるので、高齢者利用客を見込んでいるようなサイトでは死活問題になりかねません。この件に限らず、電子証明書界隈の情勢は今後も厳しくなっていくと思われるので、これを旧式端末のサポートについて考える機会にしたいと思いました。
 また、Let's Encryptは以前にもバグ証明書の強制失効処理を取りやめたことがあり、本件も何かしら変更があるかもしれませんので、しばらくは状況を注視しておいた方がよいでしょう。とは言え、今回は既に延期済みですし、性質上期限が存在する案件なので大筋は変わらないと思いますが…

参考