我要连接的服务器需要 TLS 1.1。我的尝试失败了。我在使用经典 ASP 的 Windows Server 2008 R2 Standard SP1 64 位计算机上。
这是我的代码:
const WinHttpRequestOption_SecureProtocols = 9
const SecureProtocol_TLS1_1 = 512
dim objHTTP
set objHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
没有错误:
objHTTP.Option(9) = 128
'没有错误:
objHTTP.Option(9) = &H80
'错误就在这里:
objHTTP.Option(WinHttpRequestOption_SecureProtocols) = SecureProtocol_TLS1_1
'错误就在这里:
objHTTP.Option(9) = 512
'错误就在这里:
objHTTP.Option(9) = &H200
无论我将这一行放在代码的什么位置,我在尝试执行时仍然会遇到此错误:
Microsoft VBScript 运行时错误“800a0005”
Invalid procedure call or argument: 'Option'
我的服务器浏览器是IE8,所以我安装了IE11希望能有更好的效果。同样的错误。
我把IE11的Internet选项设置为
- (未选中)使用 SSL 2.0
- (未选中)使用 SSL 3.0
- (未选中)使用 TLS 1.0
- (选中)使用 TLS 1.1
- (选中)使用 TLS 1.2
在注册表中:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\
我将 TLS 1.1 和 1.2 设置为 enabled=1
和 DisabledByDefault=0
其余的都设置在对面。
我在 /ControlSet001/
和 /ControlSet002/
做了同样的事情
为什么我不能设置 objHTTP.Option(9) = 512
?
奖励问题:为什么 WinHttp 坚持使用 TLS 1.0 而不管我的服务器设置如何?
最佳答案
此选项表示 TLS 1.0:
objHTTP.Option(9) = 128
Windows 2008 R2 上的 winhttp.dll 库只引用了这个值。 这就是为什么您没有任何错误的原因。
下一个选项表示 TLS 1.1:
objHTTP.Option(9) = 512
但只有 Windows 2012 和更新版本知道这个值。 这就是您在 Windows 2008 R2 上出现错误的原因
因此您必须升级 Windows 才能使用此设置。
或者存在另一种使用注册表修复的方法。 因为如果您的代码中未指定,Windows 会使用此值。
这种方法无需更改任何代码行即可工作。
一般来说:
在下一节中注册协议(protocol) TLS 1.1 或什至 1.2 更好(或两者)
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols
在下一节中使用值“DefaultSecureProtocols”告诉 winhttp.dll 默认使用这些协议(protocol)之一
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\WinHttp]
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Internet Settings\WinHttp]
在我的回答中查看更多详细信息: Classic ASP Outbound TLS 1.2
关于ssl - 选项 9/Win2008/Classic ASP 上的 WinHttp 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31886775/