私は現在SSLプロキシを実装しており、証明書に関するいくつかの問題に遭遇しました。
オフラインの「会社ルートCA」とオンラインの「会社中間CA」があります。プロキシで「プロキシ中間CA」を生成しましたが、これも「会社中間CA」によって署名されています。
すべてのブラウザーは、ルートCAと発行CAの両方を信頼します。
プロキシ経由でSSLサイトにアクセスすると、証明書の警告が表示されます。ブラウザで証明書チェーンを調べると、次のことがわかります。
プロキシ中間CAを証明書ストアにインポートすると、すべて正常に動作します。サイトに移動すると、証明書チェーンは次のようになります。
ブラウザーがプロキシ中間CAによって発行された証明書を信頼しないのはなぜですか?
ブラウザーは、認識している証明書のみを使用できます。 SSLサーバー証明書の場合、ブラウザーが信頼するルートから検証する証明書(この場合は「偽物」)までチェーンを構築するために必要な証明書をブラウザーが取得する方法は3つあります。
Authority Information Access
拡張機能。これは、URLを使用して、拡張機能を含む証明書の発行者の証明書が見つかる可能性のある場所を指します。自動ダウンロードは、URLが証明書に存在し、対応するサーバーにアクセスできる場合にのみ機能します。さらに、厄介な鶏と卵の問題を防ぐために、上記のURLはHTTPSではなくHTTPである必要があります。ただし、すべてのブラウザがこのダウンロードを行うわけではありません。これは、ブラウザとオペレーティングシステム、およびそれらの構成によって異なります。一部のブラウザは、サーバーから送信された正確なチェーン以外の使用を拒否します。
したがって、私の推測では、SSLサーバーとして機能するプロキシは完全なチェーンを送信しないと思います。 「偽の」証明書と「プロキシ中間CA」を送信しますが、「企業中間CA」は送信しません。したがって、ブラウザにはこの最後の証明書がなく、完全なチェーンを構築できません。
これを確認するには、 OpenSSL (コマンドラインツール)を使用します。
openssl s_client -connect www.aservername.com:443
これにより、サーバーから送信されたチェーン内のすべての証明書のサブジェクト名と発行者名が(他の情報とともに)印刷されます。
または、いくつかのネットワーク監視ツール(例: Wireshark )を実行して、サーバーからの証明書チェーンを含むサーバーからのSSL Certificate
メッセージを確認します。