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

为何Windows Server 2019及更早版本中带WINHTTP_FLAG_SECURE_DEFAULTS的WinHttpOpen调用失败?

Windows Server 2019及更早版本使用WINHTTP_FLAG_SECURE_DEFAULTS报错的原因及修复项

问题核心

调用代码:

WinHttpOpen(userAgent, WINHTTP_ACCESS_TYPE_AUTOMATIC_PROXY, WINHTTP_NO_PROXY_NAME, WINHTTP_NO_PROXY_BYPASS, WINHTTP_FLAG_ASYNC | WINHTTP_FLAG_SECURE_DEFAULTS);

在Windows Server 2019、2016等旧版本返回错误码87(ERROR_INVALID_PARAMETER),但Windows 10企业版、Server 2022可正常运行。移除WINHTTP_FLAG_SECURE_DEFAULTS标志后问题消失,说明旧版本系统对该安全标志的支持存在缺失,且该问题与SChannel本身的TLS 1.2支持无关。

常见缺失的配置、功能或补丁

1. 未安装必要的累积更新补丁

WINHTTP_FLAG_SECURE_DEFAULTS是较新引入的标志,旧版本WinHTTP组件未支持该参数:

  • Windows Server 2019:需安装2020年5月及之后的累积更新(如KB4556799),这类补丁更新了WinHTTP组件,使其能正确识别该安全标志。
  • Windows Server 2016:需安装2021年1月及之后的累积更新(如KB4598293),此版本之后的WinHTTP才完成对该标志的适配。

2. WinHTTP协议配置缺失

即使SChannel支持TLS 1.2,WinHTTP可能未默认启用对应协议,需手动配置注册表:

  • 定位到注册表路径:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\WinHttp
    • 添加DWORD类型值DefaultSecureProtocols,设置为0x00000A00(仅启用TLS 1.2)或0x00000C00(启用TLS 1.2+TLS 1.3)
  • 若为64位系统,需同步配置HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Internet Settings\WinHttp下的相同键值

3. 系统默认协议未配置TLS 1.2

若未将TLS 1.2设为系统默认客户端协议,WinHTTP的安全标志可能无法正常生效:

  • 定位到注册表路径:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client
    • 设置Enabled为0x00000001
    • 设置DisabledByDefault为0x00000000

验证步骤

  1. 安装对应累积更新后重启系统,重新测试WinHttpOpen调用
  2. 配置注册表后重启系统(或WinHTTP相关服务),验证参数有效性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 20:01:55