请求中止:无法创建SSL/TLS安全通道。

3
我们有一个使用第三方程序集的.Net 2.0 Web应用程序,从运行在服务器上的网页向第三方站点发出Web服务调用。调用是通过https进行的。这段代码已经运行了多年,直到大约两周前。供应商确实在上个月更新了他们的证书。但是没有其他客户报告问题,我们自己的一些机器也没有问题。在某些服务器上,当调用被执行时,我们会收到“请求被中止:无法创建SSL/TLS安全通道”的错误。在其他服务器上没有问题。所有服务器都是运行相同代码基础的Windows 2003。我们打开了.NET跟踪并在一个良好的服务器和两个有问题的服务器上捕获了跟踪。我们已验证返回给所有服务器的证书是相同的。.NET跟踪显示InitializeSecurityContext调用之一返回了返回码=非法消息。我已经验证了所有服务器上的schannel.dll、secur32.dll和system.net.dll版本是相同的。我还验证了CA是否受信任(它是Verisign)。 目前我正在寻找任何故障排除想法。 以下是日志摘录。第一个来自出现错误的服务器的日志。请注意,在坏服务器的日志中,字节接收序列始终为204、5、2、error。在好服务器上,字节序列始终为204、5、1、continueneeded。 坏服务器 System.Net.Sockets Verbose: 0 : [15784] 退出Socket#50912888::Send() -> 204#204
System.Net.Sockets Verbose: 0 : [15784] Socket#50912888::Receive()
System.Net.Sockets Verbose: 0 : [15784] 来自Socket#50912888::Receive的数据
System.Net.Sockets Verbose: 0 : [15784] 00000000 : 15 03 00 00 02 : ......
System.Net.Sockets Verbose: 0 : [15784] 退出Socket#50912888::Receive() -> 5#5
System.Net.Sockets Verbose: 0 : [15784] Socket#50912888::Receive()
System.Net.Sockets Verbose: 0 : [15784] 来自Socket#50912888::Receive的数据
System.Net.Sockets Verbose: 0 : [15784] 00000005 : 02 28 : .(
System.Net.Sockets Verbose: 0 : [15784] 退出Socket#50912888::Receive() -> 2#2
System.Net Information: 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 异常: 请求被中止: 无法创建 SSL/TLS 安全通道。

System.Net 错误: 0 : [15784] HttpWebRequest#44205226::EndGetRequestStream 异常: 请求被中止: 无法创建 SSL/TLS 安全通道。

好的服务器:

System.Net.Sockets 详细: 0 : [0244] 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 详细: 0 : [0244] 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 详细: 0 : [0244] 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 详细: 0 : [0244] 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, returned code=OK).

1个回答

0

既然您要求故障排除提示,而不是明确的答案,我会将此作为答案发布,但请根据实际情况进行考虑...

基于这样一个事实,即一些服务器可以访问此内容,而其他服务器则不能,我敢打赌问题仍然是证书信任的问题。

该证书可能由Verisign颁发,并且在大多数机器上可能受到信任,但这并不意味着它在所有机器上都受到信任。

大约6个月前,当我们更新主要Web服务器上的证书时,我们遇到了类似的问题。我们接到了几个客户的电话,在每种情况下,解决方法是让他们转到Windows更新并查找根证书更新,或者从Microsoft下载最新的更新。 显然,由于某种原因,根证书更新并不总是在正常更新过程中应用。


你知道如何判断Windows 2003服务器是否拥有最新的根证书吗?应该安装了保持这些证书最新的服务。Windows Update网站只提供XP的证书更新包。感谢您的建议。 - Tim
我不确定如何准确告诉你。这可能是一个适合在Serverfault.com上询问的问题,但我知道如果你搜索Microsoft下载站点http://www.microsoft.com/downloads/en/results.aspx?freetext=root+certificate+updates&displaylang=en&stype=s_basic,你可以找到最新的根证书更新。 - David

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接