PSIRT ブログ

フォーティネットと期限切れのLet's Encrypt証明書

投稿者 Carl Windsor | 2021年10月4日

フォーティネットは、9月30日の早朝に、Let's Encryptの証明書を使用したWebサイトへのTLS接続が失敗していることをお客様から知らされました。フォーティネットの最初の対応は、証明書のチェーンを検証することでした。その結果、Let's Trust証明書のルートCAであるIdenTrust DST Root CA X3が、9月30日の00:00 UTCに期限切れになっていることがわかりました。

これは予想外のことではありませんでした。Let's Encryptは、自己署名方式のISRC Root X1 Root CAへの移行を進めているため、この証明書の廃止を以前から計画していました。これに備えて、フォーティネットは新しいルートCA証明書ISRG Root X1をFortiGateデバイスにプッシュアウトしました。代替チェーンを使用して2021年5月以降に発行されたLet's Encrypt証明書は、FortiGateのトラストストアにすでにある自己署名付きISRC Root X1証明書を使用するように構成されているため、問題は発生しません。

Let's Encryptは、クロスサインを採用した理由として、7.1.1以前のAndroid端末との互換性を高めるためとしています。クロスサインは、(DST Root CA X3の期限が切れた後も)新規LE発行時に(デフォルトで)実施されています。 このワークアラウンドがAndroidデバイスで機能した理由は、AndroidデバイスがトラストアンカーのnotAfterフィールドをチェックしないためです。 Scott Helme氏の投稿 には、クロスサイニングに関する独自の説明があります。

フォーティネットのお客様に発生している問題は、フォーティネットのデバイスが完全な信頼の連鎖を検証し、クロスサイニングされたISRG Root X1ルートの有効期間が長いにもかかわらず、CA IdenTrust DST Root CA X3が期限切れであることを確認すると、その連鎖を無効にすることです。

問題となる期限切れの証明書を証明書ストアから削除しましたが、それでもAuthority Information Access - CA Issuersのエントリによる問題は解決しません。

Authority Information Access(認証機関アクセス情報):
CA Issuers - URI: http://apps.identrust.com/roots/dstrootcax3.p7c

これは、アンカーがローカルの証明書ストアに存在しない場合に、信頼の連鎖を再構築する方法をクライアントに伝えるものです。そこでFortiGateはURLに向かい、期限切れの証明書をダウンロードすると、証明書の信頼の連鎖が不完全なために接続に失敗し、振り出しに戻ってしまいます。

しかし、このURLが利用できない場合、FortiGateは最初から信頼の連鎖を再構築し、ISRC Root X1 Root CA証明書を使用しようとしますが、これは追加のワークアラウンドとなります。

ワークアラウンド:

お客様の管理下にあるサイトでは、サーバー証明書を更新することでこの問題は解消されます。詳しくは、Let's Encryptのサイトをご覧ください。

ワークアラウンド1 – 期限切れのルートCAへのフォールバックを防ぐ

証明書バンドルのバージョン1.28では、期限切れのIdenTrust DST Root CA X3が削除されていますが、FortiGateからapps.identrust.comへのアクセスをブロックすることで、期限切れのルートCAへのフォールバックを防ぎ、正しいルートCAを使用することができます。 これを実現するには、DNSブラックホーリングまたはFQDNポリシーを使用してapps.identrust.comへのアクセスをブロックします。

これにより、FortiGateデバイスは証明書チェーンを再構築し、ストア内のローカル証明書にISRC Root X1 Root CA Certを見つけることになります。

config system dns-database
    edit "1"
        set domain "identrust.com"
        config dns-entry
            edit 1
                set hostname "apps"
                set ip 127.0.0.1
            next
        end
    next
end

ワークアラウンド2 – 期限切れの証明書を受け入れる

お客様が管理できないサードパーティのサイトについては、一時的なワークアラウンドとして、以下のCLIを使用して、この証明書の有効期限の検証をオフにすることができます。

config firewall ssl-ssh-profile
  edit "certificate-inspection"
    config https
      set expired-server-cert allow 
      set untrusted-server-cert allow
end

免責事項:このワークアラウンドを適用することで、無効または期限切れの証明書の影響を受けるウェブサーバーに接続するエンドユーザーは、証明書チェーンを通じて通常与えられる保護が低下する可能性があることを理解する必要があります。この SSL/SSHインスペクションプロファイルを持つファイアウォールポリシーに一致する HTTPS 接続は、FortiGate が Web サーバからの TLS Server Hello で無効/期限切れの証明書を確認してもブロックされない場合があります。エンドユーザーにはブラウザから証明書の警告が表示されることがありますが、期限切れの証明書を提供しているWebサイトに接続するかどうかを決定し、期限切れの証明書に関連するリスクを受け入れるかどうかはエンドユーザの責任となります。

**注意: 恒久的な改善策が実施される際には、この一時的なワークアラウンドを元に戻すことが重要になります。今後、フォーティネットでは、このような一時的なワークアラウンドがセキュリティ評価スコアに影響を与え、設定を元に戻すよう勧告するために、セキュリティ評価サービスにこの設定のテストを含める予定です。

ソリューション

フォーティネットは、証明書の検証を改善し、このようなケースで欠落した証明書チェーンを再構築するための追加のインテリジェンスを追加する長期的なソリューションに取り組んでおり、将来のリリースにこれを含める予定です。

タグ: