web-dev-qa-db-ja.com

ブラウザがクライアント証明書の入力を求めていません

背景:

内部アプリケーションを2段階認証プロセスに更新しています。従来のユーザー名/パスワードフォームの上に(スマートカードを介して)クライアント証明書認証プロセスを追加したい。アプリケーションは、C#で記述され、IIS7でホストされ、ChromeおよびIE8を対象としています。

問題:

クライアント証明書の入力をユーザーに要求するアプリケーションの取得で問題が発生しました。 Fiddlerの助けを借りてアプリケーションをデバッグしています。 Fiddlerのユーザーのディレクトリ(C:\ Documents and Settings\USER\My Documents\Fiddler2)にテストクライアント証明書を保存すると、アプリケーションは期待どおりに動作します。スマートカードを保護するPIN番号を入力するよう求められ、正しく入力するとログインフォームに移動します。Fiddlerを閉じると、代わりに403 Forbiddenエラーがスローされます(Fiddler私は理解できなかったのは、アプリケーションが証明書を正常に要求しない理由です。

現在のサーバー設定:

  • 自己署名証明書が作成されました
  • 443バインディングは自己署名証明書を指しています
  • 匿名認証が有効になっています
  • 自己署名証明書は、信頼されたルートCAと中間CAの両方に追加されました(信頼されたルートCAだけでなく、両方にそれがあり、どちらのセットアップも機能していませんが、問題を解決したことがわかりました)。
  • 不要な信頼されたルートCAの残りの証明書を削除しました(証明書が多すぎるとSSLが停止することを別の場所で読みました)。

私は、別のサーバーでゼロから開始する以外に試すアイデアはありません。誰が問題が何であるかを知っていますか?これはかなり単純なもので、マイナーなものが不足しているようです。どんなアイデアも歓迎します。

更新:

今日この問題にもっと時間を費やした後、IIS7が正しく構成されていないことに関係していると強く信じています(元々セットアップしていませんでした)。これは、Failed Request Tracingを有効にし、生成される後続の.xmlファイルを調べて、500エラーがスローされていることがわかったためだと思います。

Chromeは、「403-禁止:アクセスが拒否されました」ではなく、「Webページへのアクセスが拒否されました」というメッセージをスローしています。これが役立つかどうかはわかりません。証明書を必要としない場合、サイトは意図したとおりに機能することを知っています。証明書の要求は、失敗するところです。

アプリケーションプールは.Net 4.0に設定されています|クラシック|ネットワークサービス。

16
LNendza

あなたの問題は、ブラウザがクライアント証明書を提供するリクエストを受け取らないか、それを防ぐためのセキュリティ関連オプションがあることです。 IEは、Webサイトが正しいゾーン(イントラネットまたは信頼済みサイト)にある場合にのみ証明書を提供します。すべての前にこれを確認してください。

それでも解決しない場合は、次のステップで answer を参照してください。 netshドキュメントには次のように書かれています:

clientcertnegotiation
Optional. Specifies whether the negotiation of certificate is enabled or disabled. Default is disabled.

それを有効にすると、最も愚かなブラウザでさえ、認証用の証明書を提供することになっていることに気付くはずです。問題をさらに診断するには、 WireShark を使用して、ネゴシエーションの動作を確認できます。

11
user918176

openssl s_client -connect yourip:443 -prexitそして、CA(自己署名証明書)が受け入れ可能なクライアント証明書CA名でクライアントに送信されるかどうかを確認します。

お持ちでない場合は、まずopensslをインストールする必要があります

8
Boklucius

私が見たどのブラウザーでも、サーバーが信頼するCAによって署名された証明書がない場合、ブラウザーは証明書の選択を要求しません。したがって、サーバーが正しいCAで構成されていることを確認してください。 Bokluciusが提案したように、opensslを使用して、サーバーがクライアントに送信している信頼できるCAのリストを調べ、クライアント証明書に署名したCAがその中にあるかどうかを確認できます。

5
pimlottc

かなり苦しいレッスンをミックスに追加するには:ポート443を使用するSkype(または他のアプリケーション)を必ず終了します。

したがって、ここでのアイデアは、同じマシン(クライアントとIISの両方)で開発環境を実行しており、チームがSkypeや他のアプリを使用して通信する場合です。

この問題をデバッグしようとするのに何時間もかかるのを見て、一見「すべて」を正しく実行しているように見える、netsh http sslcertsなど、再起動しても有効ではありません。さて、Skypeは443を食べるので、それをオフにすると、証明書のプロンプトが「偽」になります。

その後、壁に物を投げたり、わいせつな言葉を叫んだり、単に「怒り、光の死に対する怒り」をお気軽に。

2
rism

特にブラウザの実行中に証明書をインストールした場合は、「ブラウザを再起動してください」という提案を表示します。

1
mwfearnley

また、Fiddlerが邪魔にならないようにしてください。 SSLを解読すると、IEに返されるメッセージが破損し、証明書がインストールされていないため、提供できません。フィドラーをオフにすると、証明書のプロンプトが表示されます。

0