23

バックグラウンド:

内部アプリケーションを 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 が正しく構成されていないことが原因であると確信しています (最初は IIS7 をセットアップしていませんでした)。これは、Failed Request Tracing を有効にして、生成された後続の .xml ファイルを調べたところ、500 エラーがスローされていることがわかったためだと思います。

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

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

4

7 に答える 7

12

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

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

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

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

于 2013-03-03T18:56:53.953 に答える
11

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

持っていない場合は、最初にopensslをインストールする必要があります

于 2013-05-24T14:24:25.803 に答える
9

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

于 2013-07-10T15:02:44.777 に答える
3

かなりつらい教訓をミックスに追加するには、ポート 443 を使用する Skype (または他のアプリケーション) を必ず終了してください。

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

この問題をデバッグしようとして、何時間も経過するのを見てください。一見、すべてが「正しく」行われているように見えnetsh http sslcertsますが、再起動しても無駄です。ええと、Skype は 443 を食べることが判明したので、それをオフにすると、証明書のプロンプトが表示されます。

次に、壁に物を投げたり、わいせつな言葉を叫んだり、単に「怒り、光の死に対して怒り」を感じたりしてください。

于 2016-04-15T01:05:09.040 に答える
0

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

于 2016-05-19T18:03:02.730 に答える