クライアント証明書による認証を実装したいのですが、いくつかの問題が発生しています。
最初にいくつかの事実
サイト全体で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 を構成する方法だと思います。