【发布时间】:2011-01-20 07:44:24
【问题描述】:
我正在新机器上安装 Windows 服务。 该服务通过 TCP 上的 SslStream 执行各种操作,这使用了有问题的证书。
该服务在其他 2 台 windows 2003 机器上使用相同的代码和相同的证书运行良好。但是,这台新机器也是Windows 2003 64位处理器。
当我尝试使用“服务帐户”身份运行服务时遇到了这个问题。它适用于我自己的凭据。 (同样,它可以在其他 2 台使用此服务帐户的机器上正常工作)
我在导入证书时没有启用“强保护”。
这是堆栈跟踪。
System.ComponentModel.Win32Exception: 提供给 包裹未被识别 System.Net.SSPIWrapper.AcquireCredentialsHandle(SSPI 接口 SecModule,字符串包, CredentialUse 意图,SecureCredential scc) 在 System.Net.Security.SecureChannel.AcquireCredentialsHandle(CredentialUse credUsage, 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(字节 [] 缓冲区,Int32 计数, AsyncProtocolRequest asyncRequest)
在 System.Net.Security.SslState.StartReadFrame(字节[] 缓冲区,Int32 读取字节, AsyncProtocolRequest asyncRequest)
在 System.Net.Security.SslState.StartReceiveBlob(字节 [] 缓冲区,AsyncProtocolRequest 异步请求)在 System.Net.Security.SslState.CheckCompletionBeforeNextReceive(协议令牌 消息,AsyncProtocolRequest 异步请求)在 System.Net.Security.SslState.StartSendBlob(字节 [] 传入,Int32 计数, AsyncProtocolRequest asyncRequest)
在 System.Net.Security.SslState.ForceAuthentication(布尔值 接收第一,字节[]缓冲区, AsyncProtocolRequest asyncRequest)
在 System.Net.Security.SslState.ProcessAuthentication(LazyAsyncResult 懒惰的结果)在 System.Net.Security.SslStream.AuthenticateAsClient(字符串 目标主机,X509CertificateCollection 客户端证书,SslProtocols enabledSslProtocols,布尔值 checkCertificateRevocation)
【问题讨论】:
-
看第一个搜索结果:google.com/…"
-
我看过那个论坛帖子,Wim。它正确地解释了这里发生的事情。它对我不起作用的原因是我必须为“服务帐户”解决这个问题,该帐户不能用于登录机器并以该身份安装证书。但是我在“答案”中发布的以下文章中提到了为“所有人”解决问题的正确方法。
标签: certificate x509certificate sslstream