Windows 10下的Winhttp SSL问题

问题描述 投票:0回答:1

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

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

  • 该软件在Windows 10 Pro中按预期工作(无论选择哪个TLS版本)。当软件部署在Windows 10 ltsb 2016(1607)中时,不能说这一点。
  • 如建议的那样启用TLS支持here不起作用。

winhttp代码可以找到here。我只在第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));

谢谢

c++ windows ssl winhttp
1个回答
0
投票

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

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

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));

我希望这有助于任何正在努力解决类似问题的人。

© www.soinside.com 2019 - 2024. All rights reserved.