c++ - Windows 10下Winhttp SSL的问题

标签 c++ windows ssl winhttp

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

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

  • 该软件在 Windows 10 专业版中按预期运行(无论选择哪个 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));

谢谢

最佳答案

我已经找到那里发生的事情了。事实证明,安全协议(protocol)标志在 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));

我希望这对遇到类似问题的任何人有所帮助。

关于c++ - Windows 10下Winhttp SSL的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55336462/

相关文章:

windows - 有没有像 OpenCV(Windows 或 Mac)之类的图像比较服务器软件?

php - MySQLi real_connect 失败

c++ - 在二进制搜索树功能中使用指向指针的指针时出错

c++ - 在 OpenGL 中未规范化的法 vector 有什么行为?

windows - 土坯空气 : Start native window hidden

ssl - 如何验证 RSA 签名的 ECDHE 公钥?

security - 在另一个协议(protocol)中建立 TLS 隧道

c++ - 在 Windows 上的 ubuntu 上的 bash 上安装 g++

c++ - 将标准输出转发到 Qt 应用程序中的文件

Windows 7 操作中心