Firefoxのリモート設定から中間CA証明書を抽出する

Firefoxのリモート設定から中間CA証明書を抽出する

証明書チェーンの崩壊

サーバーの設定ミスにより、中間CA証明書を返してこないサイトがある

curlやFTPクライアントなどで検証エラー

しかし、Webブラウザーでは正常に通信できることが多い

実は、最近のWebブラウザーには中間CA証明書を補う仕組みが搭載されている

Firefoxの場合

Firefoxでは、Mozillaが収集した中間CA証明書を元にして作られた証明書リストを使用している
(Preloading Intermediate CA Certificates: https://blog.mozilla.org/security/2020/11/13/preloading-intermediate-ca-certificates-into-firefox/)

Google Chrome (Chromium)の場合

Google Chrome (Chromium)ではAIA (Authority Information Access) fetchingという仕組みが使われている

サーバ証明書に中間証明書のダウンロード先URLが書かれている

ここから中間CA証明書をダウンロードし、証明書チェーンを構築する

ダウンロードした中間CA証明書はルート証明書によって検証される

なぜFirefoxはAIA fetchingをしないのか?

RESOLVED (nobody) in Core – Security: PSM. Last updated 2017-09-24.
bugzilla.mozilla.org

ごちゃごちゃ書いてあるが、要約すると、

  • パフォーマンス上の問題がある(中間CA証明書をダウンロードしてくるのに時間がかかる)
  • セキュリティやプライバシー上の問題がある(サーバ証明書は検証されたものではないため、AIAフィールドに任意のURLを指定できる -> 任意のURLにアクセスさせることができる)

具体的にFirefoxがどのようにして中間CA証明書を補うのか

証明書リストはリモート設定より取得される

リモート設定はFirefox本体をアップデートしなくても特定機能の有効化や無効化、悪意のあるアドオンのブロックなどを適用することができる

リモート設定はもしMozillaに悪意があればブラウザーに保存されているありとあらゆるデータ(セッショントークン、パスワード、クレカ情報など)を窃取することがてきるほどになんでもできる

中間CA証明書リストを取得する部分の該当コード

やってることとしては、

  1. https://firefox.settings.services.mozilla.com/v1/buckets/security-state/collections/intermediates/records から中間CA証明書リストを取得
  2. 取得したリストから証明書のダウンロード先を抽出
  3. 証明書をダウンロード&読み込み

証明書を抽出

これらの処理やデータ構造を解析して、リモート設定から中間CA証明書を抽出する簡単なスクリプトを作成

抽出した証明書をcurlやFTPクライアントなどに読み込ませることで、不適切な設定になっているサーバ間でもセキュアな通信ができる

作成したスクリプト

今回作成したスクリプトはGitHubに公開している

Contribute to typeling1578/mozilla-intermediate-ca-certificates development by c…
github.com