我有一个经典的ASP网站运行在Windows 2012框上。一个页面通过https向另一个应用程序发出HTTP请求,使用如下代码:
Sub ShopXML4http(url, inStr, outStr, method, xmlerror)
Dim objhttp
Set objhttp = Server.CreateObject ("MSXML2.ServerXMLHTTP.6.0")
objHttp.open method, url, false
If Method="POST" Then
objHttp.Send instr
Else
objHttp.Send
End if
outstr=objHttp.responseText
Set objhttp=nothing
End Sub
这段代码几乎一直运行良好(每天有数千个请求),但偶尔会有这样的消息失败:
号码:-2147012739 描述:安全信道支持中发生错误 资料来源: msxml6.dll
该应用程序最近从旧的Windows 2003 server转移到了2012 Server,这个问题似乎从来不是老服务器上的问题。此外,当这个错误发生在网站上时,我可以在VBScript中运行完全相同的代码,并且运行良好。重置应用程序池似乎会使站点能够再次执行安全HTTP请求(尽管它经常在我到达服务器之前修复自身)。
发布于 2014-10-29 19:11:48
在从2003年迁移到2008年R2之后,我遇到了同样的问题,并找到了解决方案。更改:
Set objhttp = Server.CreateObject ("MSXML2.ServerXMLHTTP.6.0")
至:
Set objhttp = Server.CreateObject ("MSXML2.XMLHTTP.6.0")
你的问题就会消失。
我试图找出这两个对象的优缺点,但还没有找到不使用XMLHTTP的理由。
发布于 2016-03-25 09:21:42
我也有过同样的问题,并且尝试了很多在各种帖子下提供的解决方案,但最终都没有成功,直到现在。我将参照问题详细说明对我有用的解决方案,就像我的例子中的PayPal一样。我没有打开一个新的帖子,因为这可能不只是一个贝宝的问题在未来。
该解决方案是对类似问题发布的多个堆栈溢出解决方案的组合,但这似乎是最好的解决方案。
问题所在
尝试在Windows 2008上使用使用PayPal沙箱的经典ASP测试PayPal IPN时,将返回“安全通道支持中发生的错误”。
为什么这是个问题
PayPal要求与其系统的所有通信尽可能安全。您将需要一个连接,即TLS 1.2。默认情况下,Windows 2008不是TLS 1.2。
PayPal说你需要一个G5证书,这给混合带来了一些混乱,你需要服务器根,而不是运行代码的域。我也没有安装任何PayPal证书,因为我没有使用API。我不相信你也不需要你的通信从一个HTTPS网站-虽然我的域名是使用标准的GoDaddy EV证书,虽然我做了一个测试的非HTTPS网站之后,这也是有效的。
我的解决方案
Server.CreateObject ("MSXML2.XMLHTTP.6.0")
,而不是上面提到的Server.CreateObject ("MSXML2.ServerXMLHTTP.6.0")
。现在,我不知道为什么非服务器XMLHTTP工作,因为这似乎与其背后的文档相反。现在,经过10天的压力,恐慌和挫折,我不在乎!我希望这对其他人有帮助。
找到解决方案是一场噩梦,所以如果搜索,我会在下面添加一些短语来帮助其他人:
服务器错误导致PayPal IPN失败 PayPal SSL Windows 2008错误 在安全信道支持中发生错误 典型的ASP PayPal沙箱SSL错误
我想公开感谢Rackspace和GoDaddy在这方面的帮助。我想公开声明,我发现paypal拥有有史以来最糟糕的技术支持,只是不关心,不断地指向他们自己的文档,如果他们有回应。他们说,从2014年9月起,他们就一直在发电子邮件,但我从未收到过。这些新的要求在PayPal沙箱上很活跃,但将在2016年9月投入使用。我发现它只是开发了一个新的解决方案,所以需要沙箱--如果你在现场运行,你不会知道这个问题,直到它碰到,然后你就死在水里了。测试您的整个支付系统在PayPal沙箱尽快是我的建议!!
发布于 2018-10-16 17:35:15
上述任何一个答案都不适用于我的情况。然后我跳到这里的链接:
此更新提供了对Windows 2012、Windows7ServicePack 1 ( SP1 )和Windows 2008 R2 SP1中传输层安全性( TLS ) 1.1和TLS 1.2的支持。
使用WinHTTP为安全套接字层(SSL)连接编写的使用WINHTTP_OPTION_SECURE_PROTOCOLS标志的应用程序和服务不能使用TL1.1或TLS1.2协议。这是因为此标志的定义不包括这些应用程序和服务。
此更新添加了对DefaultSecureProtocols注册表项的支持,允许系统管理员指定使用WINHTTP_OPTION_SECURE_PROTOCOLS标志时应使用哪些WINHTTP_OPTION_SECURE_PROTOCOLS协议。
这允许构建的某些应用程序使用WinHTTP默认标志,从而能够在本机利用较新的TLS1.2或TLS1.1协议,而无需对应用程序进行任何更新。
某些Microsoft应用程序从SharePoint库或Web文件夹中打开文档、用于DirectAccess连接的IP隧道,以及通过使用WebDav、WinRM等技术使用WebClient等其他应用程序,都是如此。
此更新不会更改手动设置安全协议的应用程序的行为,而不会传递默认标志。
Client service
在Windows 2008 R2
服务器上出站到服务器上,通过TLS反馈了所讨论的错误。我想可能是密码套件的兼容性。Wireshark
跟踪指示的Client Hello
请求版本为TLS1.0,但服务器需要TLS1.2。从客户端服务发送到出站服务器的密码套件是安全的。问题是Windows服务器上的客户端服务或应用程序使用系统默认值,而不是TLS 1.2。
解决方案是添加一个名为DefaultSecureProtocols
的注册表子项,其值对应于应该支持TLS版本的值。将具有DWORD
类型的注册表子项添加到以下位置:
对于Internet修复,可以向以下位置添加名为SecureProtocols
的类似注册表子项(也具有DWORD
类型):
下面可以找到两个子项的值表:
DefaultSecureProtocols Value Protocol enabled
0x00000008 Enable SSL 2.0 by default
0x00000020 Enable SSL 3.0 by default
0x00000080 Enable TLS 1.0 by default
0x00000200 Enable TLS 1.1 by default
0x00000800 Enable TLS 1.2 by default
例如:
管理员希望重写WINHTTP_OPTION_SECURE_PROTOCOLS的默认值,以指定TLS 1.1和TLS 1.2。
取TLS 1.1 (0x00000200)的值和TLS 1.2 (0x00000800)的值,然后在计算器(程序员模式下)将它们相加,结果注册表值为0x00000A00。
我将0x00000A00作为两个子项的值,它成功地解决了这个问题。
如果您不希望手动输入注册表子项和值,也可以从微软获得一个Easy Fix (链接在这里:https://aka.ms/easyfix51044)。
https://stackoverflow.com/questions/21354992
复制相似问题