4

クライアント証明書による認証を実装したいのですが、いくつかの問題が発生しています。

最初にいくつかの事実

サイト全体でSSLを使用しています。IIS 6 (Windows Server 2003 上) を使用しており、クライアント証明書を要求せずに受け入れるようにサイトを構成しました。ただし、ほとんどのブラウザーは、厳密に必要な場合にのみユーザーに証明書を要求するように実装されています。このため、認証モデルはあまり役に立ちません。

私自身の提案

私の最初のアイデアは、HttpResponse.Statusプロパティを設定することでしたが、最初のスペースの前の文字が整数である必要があります。ブラウザにクライアント証明書を送信させるための有用なステータスは403.7 Client certificate required、これが機能しないことです (上書きできる場合を除きます)。

また、特定のパスに対してクライアント証明書を要求するように IIS を構成することも考えましたが、これはもちろん物理ファイルでのみ機能し、ルーティングでは機能しません。

可能な解決策は、特定のフォルダーを作成し、クライアント証明書を要求することです。これは、解決策というよりはハックです。誰かがより良い提案を持っている場合は、これを避けたいと思います。

明確化

Internet Explorer、Firefox、および Chrome の両方のブラウザー応答をテストしました (Chrome をプライマリ ブラウザーとして使用し、Firefox をセカンダリ ブラウザーとして使用しています)。IIS で必要に応じて構成しない限り、クライアント証明書を要求するブラウザはありません。

HTTP ステータス コード 403.7 は、RFC 2616 がステータス コードを最初の 3 桁としてのみ定義しているため、許可された私の理解によるものです。クライアント証明書が必要な場合、IIS 6 は 403.7 を返すため、それを送信すると、IIS が要件をトリガーする特別なモードに強制されると考えました。

問題は、物理パスではなく仮想パスを指定して証明書を要求するように IIS を構成する方法だと思います。

4

1 に答える 1

3

証明書が必要ではなく単に要求された場合にサーバーから送信されるCertificateRequestメッセージに違いはありません。サーバーはどちらの場合も同じ要求を行い、クライアントが必要な証明書を提供できない場合はハンドシェイクを終了します。したがって、ブラウザが「要求」を無視しているように見える場合は、「要件」も無視しているように見えるはずです。

次の点を確認してください。

  • ブラウザは、すべての証明書要求を無視し、送信しないように構成されていますか?
  • ブラウザは、ユーザーにプロンプ​​トを表示せずに特定の証明書を使用するように構成されていますか?(つまり、ブラウザーが証明書を送信していないことをどのようにして知ることができますか?)
  • サーバーは実際に証明書を要求していますか?

この最後のケースをテストする方法は、OpenSSL ( Cygwinでも利用可能)ツールを使用することです。

openssl s_client -connect server.y.com:443 -msg

サーバーは証明書メッセージを送信した後、クライアント認証を要求していない場合は存在しないCertificateRequestメソッドを挿入します。s_clientの出力は次のようになります。

<<< TLS 1.0 Handshake [length 0008], CertificateRequest
    0d 00 00 04 01 01 00 00

サーバーが特定のパスでのみクライアント認証を使用する場合、クライアントがHTTP要求を送信する前に、最初のSSLハンドシェイクが完了するため、どのように機能するかわかりません。この時点でサーバーが新しいハンドシェイクを要求することは合理的ですが、どのサーバーがこれをサポートしているかを確認するためにテストしたことはありません。

次のように入力して、手動でs_clientを介してHTTPリクエストを偽造できます。

GET /your/path/here HTTP/1.1[Enter]
Host: server.y.com:443[Enter]
[Enter]

CertificateRequestメッセージがまったく表示されない場合は、サーバーが正しく設定されていません。

ディレクトリ構造に基づいてセキュリティ制約を指定することは非常に一般的であり、実際にはセキュリティの管理を適切に簡素化できます。これがあなたに解決策を提供するならば、それについて悪く感じないでください。

403.7はHTTPステータスコードではありません。それは、マイクロソフトが「受け入れ、拡張し、消滅させる」ための策略なのだろうか?いずれにせよ、これはトランスポート層の問題であり、アプリケーション層の問題ではないため、追求する正しい方向のようには聞こえません。

于 2008-09-23T18:16:26.807 に答える