2

私は、証明書認証によるトランスポート セキュリティを使用して WCF サービス (WebHttpBinding) をセットアップしたベンダーと協力しています。正しく機能しているベンダー向けの同様のサービスをホストしているので、これがどのように機能するかについての基本的な考えがあります。

Windows 7 で実行し、自分のアカウントでサービスを使用すると、すべて正常に動作し、応答が返されます。テスト アカウントで使用すると、mscorlib で「認証機関 XXXX で SSL/TLS の安全なチャネルを確立できませんでした」という例外が発生します。テスト アカウントを組み込みの Administrators グループに追加すると、正常に動作します。

サーバーの証明書は、サブジェクト フィールドが CN=XXXX に設定された自己署名であり、サーバー証明書は個人ストアにあり、CA 証明書は信頼されたルート証明機関ストアにあります。

さらに、診断を出力して true を返すように System.Net.ServicePointManager.ServerCertificateValidationCallback を設定しようとすると、興味深い動作が得られます。私のアカウントで実行すると、コールバックが 2 回呼び出された後、WCF 呼び出しが成功します。テストアカウントで実行すると、一度呼び出されて戻り、上記の例外が発生します。

私の最善の推測では、これはテスト アカウントに欠けている特権に関連しているということですが、Windows が証明書をどのように処理するかを十分に理解していないため、どこから調べればよいかわかりません。

4

2 に答える 2

3

Microsoft のエンジニアとの電話で数時間かかりましたが、問題は解決しました。これは、サーバー証明書の問題で表示されるエラー メッセージとまったく同じであるため、これが問題であるに違いないと思いました。結局のところ、テスト アカウントにはクライアント証明書の秘密鍵へのアクセス権がありませんでした。これは、winhttpcertcfg を使用して解決できるはずです ( winhttpcertcfg で Windows 7 の iiS ユーザーにアクセス権を付与する場合など) 。

于 2012-06-12T19:22:05.460 に答える
3

これが問題の根源です: ... 個人ストアにサーバー証明書があり、信頼されたルート証明機関ストアに CA 証明書があります。

サーバー証明書をテスト アカウントの個人用ストアにインストールすると、解決するはずです。cmd プロンプトのコマンドは次のようになるはずです。

winhttpcertcfg.exe -g -c LOCALMACHINE\MY -s "certtype" "testuseraccountname"

またはmmcスナップインを使用します(これがどれほど信頼できるかはよくわかりませんが、上記のツールを使用します)

于 2012-06-12T07:19:19.647 に答える