Qt 应用程序 - 使用 TLS1.0

Qt application - uses TLS1.0

更新

问题在一些 Windows 7 和 10 的 PC 上仍然存在。Wireshark 声明请求正在使用 Tlsv1.0 完成。

我读到有一种添加注册表项的解决方法,但尽管我尝试了它并且 none 可以正常工作(禁用 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,并且服务器会阻止请求(这是正确的)。

Qt 的 pre-built 包支持 OpenSSL(在 Windows 和 Linux 上,macOS 默认使用 SecureTransport 框架)但是他们没有提供,因为有特定的限制在某些国家/地区关于具有加密功能的软件。

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

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

请注意,您目前必须使用 OpenSSL 1.0.X。如果你想要 1.1 支持,你可以从 Qt 5.10 开始获得它,但你必须自己 re-build Qt。