【发布时间】:2015-05-21 12:43:20
【问题描述】:
Sage Pay 今天终止了网站在与其支付/授权服务器通信时使用 SSL3 的豁免。现在需要 TLSv1。
我们有一个运行 IIS6 的 Windows Server 2003 机器,以及两个用 Classic ASP 编写的站点(遗憾的是)。该框已被修补/更新注册表项以减轻 POODLE 的影响,并且各种在线检查器对此进行了备份。服务器应该只使用 TLS。
但是,当尝试使用 WinHttp.WinHttpRequest.5.1 和 POST 授权 Sage Pay 交易时,尝试立即失败。 WinHttpRequest 反馈的唯一错误是“-2147483638 - WinHttp.WinHttpRequest - 完成此操作所需的数据尚不可用。”
同一服务器上的 Internet Explorer 也无法访问托管在同一 URL 上的 Sage Pay 管理界面。尽管 SSLv2 和 SSLv3 在 Internet 选项中已关闭,但还是会这样。同样,TLSv1 应该是盒子上任何东西可用的唯一选项。
我在 WinHttp 对象上设置什么超时或选项并不重要 - 它失败得如此之快,几乎就像它甚至没有尝试过一样。
我已验证有问题的服务器可以使用 curl 与 Sage Pay 的服务器通信。 curl 可以在没有指定协议的情况下工作(它使用 TLS),也可以通过手动指定 - 并且在指定 SSL2 或 3 时不会 - 正如预期的那样。
如果这可行,为什么其他任何事情都行不通 - 当服务器配置的每一点都表明它应该这样做时?
下面是一小段代码,它返回上面引用的 WinHttpRequest 错误:
<%
VSPServer = "https://test.sagepay.com/showpost/showpost.asp"
Set objHTTP = Server.CreateObject("WinHttp.WinHttprequest.5.1")
On Error Resume Next
objHTTP.Open "POST",CStr(VSPServer),False
objHTTP.Send "Hello"
If Err.Number <> 0 Then
Response.Write "Status: " & objHTTP.Status & "<p>"
Response.Write Err.Number & " - " & Err.Source & " - " & Err.Description
End If
On Error Goto 0
Set objHTTP = Nothing
%>
如果在 objHTTP.Open 行中将 False 更改为 True(以运行此异步),则脚本不会返回任何内容。该脚本在 Sage Pay 今天下午关闭之前运行。
【问题讨论】:
-
这可能是相关的 - WinHttp TLS connection in classic asp
-
在我们提供帮助之前,看看将请求发送到 SagePay 的代码会非常有帮助,否则我们只是在猜测。
-
谁投票决定将其关闭为“非主题”,因为“关于专业服务器或网络相关基础设施管理的问题已关闭- Stack Overflow 的主题,除非它们直接涉及编程或编程工具。您可以通过 Server Fault 获得帮助。"您的推理有缺陷,这与编程直接相关。
-
我已经编辑了我的帖子以添加代码示例
标签: iis ssl asp-classic windows-server-2003 opayo