Let's EncryptのDST Root X3ルート証明書の2021年9月30日の期限切れに伴うCRL発行の予想が外れた件のお詫び
Let's Encryptでこれまで長く使用されてきたIdentrust社発行のDST Root X3ルート証明書が、日本時間2021年9月30日23時1分15秒に期限切れになりました。
DST Root X3ルート認証局が定期発行するCRL(証明書失効リスト)がどうなるか、ずっと気になっており、幾つかの場所で予想を紹介させてもらいましたが、その予想は外れてしまいまいした。お騒がせしてすみませんでした。その贖罪として、このブログを書こうと思います。
どんな予想をして、どう外したか(簡単に)
一般にルート証明書が期限切れになると速やかにルート証明書に紐づく秘密鍵を「破壊」し、ルート証明書が不正利用されないようにします。鍵を破壊してしまうと、CRL(証明書発行リスト)も発行できなくなるので、ルート証明書が期限切れになる前に、今後の中間CA証明書の検証で困らないように(Let's Encryptの場合、DST Root X3からISRG Root X1クロスCA証明書が検証できるように)2024年9月まで利用可能な3年も利用可能なCRLを発行するものと予想していました。
ところが、9月30日にそのようなCRLを発行しませんでした。今の、CRLは10月16日に期限が切れます。大事な事なので二度言います。
証明書の失効とは
PKIがインフラであるための重要な機能の一つとして「誰でも確認できる証明書の失効情報が公開されている」という機能があります。
- ICカードを紛失してしまい、自分の秘密鍵が使えなくなった
- 退職や異動により、証明書に記載された組織の人でなくなった
- (一部)サービスの終了により認証局を停止することになった
- 認証局のシステムや自分のPCをハッキングをされて秘密鍵を不正利用される恐れがある
などの理由で、証明書の有効期限前に証明書を無効にしたい場合に認証局に依頼して証明書を「失効」させることができます。
一般的にログインのためのユーザ管理を行うシステム(IdPなど)では、ユーザ管理データベースやログにアカウントが無効化もしくは削除された情報が残りますが、その情報は公開されません。PKIの場合には証明書には有効期限が記載され公開され、また、証明書の失効に関する情報もまた公開されているのです。
失効情報の公開方法には2つの代表的な方法があります。
- CRL(certificate revocation list: 証明書失効リスト)
- 認証局が基本的には定期的に、何かあれば不定期に発行する失効された証明書のシリアル番号、失効日時、失効理由コードなどが記載された認証局により署名されたリストデータです。
- OCSP(online certificate status protocol: オンライン証明書状態プロトコル)
- 検証したい証明書に記載されたURLにその証明書の情報を送ると、その証明書が失効されているかどうかを知ることができるプロトコルです。
証明書失効リスト(CRL)
証明書のCRL Distribution Pointsという拡張に、どのURLからCRLのファイルをダウンロードできるかという情報が記載されています。例えば、Let's EncryptのDST Root X3ルートからISRG Root X1に発行されたクロス証明書を見てみると
% openssl x509 -in cross.pem -noout -text
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
40:01:77:21:37:d4:e9:42:b8:ee:76:aa:3c:64:0a:b7
Signature Algorithm: sha256WithRSAEncryption
Issuer: O = Digital Signature Trust Co., CN = DST Root CA X3
Validity
Not Before: Jan 20 19:14:03 2021 GMT
Not After : Sep 30 18:14:03 2024 GMT
Subject: C = US, O = Internet Security Research Group, CN = ISRG Root X1
...中略...
X509v3 extensions:
...中略...
X509v3 CRL Distribution Points:
URI:http://crl.identrust.com/DSTROOTCAX3CRL.crl ←ココ!!
...後略...
CRLをダウンロードして中身を見てみるとこんな情報が書かれています。
% openssl crl -in DSTROOTCAX3CRL.crl -inform DER -noout -text
Certificate Revocation List (CRL):
Version 2 (0x1)
Signature Algorithm: sha256WithRSAEncryption
Issuer: O = Digital Signature Trust Co., CN = DST Root CA X3
Last Update: Sep 15 19:50:36 2021 GMT // CRLの発行日時
Next Update: Oct 15 19:50:36 2021 GMT // 最遅の次のCRL発行日時
CRL extensions:
...中略...
X509v3 CRL Number:
232 // CRLの発行(連続)番号
Revoked Certificates: // 失効した証明書のリスト
Serial Number: 0A014142000001415C7FF11500000002 // 失効した証明書のシリアル番号
Revocation Date: Sep 16 16:49:21 2015 GMT // 失効日時
CRL entry extensions:
X509v3 CRL Reason Code:
Cessation Of Operation // 失効理由コード(オプション)
Serial Number: 0A01414200000148ADA40EF900000002
Revocation Date: Nov 13 17:20:16 2019 GMT
CRL entry extensions:
X509v3 CRL Reason Code:
Superseded
...後略...
Let's Encryptの失効情報の提供
いろんなところで似た図を示していますが、現在 Let's Encrypt (のcertbot)から提供されるデフォルトの証明書のチェーンと、提供される失効情報の関係は図で示すとこんな感じ。
DST Root X3ルートCAとISRG Root X1中間CAから発行される失効情報はCRLだけです。そして、Let's Encrypt R3中間CAから発行される失効情報はOCSPレスポンスだけです。Let's Encrypt R3中間CAの発行する証明書は毎日200万枚で、certbotで気軽に失効処理もできますから、普通にCRLなんか出したらエライ大きさになってしまいます。OCSPだけにしたのは賢明ですよね。
ちなみに、OCSPレスポンスはCAが指定したOCSPレスポンダサーバーに権限を委譲して、その鍵で署名する,委譲(delegate)モデルもありますが、Let's Encrypt(やDigiCertさん)は中間CAの鍵で直接署名する直接モデルになっています。
ISRG Root X1の発行するCRLが11ヶ月周期と異常に長いのはちょっと気になりますが、まぁ、それは今回のテーマではないです(笑)。
DST Root X3ルート証明書の9月期限切れとCRL発行の予測と実際
幾つかの場所で、Identrust社発行のDST Root X3ルート証明書が、日本時間2021年9月30日23時1分15秒に期限切れになるから、その前に2024年9月まで使える超長いCRLを発行するはず!!!
と幾つかの場所で予想していましたが、あっさり裏切られました(とほほ)。以下は最近のDST Root X3のCRL発行状況です。
CRL Number | thisUpdate | nextUpdate |
---|---|---|
227 | 2021-04-29 | 2021-05-29 |
228 | 2021-05-27 | 2021-06-26 |
229 | 2021-06-24 | 2021-07-24 |
230 | 2021-07-22 | 2021-08-21 |
231 | 2021-08-19 | 2021-09-18 |
232 | 2021-09-16 | 2021-10-16 |
9月16日に最後のCRL(CRLNumber=232)が発行されて以来、結局9月30日までにはCRLは発行されませんでした。謹んでここにお詫び申し上げます。
最後のCRLのnextUpdateは日本時間2021年10月16日4時50分36秒です。それまでに次のCRLを発行しないと困るケースも出てくるかもしれませんが、今後どうなるかは2つのケースが考えられるように思います。
(ケース1) 実はルート鍵破壊してない
DST Root X3ルート証明書が期限切れになってもルート認証局の鍵は破壊せず、そのまま持ち続けており、(厚顔無恥にも(笑))次のCRLをいつも通り切れる2日前の9月14日あたりに「しれっ」と出すことが考えられます。
- 監査上、利用期限を超えたRSA 2048bitの弱いルート鍵を破壊せずにそのまま使い続けていいものか。不正利用されるリスクは考える必要がないのかは疑問に思います。
- また、CRLを検証する際に、これを発行するルート証明書の有効期限が切れていると多くの実装では検証失敗になるのではないかとも思います。
(ケース2) もしくは今後CRLは発行しない
どうせ、古いAndroidのためのDST Root X3の延命措置なので、ウェブブラウザなんかは真面目にCRLなんか見てないだろうから、もうCRLは発行しない。
と、おもったらあっけない幕切れ
普段から、nextUpdateの2日前にCRLが発行されるんだから10月14日が注目すべき日だったのに見逃していました。そして、日本時間10月14日6時20分に次のCRLが発行されて愕然としました、、、、
thisUpdate: 2021年10月13日 21:20:42 UTC
nextUpdate: 2021年11月12日 21:20:42 UTC
cRLNumber: 233
結果的に「ケース1」だったわけで、DST Root X3ルート認証局の秘密鍵は破壊されておらず、CRLを発行し続けることになったようです。RSA 2048bitのルート鍵をみんなのルートストアに残したままで、秘密鍵も残り続けており、何かあったらとてもヤバいことになると思うんですけどねぇ、、、、
今日はこんなとこで
関連リンク
DST Root X3ルート証明書の期限切れ問題関連でブログポストしたり、セミナー講演をしました。9月30日以降の結果とは違っていることもありますが、参考になることもあると思います。よかったらご覧ください。
Discussion