Android7.1以前でLet's Encrypt証明書のサイトが見られなくなる
追記: その後の動きについて書きました → Let's Encryptの証明書切替周りその後
このサイトはLet's Encryptで証明書発行しているのでタイトルの件が気になったのだが、どうもあまり話題になっていない。恥ずかしながらSSL周り詳しいわけじゃないので、誤っているかも知れない。識者の意見を求む。
- Let's Encryptが使われているサイトがAndroid7.1以前のバージョンで今年の9月29日以降見られなくなる可能性がある
- 延命策は用意されそうだが、それも来年の9月29日まで
- Let's Encryptのルート証明書切り替え計画に起因している
Let's Encryptのルート証明書の変更
Let's Encryptはルート証明書を自身(ISRG)の認証局のルート証明書(ISRG Root X1)に切り替えようとしている。現在は、IdenTrustのルート証明書(DST Root CA X3)が使われている。
正確に言うと、ISRGは新しい認証局でそのルート証明書の普及率も当然低かったため、中間証明書はIdenTrustのルート証明書でクロスサインされており、それが標準で使われている。それを、ISRG Root X1ルート証明書でサインされた中間証明書を標準に切り替えようとしている。経緯は以下に書いてある。
https://letsencrypt.org/2019/04/15/transitioning-to-isrg-root.html
これはそもそも、ISRG自身のルート証明書に切り替えていくのが本命だというのと、IdenTrustのルート証明書の有効期限が2021年9月29日に迫っているというのが背景にあると想像する。
切り替えの延長
当初の予定では、今年の7月8日から切り替える予定だったが、9月29日に延長になった。
https://community.letsencrypt.org/t/transition-to-isrgs-root-delayed-until-sep-29/125516
サイトが閲覧できなくなる古いAndorid環境が結構残っていることが大きな理由。Android7.1以前のバージョンにはISRGのルート証明書が入っていないことが原因。ISRGのルート証明書が入ったのはAndroid 7.1.1以降だと以下のエントリにある。なので、Android7.1もおそらくアウト。
https://community.letsencrypt.org/t/transitioning-to-isrgs-root/94056
Androidユーザーの66%しか7.1以降を使っていないという実情があり、無視できないということらしい。(そりゃそうだ…)
ルート証明書の切り替え実施
9月29日以降はISRGのルート証明書を標準にするが、それまでに現行のIdenTrustのルート証明書のチェーンのままサーバー証明書を発行できるオプションを用意する予定のようだ。
つまり、9月29日以降、Let's Encryptでサーバー証明書を発行した場合、デフォルトではAndroid7.1以前で見られなくなる。オプションでルート証明書をIdenTrustのものを指定することで、回避は可能。ただし、IdenTrustのルート証明書自身の有効期限が2021年9月29日なので、それまでにはなんらかの移行プランを考える必要がある。
もしかしたら、今年の9/29のアクション方針が変更になる可能性はあるが、なにはともあれ、来年の9月29日がデッドラインだということ。
移行プラン
現状66%のユーザーにしかAndroid7.1以降が普及していないことを考えると、9月末までに状況が大きく改善されるとは思えないし、来年の9月にしたってそうでしょう。
Android7.1以前のユーザーがサイトやシステムの運営上無視できない場合はCAの移行も考えたほうが良いでしょう。実際、上に挙げた延期のアナウンスエントリでも「状況が大きく変化するとは期待できないので、古いAndroidのためにCAの変更も考えたほうが良いかもしれません。我々は、そのための十分な時間を用意します。」ということが書かれています…!
We don’t expect the Android situation to change much in the coming year, which means sites that need support for older Android devices may need to switch CAs. We’d like to give those sites plenty of time to transition.
我々はどうすればいいのか
Android7.1以前のサポートを打ち切って良いのであれば気にしなくて良いし、このサイトは個人サイトなので別にそれでも良いと思っていますが多くの場合そうもいかないので、以下のような対応になるでしょうか。
- まずは、今年の9/29以降に新しいルート証明書でサーバー証明書が作られないように設定しておく
- 利用しているクライアントの対応状況もウォッチする
- ref. https://github.com/certbot/certbot/pull/8080, https://github.com/go-acme/lego/issues/1197
- 来年の9月29までに、自サービスのクライアント割合の変遷を注視しながら移行プランを考える
- Let's Encryptの利用を継続するのか
- CAを乗り換えるのか
また、SaaS系のサービスで自動証明書発行システムの裏側でLet's Encryptが使われていることも多々あるので、気になる場合はそれらのサービスに対応状況を問い合わせることも必要かもしれません。
しかし、当初の予定通り今年の7/8に切り替えが実施されていたら世の中的に阿鼻叫喚だったと思うので、そうならなくて良かったですね。