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

# 追記4(2021/05/03)
　Androidではないですが、件の状況がまた変わりました。今度は、**OpenSSL 1.0.x**の環境下で問題が発生するとのこと。詳しくは[こちらを参照](https://community.letsencrypt.org/t/openssl-client-compatibility-changes-for-let-s-encrypt-certificates/143816)

# 追記3(2020/12/23)
　結局、何も対応しなくても**2024年初め**まで古いAndroid環境もサポートされることになりそうです。新ルートCAである**ISRG Root X1**は、従来のルートCAである**DST Root CA X3**のクロス署名を受けることにより、古いAndroidでも機能するようになる模様。また、デフォルトルートCAの切替日が**2021/01/11**から**2021/06**へ延期されました。詳しくは[こちらを参照](https://letsencrypt.org/2020/12/21/extending-android-compatibility.html)

# 追記2
　Chromeも、Firefox同様に自前のルートストアを持つようになるみたいですね(**iOS版を除く**)。ルートストアには**ISRG Root X1**証明書も含まれるので、時期こそ不明ですが、Chromeを更新できる環境は当問題を解消できるかもしれません。詳しくは[こちらを参照](https://www.chromium.org/Home/chromium-security/root-ca-policy)

# 追記
　ルート証明書の切替日が**2020/09/29**から**2021/01/11**に変更されました。詳しくは[こちらを参照](https://community.letsencrypt.org/t/transition-to-isrgs-root-delayed-until-jan-11-2021/125516)。

# はじめに
　今月の初め頃、[こちらのサイト](https://songmu.jp/riji/entry/2020-08-06-android-letsencrypt.html)にて「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**を追加します。これで、任意の証明書チェーンを指定することができるので、従来のルート証明書に紐付く証明書を発行・更新できます。

```bash:従来の証明書チェーンを指定する例(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年**)の頃合いを見計らって新ルート証明書に切り替えるべきでしょう。

```bash:新しい証明書チェーンを指定する例(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は以前にも[バグ証明書の強制失効処理を取りやめたことがあり](https://security.srad.jp/story/20/03/07/2211251/)、本件も何かしら変更があるかもしれませんので、しばらくは状況を注視しておいた方がよいでしょう。とは言え、今回は既に延期済みですし、性質上期限が存在する案件なので大筋は変わらないと思いますが…

# 参考
- [certbotマニュアル](https://certbot.eff.org/docs/using.html)
- [Transition to ISRG’s Root delayed until Sep 29](https://community.letsencrypt.org/t/transition-to-isrgs-root-delayed-until-sep-29/125516)
- [Transition to ISRG’s Root delayed until Jan 11 2021](https://community.letsencrypt.org/t/transition-to-isrgs-root-delayed-until-jan-11-2021/125516)