更新
Windows 7和10的一些PC仍然存在问题。Wireshark说,这些请求是用Tlsv1.0完成的。
我读到了添加注册表项的解决方案,但尽管我尝试过,但没有一个可以工作(禁用Tls1.0并启用Tls1.1和1.2),但我不希望我的客户端执行这样的过程。我想告诉我的应用程序只使用1.2。
EOU
我用Qt编写了一个应用程序,它用https://www.myprefix.mydomain.com对我的网站执行标准的get请求。
现在,Windows上部署的应用程序在TLS版本1.2的计算机上工作,但是如果计算机启用了TLS 1.0,请求就会被阻止。最后,我编写了一个最小的应用程序(hello,您有服务器吗?)并检查了两台计算机中的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,服务器会阻塞请求(这是正确的)。
发布于 2018-04-10 21:39:51
预先构建的Qt包支持OpenSSL (在Windows和Linux上,macOS默认使用SecureTransport框架),但它们没有提供它,因为在一些国家,对于具有加密功能的软件有特定的限制。
因此,如果您的应用程序正在工作,并且没有在您的Windows计算机上专门安装OpenSSL,这意味着它的副本在您的系统中。您应该找到它,如果可能的话,从PATH环境变量中删除包含的文件夹。
接下来,您应该获取OpenSSL的最新版本。然后,您可以在应用程序文件夹中复制dll以确保它们被选中,修改Qt中的PATH环境变量( Project面板的Run部分),以便应用程序能够找到它。
请注意,您目前必须使用OpenSSL 1.0.X,如果您想要1.1支持,可以从QT5.10开始,但是您必须自己重新构建Qt。
https://stackoverflow.com/questions/49611168
复制相似问题