c++ 为什么在Windows Server 2019及更早版本上设置了WINHTTP_FLAG_SECURE_DEFAULTS的情况下,应用程序调用WinHttpOpen时会失败?

dgsult0t  于 2023-01-22  发布在  Windows
关注(0)|答案(1)|浏览(135)

给定一个简单的测试应用程序,该应用程序只按如下方式调用WinHttpOpen(),不执行任何其他操作:

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(数据中心版或标准版)和较旧版本的计算机(也在Windows Server 2016标准版上进行了测试)上,上述调用失败,错误代码为87(ERROR_INVALID_PARAMETER)。
删除WINHTTP_FLAG_SECURE_DEFAULTS标志会使问题消失(即使随后调用。由于此标志强制执行TLS 1.2或更新版本,因此似乎需要一些操作系统级别的配置。请注意,这不会影响SChannel对TLS 1.2的使用)。
Windows Server 2019及更早版本的安装中是否存在某些通常缺失的注册表配置、功能或修补程序?

vwoqyblh

vwoqyblh1#

WINHTTP_FLAG_SECURE_DEFAULTS在旧系统上根本不存在,所以如果你尝试在旧系统上使用它,它们将不知道这个标志的含义,因此会失败。
Game Development Kit (GDK) | Overviews and how-to | Networking | Web requests | WinHTTP overview
WINHTTP_FLAG_SECURE_DEFAULTS标志是一个新标志,专门用于帮助Microsoft游戏开发工具包(GDK)游戏,通过设置建议的安全连接行为来遵守安全最佳实践。**它在Xbox One主机上可用,并将在未来的Windows操作系统更新中在Windows PC上可用。尝试在现有Windows操作系统版本上传递WINHTTP_FLAG_SECURE_DEFAULTS会导致无效参数失败。**此标志具有显著的副作用-它强制WinHTTP进入异步模式,因为此标志隐式包含WINHTTP_FLAG_ASYNC标志。在不支持此标志的Windows PC操作系统版本上,应改为传递WINHTTP_FLAG_ASYNC,以最大限度地减少WinHTTP实现的其余部分之间的差异。

相关问题