【问题标题】:Problem with Winhttp SSL under Windows 10Windows 10 下 Winhttp SSL 的问题
【发布时间】:2019-08-15 14:46:04
【问题描述】:

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

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

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

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

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】:

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

    问题中包含的代码 sn-p 在 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));
    

    我希望这可以帮助任何遇到类似问题的人。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-04
      • 1970-01-01
      • 2019-07-24
      • 2015-10-20
      • 2021-01-23
      • 2019-02-16
      • 2017-09-19
      • 1970-01-01
      相关资源
      最近更新 更多