Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
经典的ASP/IIS6/Win2003服务器可以';无法与TLS服务器通信_Iis_Ssl_Asp Classic_Windows Server 2003_Opayo - Fatal编程技术网

经典的ASP/IIS6/Win2003服务器可以';无法与TLS服务器通信

经典的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

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错误:

<%
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状态后,我知道它必须是服务器配置。很高兴分类了。