首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >安全通道支持-经典ASP HTTP请求中发生错误

安全通道支持-经典ASP HTTP请求中发生错误
EN

Stack Overflow用户
提问于 2014-01-25 19:10:36
回答 8查看 61.9K关注 0票数 32

我有一个经典的ASP网站运行在Windows 2012框上。一个页面通过https向另一个应用程序发出HTTP请求,使用如下代码:

代码语言:javascript
运行
复制
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请求(尽管它经常在我到达服务器之前修复自身)。

EN

回答 8

Stack Overflow用户

发布于 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的理由。

票数 18
EN

Stack Overflow用户

发布于 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网站之后,这也是有效的。

我的解决方案

  1. 首先,通过SSL实验室检查您的服务器使用的是哪种安全性。它应该是TLS1.2或更高的,而不是其他TLS或SSL的。它还必须有SHA256加密。您可能需要修补服务器:https://support.microsoft.com/en-us/kb/3106991
  2. 使用IISCrypto来设置正确的TLS和密码。我使用了在堆栈溢出的其他地方提供的注册表更改,但这不起作用,而且实际上完全破坏了我的服务器的所有使用HTTPS帖子,而不仅仅是我的开发网站!IISCrypto还处理密码。
  3. 确保您的应用程序池是v4.5,这本身并不清楚,因为IIS可能只提供v4.0作为选项。然而,这可能实际上是4.5。您可以通过https://msdn.microsoft.com/en-us/library/hh925568(v=vs.110).aspx验证这一点。
  4. 在您的代码中,您需要使用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沙箱尽快是我的建议!!

票数 8
EN

Stack Overflow用户

发布于 2018-10-16 17:35:15

上述任何一个答案都不适用于我的情况。然后我跳到这里的链接:

https://support.microsoft.com/en-za/help/3140245/update-to-enable-tls-1-1-and-tls-1-2-as-a-default-secure-protocols-in

此更新提供了对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 serviceWindows 2008 R2服务器上出站到服务器上,通过TLS反馈了所讨论的错误。我想可能是密码套件的兼容性。Wireshark跟踪指示的Client Hello请求版本为TLS1.0,但服务器需要TLS1.2。从客户端服务发送到出站服务器的密码套件是安全的。问题是Windows服务器上的客户端服务或应用程序使用系统默认值,而不是TLS 1.2。

解决方案是添加一个名为DefaultSecureProtocols的注册表子项,其值对应于应该支持TLS版本的值。将具有DWORD类型的注册表子项添加到以下位置:

  • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet设置\WinHttp
  • HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Internet设置\WinHttp

对于Internet修复,可以向以下位置添加名为SecureProtocols的类似注册表子项(也具有DWORD类型):

  • HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet设置
  • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet设置

下面可以找到两个子项的值表:

代码语言:javascript
运行
复制
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)。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21354992

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档