新しいマシンでの証明書の問題 - パッケージに提供された資格情報が認識されない

StackOverflow https://stackoverflow.com/questions/2322560

質問

新しいマシンに Windows サービスをインストールしています。このサービスは、問題の証明書を使用する SslStream over TCP 経由でさまざまな操作を実行します。

このサービスは、他の 2 台の Windows 2003 マシン上でも同じコードと同じ証明書を使用して正常に動作しています。しかし、この新しいマシンも 64 ビット プロセッサを搭載した Windows 2003 です。

「サービス アカウント」 ID を使用してサービスを実行しようとすると、この問題が発生します。私自身の資格情報では問題なく動作します。(繰り返しになりますが、このサービス アカウントを使用する他の 2 台のマシンでは正常に動作します)

証明書のインポート中に「強力な保護」が有効になっていません。

これがスタックトレースです。

System.ComponentModel.Win32Exception:パッケージに提供された資格情報は、system.net.sspiwrapper.acquirecredentialshandle(sspiinterface secmodule、string package、credentienceuse intent、securecredential scc)でsystem.net.security.securechannel.acquirecredentionsshandle(securecurecurecurecredentice)で認識されていません。 net.security.securechannel.acquireclientcredentials(byte []&thumbprint)at system.net.security.securechannel.generatetoken(byte [] input、int32 count、byte []&byte []&output)at system.net.security.securechannell .nextmessage(byte [] ecoming、int32 offset、int32カウント)
at System.net.security.sslstate.startsendblob(byte [] ecoming、int32 count、asyncprotocolrequest asyncrequest)
で System.Net.Security.SslState.ProcessReceivedBlob(Byte[]) buffer, Int32 count、 AsyncProtocolRequest asyncRequest)
で System.Net.Security.SslState.StartReadFrame(Byte[]) buffer, Int32 readBytes、 AsyncProtocolRequest asyncRequest)
で System.Net.Security.SslState.StartReceiveBlob(Byte[]) buffer, AsyncProtocolRequest でのasyncRequest)。 System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken) message, AsyncProtocolRequest でのasyncRequest)。 System.Net.Security.SslState.StartSendBlob(Byte[]) incoming, Int32 count、 AsyncProtocolRequest asyncRequest)
で System.Net.Security.SslState.ForceAuthentication(Boolean) receiveFirst, Byte[] buffer、 AsyncProtocolRequest asyncRequest)
で System.Net.Security.SslState.ProcessAuthentication(LazyAsyncResult) lazyResult) である。 System.Net.Security.SslStream.AuthenticateAsClient(文字列) targetHost, X509CertificateCollection クライアント証明書、SSL プロトコル enabledSslProtocols, Boolean checkCertificateRevocation)

役に立ちましたか?

解決

私は、問題とその解決策を見つけます。

アイデアは、サービスIDのために使用されたアカウントに権限を付与することです。

ツールWinHttpCertCfg.exeを使用する必要があります。これは、許可を取得するためにクライアント証明書を使用してアプリケーションに便利です。

これはうまくここで説明しています。 http://support.microsoft.com/kb/901183する

私に答えFerozeダウド( http://ferozedaud.blogspot.com/ の)、のおかげで別のフォーラムでます。

他のヒント

私はこの問題ASP.NETアカウントで実行されているか(ローカルシステムアカウントで)Windowsサービスを使用した場合の両方を持っていました。あなたはASP.NETの下で実行している場合は、Windows 2003のためにあなたは、上記のcdpnetで説明したようWinHttpCertCfg.exeツールを使用する必要があります。 Windows 2008のR2は、あなたが素敵な改善であるGUIを使用して、権利にアクセスすることができます。

Windowsサービスとして実行している場合しかし、あなたは証明書は、MMCに入るとスナップインのいずれかのWindowsサービスアカウントの証明書を追加することにより、個人証明書ストアにあることを確認する必要があり、またはあなたが使用している場合「ローカルシステム」アカウント、ちょうどスナップインでローカルコンピュータのを取得します。

ここで私が見つけた差がある...

あなたがあなた自身のユーザーの証明書ストアに個人証明書をインストールしてコピーし、ローカルコンピュータストアにそれを貼り付けていた場合は、

、これは常に仕事をしません。あなたがローカルコンピュータストア、個人用フォルダから証明書を削除する場合は、あなたが右インポートして、ウィザードを通過、その後、ローカルコンピュータストアでの個人用フォルダをクリックすることができます。

何らかの理由で、

、この修正それと証明書を使用するための適切な権限を割り当てます。幸運!

Win 2003 Serv に関してここで説明されている内容を実行していましたが、「パッケージに提供された資格情報が認識されません」というメッセージが表示されたため、それでも動作させることができませんでした。

上記の解決策をすべて試しましたが、成功しませんでした。

最後に、次のようにして動作するようにしました。

  1. makecert -pe -n "CN=CERT" -ss my -sr LocalMachine -a sha1 -sky Exchange -eku 1.3.6.1.5.5.7.3.1 -in "CERT" -is MY -ir LocalMachine -sp "Microsoft RSA SChannel暗号化プロバイダー」 -sy 12 CERT.cer
  2. 個人から信頼されたルートへの MMC コピーの使用
  3. サービス アプリからの X509 呼び出しに対して生成された証明書 (.cer) を使用します。

なぜ...それは誰にも分かりません....私にとってはうまくいってよかった....これで他の人にとっても楽になることを願っています

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top