1

クライアントとサーバーの証明書と共に .NET SslStream クラスを使用するアプリケーションがあります。このアプリケーションは、Windows XP でうまく機能します。ただし、Windows 7 (おそらく Vista も) では、SslStream.AuthenticateAsClient を呼び出すと、次の例外が表示されます。

System.ComponentModel.Win32Exception: The credentials supplied to the package were not recognized   
  at System.Net.SSPIWrapper.AcquireCredentialsHandle(SSPIInterface SecModule, String package, CredentialUse intent, SecureCredential scc)   
  at System.Net.Security.SecureChannel.AcquireCredentialsHandle(CredentialUse credUsage, SecureCredential& secureCredential)   
  at System.Net.Security.SecureChannel.AcquireClientCredentials(Byte[]& thumbPrint)   
  at System.Net.Security.SecureChannel.GenerateToken(Byte[] input, Int32 offset, Int32 count, Byte[]& output)   
  at System.Net.Security.SecureChannel.NextMessage(Byte[] incoming, Int32 offset, Int32 count)   
  at System.Net.Security.SslState.StartSendBlob(Byte[] incoming, Int32 count, AsyncProtocolRequest asyncRequest)   
  at System.Net.Security.SslState.ProcessReceivedBlob(Byte[] buffer, Int32 count, AsyncProtocolRequest asyncRequest)   
  at System.Net.Security.SslState.StartReadFrame(Byte[] buffer, Int32 readBytes, AsyncProtocolRequest asyncRequest)   
  at System.Net.Security.SslState.StartReceiveBlob(Byte[] buffer, AsyncProtocolRequest asyncRequest)   
  at System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest)   
  at System.Net.Security.SslState.StartSendBlob(Byte[] incoming, Int32 count, AsyncProtocolRequest asyncRequest)   
  at System.Net.Security.SslState.ForceAuthentication(Boolean receiveFirst, Byte[] buffer, AsyncProtocolRequest asyncRequest)   
  at System.Net.Security.SslState.ProcessAuthentication(LazyAsyncResult lazyResult)   
  at System.Net.Security.SslStream.AuthenticateAsClient(String targetHost, X509CertificateCollection clientCertificates, SslProtocols enabledSslProtocols, Boolean checkCertificateRevocation)

アプリケーションが Windows 7 で「管理者として実行」されている場合、すべてがうまく機能します。ここでの根本的な原因は、AuthenticateAsClient がクライアント証明書 (ローカル マシンの個人証明書ストアにインストールされている) の秘密キーを必要とし、そのアクションには管理者アクセスが必要であることだと推測しています。

私の質問は、これを改善するためにできることはありますか? それとも、クライアント証明書で AuthenticateAsClient を使用するには管理者権限が必要であることは、単なる現実なのでしょうか?

4

2 に答える 2

2

WinHttpCertCfg を使用して、現在のユーザーに証明書へのアクセス権を与えてみましたか?

何かのようなもの:

winhttpcertcfg -g -c LOCAL_MACHINE\My -s MyCertificate -a TESTUSER

詳細については、この記事を参照してください。

于 2010-11-16T12:31:56.993 に答える