请求被中止:无法创建 SSL/TLS 安全通道
Posted
技术标签:
【中文标题】请求被中止:无法创建 SSL/TLS 安全通道【英文标题】:The request was aborted: Could not create SSL/TLS secure channel 【发布时间】:2011-07-18 05:57:20 【问题描述】:我们有一个 .Net 2.0 网络应用程序,它使用第三方程序集从我们在服务器上运行的网页向第三方站点进行网络服务调用。呼叫是通过 https 进行的。直到大约 2 周前,此代码多年来一直运行没有问题。供应商确实在上个月更新了他们的证书。但是,没有其他客户报告过问题,我们自己的一些机器也可以正常工作。在我们的一些服务器上,当我们进行调用时,我们得到。在其他服务器上没有问题。这些服务器都是运行相同代码库的 Windows 2003。我们打开 .Net 跟踪并在一台好服务器和两台坏服务器上捕获跟踪。我们已经验证返回给所有服务器的证书是相同的。 .Net 跟踪显示返回的 InitializeSecurityContext 调用之一返回代码=非法消息。我已经验证 schannel.dll、secur32.dll 和 system.net.dll 在所有服务器上都是相同的版本。我还验证了 CA 是可信的(它的 Verisign)。
此时我正在寻找任何疑难解答的想法。
日志摘录如下。第一个来自收到错误的服务器。请注意,在坏服务器的日志中,字节接收序列始终为 204、5、2、错误。在好的服务器上,字节序列始终是 204、5、1,需要继续。
服务器错误
System.Net.Sockets Verbose: 0 : [15784] Exiting Socket#50912888::Send() -> 204#204
System.Net.Sockets 详细:0:[15784] Socket#50912888::Receive()
System.Net.Sockets 详细:0 : [15784] 来自 Socket#50912888::Receive 的数据
System.Net.Sockets 详细:0:[15784] 00000000:15 03 00 00 02:.....
System.Net.Sockets Verbose: 0 : [15784] Exiting Socket#50912888::Receive() -> 5#5
System.Net.Sockets 详细:0:[15784] Socket#50912888::Receive()
System.Net.Sockets 详细:0 : [15784] 来自 Socket#50912888::Receive 的数据
System.Net.Sockets 详细:0:[15784] 00000005:02 28:.(
System.Net.Sockets Verbose: 0 : [15784] Exiting Socket#50912888::Receive() -> 2#2
System.Net 信息: 0 : [15784] InitializeSecurityContext(credential = System.Net.SafeFreeCredential_SECURITY, context = 10709bc8:189fc88, targetName = transform.documentmailbox.net, inFlags = ReplayDetect, SequenceDetect, Confidentiality, AllocateMemory, InitManualCredValidation)
System.Net 信息:0 : [15784] InitializeSecurityContext(In-Buffers count=2, Out-Buffer length=0, returned code=IllegalMessage)。
System.Net.Sockets 详细:0:[15784] Socket#50912888::Dispose()
System.Net 错误:0 : [15784] HttpWebRequest#44205226 中的异常:: - 。
System.Net 错误:0:[15784] HttpWebRequest#44205226::EndGetRequestStream 中的异常 - 。
好的服务器:
System.Net.Sockets Verbose: 0 : [0244] Exiting Socket#56654665::Send() -> 204#204
System.Net.Sockets 详细:0:[0244] Socket#56654665::Receive()
System.Net.Sockets 详细:0:[0244] 来自 Socket#56654665::Receive 的数据
System.Net.Sockets 详细:0:[0244] 00000000:14 03 00 00 01:.....
System.Net.Sockets Verbose: 0 : [0244] Exiting Socket#56654665::Receive() -> 5#5
System.Net.Sockets 详细:0:[0244] Socket#56654665::Receive()
System.Net.Sockets 详细:0:[0244] 来自 Socket#56654665::Receive 的数据
System.Net.Sockets 详细:0:[0244] 00000005:01:.
System.Net.Sockets Verbose: 0 : [0244] Exiting Socket#56654665::Receive() -> 1#1
System.Net 信息: 0 : [0244] InitializeSecurityContext(credential = System.Net.SafeFreeCredential_SECURITY, context = b2310:174420, targetName = transform.documentmailbox.net, inFlags = ReplayDetect, SequenceDetect, Confidentiality, AllocateMemory, InitManualCredValidation)
System.Net 信息:0 : [0244] InitializeSecurityContext(In-Buffers count=2, Out-Buffer length=0, returned code=ContinueNeeded)。
System.Net.Sockets 详细:0:[0244] Socket#56654665::Receive()
System.Net.Sockets 详细:0:[0244] 来自 Socket#56654665::Receive 的数据
System.Net.Sockets 详细:0 : [0244] 00000000 : 16 03 00 00 38 : ....8
System.Net.Sockets Verbose: 0 : [0244] Exiting Socket#56654665::Receive() -> 5#5
System.Net.Sockets 详细:0:[0244] Socket#56654665::Receive()
System.Net.Sockets 详细:0:[0244] 来自 Socket#56654665::Receive 的数据
System.Net.Sockets 详细:0:[0244] 00000005:C0 44 EB FF 6A 88 AD DA-2C 5A 74 99 AD 11 CE 16:.D..j...,Zt.....
System.Net.Sockets 详细:0:[0244] 00000015:4B 10 29 D7 DD 4E A0 83-E9 DE EB BD 37 2F 81 FB:K.)..N......7/. .
System.Net.Sockets 详细:0:[0244] 00000025:D4 9C 99 6C FB A0 CA 6B-1A 4E 7A CA B9 39 1B 91:...l...k.Nz..9..
System.Net.Sockets 详细:0:[0244] 00000035:7B 26 B1 01 8C FD C1 08-:&......
System.Net.Sockets 详细:0 : [0244] 退出 Socket#56654665::Receive() -> 56#56
System.Net 信息: 0 : [0244] InitializeSecurityContext(credential = System.Net.SafeFreeCredential_SECURITY, context = b2310:174420, targetName = transform.documentmailbox.net, inFlags = ReplayDetect, SequenceDetect, Confidentiality, AllocateMemory, InitManualCredValidation)
System.Net 信息:0 : [0244] InitializeSecurityContext(In-Buffers count=2, Out-Buffer length=0, return code=OK)。
【问题讨论】:
【参考方案1】:由于您要求提供故障排除提示,而不是明确的答案,因此我会将其作为答案发布,但请记住它的价值...
基于一些服务器可以访问这个而其他不能访问的事实,我敢打赌这个问题仍然是证书的信任问题。
该证书可能已由 Verisign 颁发,并且很可能在大多数机器上都受信任,但这确实不意味着它在所有机器上都受信任。
大约 6 个月前,当我们更新主 Web 服务器上的证书时,我们遇到了类似的问题。我们接到了客户的几个电话,在每种情况下,解决方案都是让他们去 Windows 更新并查找根证书更新或谷歌以获取最新更新并从 Microsoft 下载。显然,出于某种原因,根证书更新并不总是适用于正常的更新过程。
【讨论】:
您知道是否有办法判断 Windows 2003 服务器是否具有最新的根证书?假设使这些保持最新的服务已安装。 Windows Update 站点只有 XP 的证书更新包。感谢您的建议。 我不知道该怎么说。这可能是 Serverfault.com 上的人的问题,但我知道您可以在 Microsoft 下载站点 microsoft.com/downloads/en/… 中找到最新的根证书更新以上是关于请求被中止:无法创建 SSL/TLS 安全通道的主要内容,如果未能解决你的问题,请参考以下文章
请求被中止:无法为 HttpWebRequest 创建 SSL/TLS 安全通道
Braintree 中的“请求被中止:无法创建 SSL/TLS 安全通道”错误
请求被中止:无法创建 SSL/TLS 安全通道 - 没有证书