You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

网站迁移至TLS1.3后VBA读取URL报安全通道支持错误

问题描述

Windows 10系统下,VBA代码调用MSXML2.ServerXMLHTTP访问迁移到CloudFlare并启用TLS1.3的站点时,执行.send方法触发运行时错误 '-2147012739 (80072f7d)': An error occurred in the secure channel support。已尝试常规TLS适配方案但无效,相关代码如下:

Function ReadURLIntoString(url)
    Dim url As String
    Dim xmlhttp As Object
    Dim responseText As String

    ' 创建MSXML2.ServerXMLHTTP实例
    Set xmlhttp = CreateObject("MSXML2.ServerXMLHTTP")
   
    ' 初始化GET请求
    xmlhttp.Open "GET", url, False

    ' 发送请求
    xmlhttp.send

    ' 处理响应
    If xmlhttp.Status = 200 Then
        responseText = xmlhttp.responseText
        ' 移除换行符并返回结果
        ReadURLIntoString = Trim(Replace(Replace(responseText, Chr(10), ""), Chr(13), ""))
    Else
        MsgBox "Error: " & xmlhttp.Status & " - " & xmlhttp.StatusText
    End If
End Function

已尝试的无效操作:

  • 指定MSXML2.ServerXMLHTTP.6.0实例并设置setOption(2)相关参数
  • 在Internet属性中启用“TLS 1.3(实验版)”并重启系统
  • 修改注册表Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.3\Client\Enabled为1并重启
解决思路

1. 替换为更适配TLS1.3的HTTP组件

MSXML2.ServerXMLHTTP依赖的WinHTTP库在Windows10早期版本对TLS1.3支持有限,改用WinHttp.WinHttpRequest.5.1组件,它的TLS兼容性更强:

Set xmlhttp = CreateObject("WinHttp.WinHttpRequest.5.1")
' 强制指定优先使用TLS1.3(需Windows10 20H1及以上版本)
xmlhttp.Option(9) = &H800 ' WinHttpRequestOption_SecureProtocols = 9, SecureProtocol_TLS1_3 = &H800

2. 绕过CloudFlare的非浏览器请求拦截

CloudFlare会对无浏览器特征的请求触发人机验证,可通过添加请求头模拟浏览器:

xmlhttp.setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"
xmlhttp.setRequestHeader "Accept-Language", "zh-CN,zh;q=0.9"

若仍触发验证,需使用支持JS执行的工具(如Selenium VBA绑定)处理挑战,但会增加代码复杂度。

3. 完善Windows10的TLS1.3注册表配置

仅设置Enabled=1可能不够,需补充配置确保SCHANNEL完全启用TLS1.3客户端支持:

  • 将Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.3\Client\DisabledByDefault设为0
  • 安装Windows10 22H2最新累积更新,旧版本的SCHANNEL对TLS1.3存在兼容性Bug

4. 排查证书信任问题

CloudFlare的证书链可能未被系统信任,可临时禁用证书验证测试(生产环境不推荐):

xmlhttp.setOption 3, xmlhttp.getOption(3) Or &H1000 ' 忽略证书错误

若测试有效,需手动导入CloudFlare根证书到系统信任存储。

内容的提问来源于stack exchange,提问作者gordon613

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 22:50:20