经典的ASP/IIS6/Win2003服务器可以';无法与TLS服务器通信
Sage Pay今天结束了网站在与其支付/授权服务器通信时使用SSL3的豁免。现在需要TLSv1 我们有一个运行IIS6的windowsserver2003机器,还有两个用经典ASP编写的站点(很遗憾)。盒子已经打了补丁/更新了注册表项,以减轻对贵宾犬的攻击,各种在线检查支持这一点。服务器应仅使用TLS 但是,当尝试使用WinHttp.WinHttpRequest.5.1和POST授权Sage支付交易时,尝试立即失败。WinHttpRequest反馈的唯一错误是“-2147483638-WinHttp.WinHttpRequest-完成此操作所需的数据尚不可用。” 同一服务器上的Internet Explorer也无法访问托管在相同URL上的Sage Pay管理界面。尽管SSLv2和SSLv3在Internet选项中处于关闭状态,但仍存在此问题。同样,TLSv1应该是盒子上任何东西可用的唯一选项 无论我在WinHttp对象上设置了什么超时或选项,它都会很快失败,几乎就像它没有尝试过一样 我已经验证了所讨论的服务器可以通过使用curl与Sage Pay的服务器通信。curl要么在没有指定协议(它使用TLS)的情况下工作,要么按照预期手动指定(当指定SSL2或3时不会) 如果这样做行得通,为什么其他任何事情都不行呢?而服务器配置的每一点都表明应该这样做 下面是一个小代码示例,返回上面引用的WinHttpRequest错误:经典的ASP/IIS6/Win2003服务器可以';无法与TLS服务器通信,iis,ssl,asp-classic,windows-server-2003,opayo,Iis,Ssl,Asp Classic,Windows Server 2003,Opayo,Sage Pay今天结束了网站在与其支付/授权服务器通信时使用SSL3的豁免。现在需要TLSv1 我们有一个运行IIS6的windowsserver2003机器,还有两个用经典ASP编写的站点(很遗憾)。盒子已经打了补丁/更新了注册表项,以减轻对贵宾犬的攻击,各种在线检查支持这一点。服务器应仅使用TLS 但是,当尝试使用WinHttp.WinHttpRequest.5.1和POST授权Sage支付交易时,尝试立即失败。WinHttpRequest反馈的唯一错误是“-2147483638-WinH
<%
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对象上设置了什么超时或选项
-它失败得如此之快,几乎就像它还没有尝试过一样
WinHttpRequest反馈的唯一错误是“-2147483638”-
WinHttp.WinHttpRequest-完成此操作所需的数据
尚不可用“
听起来您发出了一个异步请求,但没有等待响应首先,您需要通过拨打电话找到答案。
第二个,必须设置可用于连接的安全协议 请尝试以下代码,并告知问题是否仍然存在。
选项显式
Const WinHttpRequestOption_SecureProtocols=9
Const SecureProtocol_SSL2=8,SecureProtocol_SSL3=32_
SecureProtocol_TLS1=128,SecureProtocol_TLS1_1=512_
安全协议\u TLS1\u 2=2048
模糊对象
设置objHTTP=Server.CreateObject(“WinHttp.WinHttprequest.5.1”)
objHTTP.打开“获取”https://test.sagepay.com/showpost/showpost.asp”“是的
选项(WinHttpRequestOption\u SecureProtocols)=SecureProtocol\u TLS1
发送
如果objHTTP.WaitForResponse(30),则“最多等待30秒”
"准备好了
响应。写入“状态:&objHTTP.Status&”
响应。写入“响应长度:”&LenB(objHTTP.ResponseBody)
其他的
'请求超时
响应。写入“请求超时”
如果结束
设置objHTTP=Nothing
我现在已经设法解决了这个问题。在改变搜索问题的性质后,我发现Win2003使用不同的加密算法连接到服务器,甚至通过TLS。它使用3DES,而SagePay期望AES。(来源:)
这让我安装了从Richard Day的答案链接的修补程序(-32位英语的修补程序-修补程序页面在这里:)-重新启动后,一切正常
感谢所有提出建议的人。看起来,这最终是服务器级别的问题。如果这需要移动此帖子(因为它不再与编程相关),那么请这样做。请。这可能相关-在我们能够提供帮助之前,查看发送请求给SagePay的代码将非常有帮助,否则我们只是猜测。投票关闭此帖子的人是“离题”,因为“有关专业服务器或网络相关基础设施管理的问题与堆栈溢出无关,除非它们直接涉及编程或编程工具。你也许能得到帮助。“你的推理是有缺陷的,这与编程直接相关。我编辑了我的帖子,添加了一个代码示例,谢谢你。不幸的是,它立即出现了500个错误,错误如下:ASP错误信息:ASP代码:错误号:-2146893018源代码:类别:文件中的WinHttp.WinHttpRequest错误:/ssl_test2.ASP行:14列:-1描述:收到的消息意外或格式错误。第14行是WaitForResponse行。我应该在我的原始帖子中说,在Sage Pay关闭操作系统之前,代码工作得很好——我们在其他运行更新操作系统的服务器上也有相同的脚本/库。他们在原始帖子中说,他们尝试在
objHTTP.Open()上的False
和True
之间切换
function可能是他们在运行后将异步标志设置为True
时发布了错误。为WinHttpRequestOption\u SecureProtocols
指定常量值的功劳。我尝试了此操作,但收到了以下错误:无效的过程调用或参数:“objHTTP.option”
它仍然是直接相关的,因此我认为它应该留在这里。通过wscript.exe
运行脚本的修改版本并返回200
的HTTP状态后,我知道它必须是服务器配置。很高兴分类了。