Windows 10 下的 Winhttp SSL 问题



我目前正在尝试在 C++ 中的 Windows 下实现一个 soap 客户端。由于一些技术要求,http 和通信层已使用 Winhttp API 实现。一切似乎都正常,但是一旦启用了TLS 1.1或1.2,该软件就无法执行SSL握手。它只是不断向服务器发送TCP连接数据包。

我做了几个测试,以了解发生了什么,到目前为止,这是我已经知道的:

  • 该软件在 Windows 10 专业版中按预期工作(无论选择哪个 TLS 版本(。当软件部署在Windows 10 ltsb 2016(1607(中时,不能这样说。

  • 按照此处的建议启用 TLS 支持不起作用。

winhttp代码可以在这里找到。我只在第 351-352 行添加了此修改:

 DWORD dwOpt =  WINHTTP_FLAG_SECURE_PROTOCOL_ALL | WINHTTP_FLAG_SECURE_PROTOCOL_TLS1_1 |WINHTTP_FLAG_SECURE_PROTOCOL_TLS1_2;
 int res = WinHttpSetOption(pData->hInternet, WINHTTP_OPTION_SECURE_PROTOCOLS, &dwOpt, sizeof(dwOpt));

谢谢

我已经找到了那里发生的事情。事实证明,安全协议标志在Windows 10 Pro和Windows 10 2016 ltsb中的行为方式不同。

问题中包含的代码片段在Windows 10 Pro下按预期工作,但在Windows 10 2016 ltsb中,它必须是:

DWORD dwOpt = WINHTTP_FLAG_SECURE_PROTOCOL_TLS1_1 |WINHTTP_FLAG_SECURE_PROTOCOL_TLS1_2;
int res = WinHttpSetOption(pData->hInternet, WINHTTP_OPTION_SECURE_PROTOCOLS, &dwOpt, sizeof(dwOpt));

我希望这可以帮助任何正在与类似问题作斗争的人。

最新更新