Nginx: OCSP とクライアント証明書

Nginx: OCSP とクライアント証明書

OCSP ステープルが構成された、動作する Nginx セットアップがあります。ここで、いくつかの URL にクライアント証明書認証を追加したいと考えています。

そこで、ssl_client_certificate制限された URL に使用する CA 証明書 (公開されている CA によって署名されていないプライベート CA 証明書) を指すステートメントを追加しました。また、サーバーの大部分は引き続き公開されている必要があるため、ssl_verify_clientに設定しましたoptional

これは半分しか機能しません。証明書を渡す場合と渡さない場合の両方で cURL(*) を使用してリクエストを実行し、パブリック URL と証明書の存在を確認する保護された URL の両方で期待どおりの応答を受け取ることができます。

さて、ここで質問です。ブラウザで同じ URL にアクセスすると (証明書を提示しない)、Nginx はエラー 400 で応答します。困惑しているのは、Firefox 開発者ツールを使用して失敗したリクエストから cURL リクエストを作成し、コマンド ラインから実行すると、問題なく動作するということです。何が問題なのでしょうか?

また、cURL でも-v--trace-asciiブラウザ内から失敗する理由を説明するものは何も表示されません。ここでは (長い) 構成全体を貼り付けているわけではありません。何か基本的なものが欠けていると思われる場合は、遠慮なくコメントしてください。

編集: cURL は、 Cookieとセッション ID だけでなく、、、、ヘッダーも送信し、Firefox と同様に圧縮を有効にすることをHost確認User-Agentしました。AcceptAccept-LanguageReferrerDNT

また、Firefox と cURL の両方にサーバーに提供できるクライアント証明書がなく、Firefox は証明書を自動的に提供するのではなく、証明書を要求するように設定されています。

もう一つの編集: 昼食から戻った後 (その間に構成を変更していません)、Firefox は最初のページと関連リソースを一度読み込むことができました。数分後、さまざまなリクエストを試しただけで (つまり変更なし)、もう動作しません。また、Chrome はエラー 400 を報告し、開発者ツールから「cURL としてコピー」(これもすべてのヘッダーを含みます) を使用すると、cURL で再び動作することが示されます。また、単一のユーザー エージェントに対して表示される動作に矛盾がないことを確認するために、すべてのリクエストを複数回試しました。困惑しています。すべてが非常にランダムに思えます。

関連情報