2

更新

在某些装有 Windows 7 和 10 的 PC 中,问题仍然存在。Wireshark 声明请求正在使用 Tlsv1.0 完成。

我读到有一种添加注册表项的解决方法,但尽管我尝试过但它们都不起作用(禁用 Tls1.0 并启用 Tls1.1 和 1.2),但我不希望我的客户执行这样的过程。我想告诉我的应用程序只使用 1.2。

EOU

我使用 Qt 编写了一个应用程序,它在https://www.myprefix.mydomain.com中对我的网站执行标准获取请求。

现在,Windows 上部署的应用程序可以在具有 TLS 1.2 版的计算机上运行,​​但如果计算机启用了 TLS 1.0,则请求会被阻止。总结这一点,我写了一个最小的应用程序(你好世界,你有服务器吗?)并检查了两台计算机中的 Wireshark 条目,这似乎是唯一的区别。根据 Wireshark 的说法,如果 TLS1.0 可用,那么我的应用程序使用 TLS1.0(无论是否存在 1.2)并被阻止。

我知道 1.0 不再被认为是安全的,所以我想告诉我的 Qt 应用程序只使用 TLS1.+。

我宁愿不使用 http(稍后我会得到敏感信息)也不告诉我的客户禁用 TLS1.0。这可以硬编码到 Qt 应用程序中吗?

我试过这个:

QSslConfiguration config = QSslConfiguration::defaultConfiguration();
config.setProtocol(QSsl::TlsV1_2);
QSslConfiguration::setDefaultConfiguration(config);

但是该应用程序在可用时仍然使用 TLS1.0,并且服务器会阻止请求(这是正确的)。

4

1 回答 1

2

Qt 的预构建包支持 OpenSSL(在 Windows 和 Linux 上,macOS 默认使用 SecureTransport 框架)但它们不提供它,因为某些国家/地区对具有加密功能的软件有特定限制。

因此,如果您的应用程序正在运行并且没有在您的 Windows 机器上专门安装 OpenSSL,则意味着您的系统中存在它的副本。你应该找到它,如果可能的话,从你的 PATH 环境变量中删除包含的文件夹。

接下来,您应该获取最新版本的 OpenSSL。然后,您可以复制应用程序文件夹中的 dll 以确保它们被选中修改 Qt Creator(项目面板的运行部分)中的 PATH 环境变量,以便您的应用程序可以找到它。

请注意,您当前必须使用 OpenSSL 1.0.X。如果您想要 1.1 支持,您可以从 Qt 5.10 开始获得它,但您必须自己重新构建 Qt。

于 2018-04-10T21:39:51.007 回答