新机器的证书问题 - 提供给包无法识别的凭证
我正在新机器上安装Windows服务。 该服务通过TCP使用问题中的证书对SslStream进行各种操作。新机器的证书问题 - 提供给包无法识别的凭证
该服务在其他2台Windows 2003计算机上使用相同的代码和相同的证书正常运行。但是,这款新机器也是64位处理器的Windows 2003。
当我尝试以“服务帐户”身份运行服务时,我遇到了此问题。它适用于我自己的凭据。 (同样,它可以在其他2台机器上使用此服务帐户正常工作)
我没有在导入证书时启用“强力保护”功能。
这是堆栈跟踪。
System.ComponentModel.Win32Exception: 供给到 包中的凭据未在 在 System.Net.SSPIWrapper.AcquireCredentialsHandle(SSPIInterface SecModule,字符串包, CredentialUse意图,SecureCredential SCC)识别System.Net.Security.SecureChannel.AcquireCredentialsHandle(CredentialUse credUsage,SecureCredential & secureCredential)在 System.Net.Security.SecureChannel.AcquireClientCredentials(字节[] & 指纹)在 System.Net.Security.SecureChannel.GenerateToken(字节[] 输入,的Int32偏移的Int32计数, 字节[] &输出)在 System.Net.Security.SecureChannel.NextMessage(字节[] 传入,的Int32偏移的Int32计数)
在 System.Net.Security.SslState.StartSendBlob(字节[] 传入,计数的Int32, AsyncProtocolRequest asyncRequest)
在 System.Net.Security.SslState.ProcessReceivedBlob(字节[] buffer,Int32 count, AsyncProtocolRequest asyncRequest)
在 System.Net.Security.SslState.StartReadFrame(字节[] 缓冲器,的Int32的ReadBytes, AsyncProtocolRequest asyncRequest)
在 System.Net.Security.SslState.StartReceiveBlob(字节[] 缓冲器,AsyncProtocolRequest asyncRequest)在 System.Net.Security.SslState.CheckCompletionBeforeNextReceive在 System.Net.Security.SslState.StartSendBlob(ProtocolToken 消息,AsyncProtocolRequest asyncRequest)(字节[] 传入,计数的Int32, AsyncProtocolRequest asyncRequest)
在 System.Net.Security.SslState.ForceAuthentication(布尔 receiveFirst,字节[]缓冲液, AsyncProtocolRequest asyncRequest)
处 System.Net.Security System.Net.Security.SslState.ProcessAuthentication(LazyAsyncResult lazyResult)。 SslStream。AuthenticateAsClient(字符串 targetHost,X509CertificateCollection clientCertificates,SslProtocols enabledSslProtocols,布尔 checkCertificateRevocation)
我发现这个问题及其解决方案。
的想法是将权限授予其用于服务标识的帐户。
需要使用的工具WinHttpCertCfg.exe。这对使用客户端证书获取授权的应用程序很有帮助。
它很好地说明如下。 http://support.microsoft.com/kb/901183
感谢Feroze Daud(http://ferozedaud.blogspot.com/),谁在不同的论坛回答了我。
+1感谢您分享解决方案 – 2010-02-25 00:04:34
我有过这样的问题,无论是ASP.NET帐户下运行或使用Windows服务(本地系统帐户下)时,时。如果您在ASP.NET下运行,对于Windows 2003,则需要使用上述cdpnet所述的WinHttpCertCfg.exe工具。 Windows 2008 R2允许您使用GUI访问权限,这是一个不错的改进。
但是,作为Windows服务运行时,您需要确保证书位于个人证书存储区中,方法是进入mmc并为Windows服务帐户添加证书管理单元,或者如果您正在使用'本地系统'帐户,只需获取本地计算机的管理单元即可。
这里是我发现的区别...
如果您已经安装了个人证书,以自己的用户的证书存储和复制,并粘贴到本地计算机存储,这并不总是工作。但是,如果从本地计算机存储,个人文件夹中删除证书,则可以右键单击本地计算机存储中的个人文件夹,然后导入并通过向导。
出于某种原因,这个修复它,并使用该证书分配正确的权限。祝你好运!
我在做什么在这里描述了一个Win 2003 Serv,但仍然无法让它工作,因为mssg“提供给包无法识别的凭据”。
我尝试了所有上述解决方案,但没有成功。
最后我得到它的工作执行以下操作:
- makecert -pe -n “CN = CERT” -ss我-sr LOCALMACHINE -a SHA1 -sky交换-eku 1.3.6.1.5.5。 7.3.1 -in “CERT” -is MY -ir LOCALMACHINE-SP “微软RSA SChannel加密提供程序” -sy 12 CERT.cer
- 使用从个人MMC拷贝产生的受信任的根
- 使用证书(.CER )从您的服务应用程序的X509电话。
为什么...谁知道.....高兴它为我工作....希望这使得它在其他的要简单
看看第一个搜索结果是:http://www.google .com/search?q =“+凭证+提供给+ +包+ + +不被识别” – 2010-02-23 23:39:13
我曾看过那个论坛主题,Wim。它正确地解释了这里发生的事情。它不适用于我的原因是我必须解决这个问题,因为“服务帐户”不能用于登录到计算机并以该身份安装证书。 但是在下面的文章中提到了解决“永远的人”的正确方法,我在“答案”中发布了这个文章。 – cdpnet 2010-02-24 18:50:48