Windows 10下的Winhttp SSL问题

时间:2019-03-25 11:09:22

标签: c++ windows ssl winhttp

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

我进行了几次测试,以了解正在发生的事情,到目前为止,这是我已经知道的:

  • 该软件可以在Windows 10 Pro中正常运行(无论选择了哪个TLS版本)。在Windows 10 ltsb 2016(1607)中部署该软件时,这还不能说。

  • 按照建议的here启用TLS支持无效。

可以在here中找到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));

谢谢

1 个答案:

答案 0 :(得分:0)

我已经发现那里发生了什么。事实证明,安全协议标志在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));

我希望这对正在解决类似问题的所有人有所帮助。