12

背景:ブラウザは、クライアント証明書を要求されていない

I 2段階認証プロセスに内部アプリケーションを更新しています。私は従来のユーザー名/パスワードフォームの上に(スマートカード経由で)クライアント証明書認証プロセスを追加したいと思います。アプリケーションはC#で書かれ、IIS7でホストされ、ChromeとIE8をターゲットにしています。

問題:

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

現在のサーバーのセットアップ:

  • 自己証明書が
  • に作成された署名付き
  • 匿名認証が
  • は、自己署名証明書は、両方に追加された有効になっている自己署名証明書を指しているバインディング信頼されたルートCAと中間CA(私は信頼されたルートCAだけではなく、他の人がそれを持っていたことを読んでいました。 )。
  • 私が必要としなかった信頼されたルートCAの証明書の残りの部分をクリアしました(証明書が多すぎるとSSLが枯渇することがあります)。

他のサーバーで最初からやり直す以外の方法があります。誰が問題が何であるか知っていますか?これは非常にまっすぐ進むべきであり、私は何かマイナーなものを欠いているようだ。どんなアイデアも歓迎されます。

アップデート:今日この問題に多くの時間を過ごした後

、私は強くそれがIIS7は(私はもともとそれを設定していない)が正しく構成されていないとしなければならないと考えています。これは、Failed Request Tracingを有効にして、生成される後続の.xmlファイルを調べたところ、500のエラーがスローされていることがわかりました。

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

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

+0

私は助けることができますが、いくつかの質問がありますか?1)IEやFFも試しましたか? 2)別のサーバーで結果を複製したいことがあります。私はあまりにも多くの問題がこのように助けられた/解決されたことを見てきました - それはまたあなたにあなたのIIS7サイトがどのように設定されているかに根ざしを感じる機会を与えるでしょう。 3)より多くの洞察力を得ることを試みることができるより多くのクライアントおよび/またはサーバロギングがある - おそらく、IIS7側でより多くの可能性があります。 – Lizz

答えて

7

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

これが役に立たない場合は、answerの次の手順をご覧ください。 netshのドキュメントは言う:

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

はそれを有効にしても、非常識なブラウザは、認証用の証明書を提供することになっていることに気付くはずです。問題をさらに診断するには、WireSharkを使用して、実際の交渉を確認してください。

+0

私は十分にこれをupvoteできません。トラブルシューティングが終わってから、お客様が信頼できるゾーンにサイトを置いていないことが判明しました。これを説明してくれてありがとう、もう数日節約してください。 –

4

お試しください CA(自己署名入り証明書)がクライアント証明書CAの名前でクライアントに送信されているかどうかを確認してください。

あなたはそれを私が見てきたすべてのブラウザで

+0

私は 'openssl s_client -connect yourip:443 -prexit'を試したので、同様の問題を抱えていますが、いくつかのエラーメッセージ' CONNECTED(00000104) :errno = 10054 --- 私は有効なSSL証明書を*:443に設定しました。 – RanPaul

+0

@RanPaulこれは非常に遅いですが、Windowsマシンを使用している場合は、OpenSSLがWindows証明書ストアを認識しないことに注意してください。したがって、 '-CApath'または' -CAfile'を提供する必要があります。 [Mozillaの.PEMファイル](https://curl.haxx.se/docs/caextract.html)をダウンロードするか、必要なチェーンから自分自身を作成し​​てください。 [OpenSSLの最新バージョン](https://slproweb.com/products/Win32OpenSSL.html)も必ずインストールしてください。 –

3

を持っていない場合、それはCAによって署名された証明書を持っていない場合は、ブラウザが証明書を選択するようプロンプトを表示しません最初のOpenSSLをインストールする必要がありますサーバーは信頼します。したがって、サーバーが正しいCAで構成されていることを確認してください。 Bokluciusが示唆したように、opensslを使用して、サーバーがクライアントに送信する信頼できるCAのリストを調べ、クライアント証明書に署名したCAがその中にあるかどうかを確認できます。ミックスにかなり痛い教訓を追加するには

1

:必ずスカイプ(または他のアプリケーション)を終了してくださいあなたが同じマシン上のdevの環境を実行しているのであればここでの考え方があるポート443

を食べること(クライアントとIISの両方)、チームはSkypeやその他のアプリを使用して通信します。

この問題をデバッグしようとすると、「右」、netsh http sslcertsなどのすべてを実行しているように見えますが、再起動しても役立たないです。さて、スカイプは443を食べることになるので、それをオフにしてください。あなたの証明書のプロンプトが表示されます。

その後、壁に物を投げたり、猥褻や怒りを叫ぶだけで、「怒り、光の死に激怒する」。

0

また、Fiddlerが途中で止まっていないことを確認してください。 SSLを解読すると、IEにメッセージが壊れてしまい、証明書がインストールされていないため、提供できません。フィドラーをオフにして、証明書のプロンプトが表示されます。

関連する問題