Windows 下的 Winhttp SSL 问题 10
Problem with Winhttp SSL under Windows 10
我目前正尝试在 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));
谢谢
我已经找到那里发生的事情了。事实证明,安全协议标志在 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));
我希望这对遇到类似问题的任何人有所帮助。
我目前正尝试在 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));
谢谢
我已经找到那里发生的事情了。事实证明,安全协议标志在 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));
我希望这对遇到类似问题的任何人有所帮助。