windows - cpprestsdk SSL post 不适用于 Windows7 但适用于 Windows 10

标签 windows rest ssl visual-c++ casablanca

我有一个 C++ Windows 应用程序,是在 Windows 10 系统上使用 Visual Studio 2017 开发的。此应用程序使用 cpprestsdk 将请求发布到 REST 服务器。我的应用程序在 Windows 10 机器上运行良好,通过 ssl 将请求正确发布到 rest 服务器。我没有创建任何本地证书来使我的应用程序在 Windows 10 上运行。

但是,当移植到 Windows 7(64 位)上时,相同的应用程序无法使用 SSL 协议(protocol)向其余服务器发送 POST 请求。

相同的请求在没有 SSL 的情况下有效,(http://HOST/API 有效) 但是(https://host/api 失败) 通过给出以下错误。

winhttpsendrequest 12029 无法建立与服务器的连接。

在同一个 windows 7 中,PostMan 可以成功发布 https 请求。 不知道实现可能有什么问题。

任何人都可以分享在 Windows 7 上 POST 请求失败的原因是什么吗?

最佳答案

我的回答有点晚了,但我希望它能帮助其他面临同样问题的人......

我认为您的服务器坚持使用高于 1.0 的 tls 版本,这是 Windows 7 的默认版本。不幸的是,cpprestsdk 无法配置为使用特定的 tls 版本。在 Windows 上,cpprestsdk 使用 WinHTTP,它公开了两个句柄,但只有其中一个可用于配置 tls(我现在不记得句柄名称)。不幸的是,cpprestsdk 有权访问的 native 句柄不能用于配置 tls。

唯一的解决方法是将 Windows 7(和间接的 WinHTTP)配置为默认使用特定的 tls 版本。可以在此处找到有关如何操作的说明:https://support.microsoft.com/en-ca/help/3140245/update-to-enable-tls-1-1-and-tls-1-2-as-default-secure-protocols-in-wi .

关于windows - cpprestsdk SSL post 不适用于 Windows7 但适用于 Windows 10,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52139922/

相关文章:

c# - 从另一个 Windows 服务启动和停止一个 Windows 服务

java - 为 Restful 资源设计 DELETE 的最佳方法是什么

asp.net-mvc - 启用 SSL 时,IIS Express 默认为 HTTPS 端口 44300

ubuntu - SSL:当我通过浏览器检查时,我得到了我购买的 godaddy 证书,但是当我使用 openssl 检查时,我得到了一个自签名证书?

windows - 使用 GPO 创建 SymLink

windows - 在用户提示 "close manually"之前卸载时 WiX 调用应用程序

c# - Linux 聊天服务器与 C#

java - 列出 jetty 上可用的其余 Web 服务

java - 没有注释的 Jersey 方法参数

ssl - 如何生成证书签名请求 (CSR) 以在 GKE 中设置 TLS