Classic ASP脚本TLS 1.2连接问题:运行时出现500错误
搞定Classic ASP里WinHTTP连TLS 1.2的500错误
兄弟,看你贴的代码,一眼就揪出问题了——你明明定义了TLS 1.2的常量是2048,但实际设置协议的时候却写了128(这是TLS 1.0的数值),等于根本没启用你要的TLS 1.2啊!这绝对是导致500错误的核心原因之一。
下面给你一步步解决的实战方案:
1. 先把协议设置改对
直接把协议选项换成TLS 1.2的常量值,要是需要兼容多个新协议,用位或运算组合就行。修改后的代码参考:
<% Const WinHttpRequestOption_SecureProtocols = 9 Const SecureProtocol_SSL2 = 8, SecureProtocol_SSL3 = 32, _ SecureProtocol_TLS1 = 128, SecureProtocol_TLS1_1 = 512, _ SecureProtocol_TLS1_2 = 2048 Set objHttp = Server.CreateObject("WinHTTP.WinHTTPRequest.5.1") ' 仅启用TLS 1.2就用这行 objHttp.Option(WinHttpRequestOption_SecureProtocols) = SecureProtocol_TLS1_2 ' 想同时兼容TLS1.1和1.2的话,用位或运算: ' objHttp.Option(WinHttpRequestOption_SecureProtocols) = SecureProtocol_TLS1_1 Or SecureProtocol_TLS1_2 objHttp.open "GET", "https://howsmyssl.com/a/check", False objHttp.Send() Response.Write objHttp.ResponseText Set objHttp = Nothing %>
2. 确认服务器系统和组件支持TLS 1.2
WinHTTP 5.1本身支持TLS 1.2,但老系统需要补补丁:
- 要是用的是Windows Server 2008 R2或者Windows 7,必须安装KB3140245补丁,不然组件认不出TLS 1.2协议。
- 还要检查注册表配置,确保系统允许WinHTTP使用TLS 1.2:
打开注册表编辑器,找到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\WinHttp,新建一个DWORD值DefaultSecureProtocols,值设为00000a00(对应TLS1.1+TLS1.2的组合,十进制是2560)。
64位服务器还要去HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Internet Settings\WinHttp下做同样的配置。
3. 排查500错误的其他潜在坑
- 开启详细错误信息:在IIS里把「发送详细错误信息到浏览器」打开,这样能看到具体错误代码(比如80072F8F就是协议不支持,一目了然)。
- 检查权限:IIS应用池的运行身份得有访问WinHTTP组件的权限,另外目标网站的SSL证书要被服务器信任,不然也会触发报错。
- 代理问题:如果服务器需要过代理才能上网,记得在代码里加
objHttp.SetProxy配置好代理地址和端口。
内容的提问来源于stack exchange,提问作者Bob Randolph
相关产品推荐
相关产品推荐

