AddTrust External CA Root 期限切れに伴う問題について

武田あやな
5 min readMay 31, 2020

Sectigoのルート証明書が 2020/05/30 10:48:38 UTC で期限切れになったため、インターネットが壊れた(大げさ)
古い非ブラウザなクライアントで影響が大きく、特に OpenSSL 1.0.x では、期限切れの証明書で終わるSectigo証明書チェーンを見に行ってしまっています。

新しいモダンな環境では影響はおこっていませんが、古い環境では問題となっているという感じです。

サーバ側でやること
証明書切れのチェーンを送らないように、AddTrust External CA Root が発行した中間証明書をチェーンから削除することになります。 https://whatsmychaincert.com で自身のサイトの検証を行って確認してみてください。

クライアント側でやること
OpenSSL 1.0.xを使っている場合などはAddTrust External CA Rootではないチェーンで検証するようにする必要があります。

debian系での対応
/etc/ca-certificates.conf を編集し、 mozilla/AddTrust_External_Root.crt を除外します(先頭に#や!を付けると良いでしょう)
そのうえで、 update-ca-certificates を実施してください

redhat系での対応 https://twitter.com/ChristianHeimes/status/1266800555978039296?s=20 を参考にしてください

対応したあとで、クライアントを検証する際には https://addtrust-chain.demo.sslmate.com を利用すると良いでしょう

ざっくり調べたことのメモを貼っておきます。ちゃんとしてるかどうかはわかりませんので、各自確認してください。

Trust Chain Path A (問題のチェーン)

  • AddTrust External CA Root
  • USERTrust RSA Certification Authority
  • InCommon RSA Server CA
  • End Entity

Trust Chain Path B

  • USERTrust RSA Certification Authority
  • InCommon RSA Server CA
  • End Entity

Trust Chain Path C

  • AAA Certificate Services
  • USERTrust RSA Certification Authority
  • InCommon RSA Server CA
  • End Entity

USERTrust RSA Certification Authority は2010年に作成されたもので、すべてのクライアントから信頼されるようになるのに時間がかかりました。
その結果、古いクライアントではこのルートを信頼していません。そこで、すでに信頼されていた AddTrust Exeternal CA Root とクロスルートすることで、チェーンを形成していました。 これが今回期限切れになりました。

つまり、USERTrust RSA Certification Authority を信頼していない古いクライアントで、これまで AddTrust External CA Root のチェーンを使っていたクライアントで問題が起こっています。
しかし、現代のブラウザでは、 USERTrust RSA Certification Authority を信頼しているので、そのルートへのチェーンを使い、サーバが失効した中間証明書を送ったとしても無視してくれるので、問題が起こっていません。

一方、OpenSSL 1.0.x や GnuTLS では問題が起こっています。
これらのクライアントは USERTrust RSA Certification Authority を信頼するように設定されていても、サーバから送信されたAddTrust External CAのチェーンを検証してしまいます。 幸い、AddTrust External CA Root がローカルにある場合のみこの挙動を示し、そうでない場合は USERTrust RSA Certificate Authority へのチェーンを使ってくれます。

また、明示的に AddTrust External CA Root を使うように設定しているようなアプリケーションでも問題が起こります。この場合も、Trust Chain Path BやCを使うように再構成する必要があります。

--

--