6

WebアプリをIIS6サーバーからIIS7サーバーに移行していますが、クライアントの証明書の取得に問題があります。

私が使用しているコードは次のようになります。

        HttpClientCertificate cert = Request.ClientCertificate;

        if (cert.IsPresent)
        {
            ...
        }

IIS 6サーバーでは、これcert.IsPresentは常にtrueです。ただし、IIS 7ボックスでは、常にfalseです。両方のテストは、同じコンピューターからIE8を使用して実行されました。唯一の変更はサーバーのURLであったため、クライアントは正しくセットアップされている必要があります。

SSL接続エラーが発生せず(を介してページにアクセスしていますhttps)、[SSL設定]-> [クライアント証明書:]を[承認]に設定しました(IIS 6構成と同じ)。

IIS7サーバーをIIS6サーバーにできるだけ近づけて構成しましたが、まだ証明書を取得していません。

構成のために調べる必要がある他の領域はありますか?

また、[クライアント証明書:]を[必須]に設定すると、IIS7ボックスで403.7エラーが発生します。それが症状かどうかはわかりませんが、万が一の場合に備えて...

4

3 に答える 3

4

基本的には、クライアントがクライアント証明書を提供できないという事実に要約されます。そのため、必要なときに403.7エラーが発生します。私はあなたがこれを必要とすると信じています:

http://blogs.msdn.com/b/puneetgupta/archive/2009/08/03/where-is-the-client-certificates-ui-in-iis-7-0.aspx

これが役に立ったら教えてください。

于 2011-06-20T17:25:45.770 に答える
3

IIS7とIIS6で証明書を取得する方法の詳細を探しているときに、この質問に出くわしました。@whosrdaddyのソリューションが質問者に有効であることがわかります。私が追い詰めなければならなかった何か他のものがあります。

IIS6とIIS7の違いの1つは、IIS6の各Webサイトの構成に[ディレクトリセキュリティ]タブがあることです。IIS 7でWebサーバーに証明書を要求させるには、構成しているWebサイトまたは仮想ディレクトリの[SSL設定]機能をクリックして、[クライアント証明書:]設定([無視]、[承認]、または[必須])を表示する必要があります。

これが「無視」に設定されていないことを確認してください。設定されていない場合、証明書が機能しなくなります。

于 2012-09-03T22:01:57.553 に答える
1

IsPresent == falseは、サーバーとクライアントの両方に関連するいくつかの異なる原因によって発生する可能性があります。最終的にこれらを修正する途中で、これらすべてをヒットしました。それぞれについて詳しく説明します。

サーバーの問題#1-渡されたクライアント証明書に、サーバーに存在しない1つ以上の証明書パスがあります。認証を開き、認証パス(タブ)に移動し、各ルート認証局がSERVERSの信頼されたルート認証局に含まれていることを確認します。サーバーに証明書をインストールする必要はありません。証明書(ローカルコンピューター)\信頼されたルート証明機関の下にあるルート機関の公開鍵だけをインストールする必要があります。

サーバーの問題#2(前述の解決策)-IISでは、サイトで、SSL設定が[承認]または[必須]に設定されていることを確認します(無視しないでください)。Requireを使用する利点は、IISログに403 7エラーが表示されるのに対し、AcceptはIsPresent == falseを取得しますが、200httpコードを使用することです。

クライアントの問題#1-サーバーの問題#1と同じように、これらの機関を信頼するようになりました。

クライアントの問題#2-信頼できるルート権限がありますが、証明書自体の秘密鍵はありません。公開鍵(.cer)ではなく、必ずpfx(秘密鍵)を証明書ストアにインストールしてください。証明書ストアで証明書をダブルクリックすると、秘密鍵を持っているかどうかを確認することもできます。[全般]タブに、同じことを示すメッセージが表示されます。

クライアントの問題#3-証明書を間違った場所に置きました。おそらく、(現在のユーザー)ではなく、証明書(ローカルコンピューター)\個人\証明書に証明書を配置するのが最適です。これにより、コードを実行していて実際にアクセスする必要があるアカウントを処理するために証明書を使用できるようになります。

クライアントの問題#4-証明書を右クリックします(.cerファイルではなくストア内)->すべてのタスク->秘密鍵の管理...そして、コードを実行しているプロセスアカウントに「読み取り」権限があることを確認します。これの簡単なテスト(ただし、本番環境での使用はお勧めしません)は、「Everyone」を既読として追加して、これが問題であるかどうかを確認することです。

于 2014-04-10T19:01:30.570 に答える