【问题标题】:WinHttp errors on option 9 / Win2008 / Classic ASP选项 9 / Win2008 / Classic ASP 上的 WinHttp 错误
【发布时间】:2015-08-07 21:17:07
【问题描述】:

我要连接的服务器需要 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”

无效的过程调用或参数:'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=1DisabledByDefault=0

其余的都是相反的。

我在/ControlSet001//ControlSet002/ 做了同样的事情

为什么我不能设置objHTTP.Option(9) = 512
额外问题:为什么 WinHttp 坚持使用 TLS 1.0 而不管我的服务器设置如何?

【问题讨论】:

标签: ssl asp-classic windows-server-2008 winhttp


【解决方案1】:

此选项表示 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 使用此值以防您的代码中未指定它。

这种方法无需更改任何代码行即可工作。

一般:

  • 在下一节注册协议 TLS 1.1 甚至 1.2 更好(或两者都更好)

    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols

  • 告诉 winhttp.dll 默认使用这些协议之一,在下一节中使用值为“DefaultSecureProtocols”

    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet 设置\WinHttp]

    [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Internet Settings\WinHttp]

在我的回答中查看更多详细信息: Classic ASP Outbound TLS 1.2

【讨论】:

    【解决方案2】:

    如果在visual studio对象浏览器中打开winhttp.dll,则Windows Server 2008中的版本不包含WinHttpRequestSecureProtocols枚举下的TLS1.1和TLS1.2常量。

    如果您对 Windows Server 2012 执行相同操作,您会发现 TLS1.1 和 TLS1.2 的常量确实出现了。

    我没有看到可用于 Win 2008 升级 winhttp 的更新。如果存在我想知道。我没有尝试将Win 2012版本复制到Win 2008。我不知道这是否会导致问题。

    【讨论】:

    • 如果我们尝试将winhttp.dll从windows 2012转移到windows 2008并在2008上注册,会有什么问题吗?
    猜你喜欢
    • 2016-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多