Qt应用程序-使用TLS1.0

Qt应用程序-使用TLS1.0,qt,tls1.2,tls1.0,Qt,Tls1.2,Tls1.0,更新 Windows 7和Windows 10的某些PC中仍然存在此问题。Wireshark声明请求是通过Tlsv1.0完成的 我读到有一种添加注册表项的解决方法,但尽管我尝试过,但都不起作用(禁用Tls1.0并启用Tls1.1和1.2),但我不希望我的客户机执行这样的过程。我想告诉我的应用程序只使用1.2 EOU 我使用Qt编写了一个应用程序,它在中执行对我的网站的标准get请求 现在,Windows上部署的应用程序在TLS版本为1.2的计算机上工作,但是如果计算机启用了TLS 1.0,则请求

更新

Windows 7和Windows 10的某些PC中仍然存在此问题。Wireshark声明请求是通过Tlsv1.0完成的

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

EOU

我使用Qt编写了一个应用程序,它在中执行对我的网站的标准get请求

现在,Windows上部署的应用程序在TLS版本为1.2的计算机上工作,但是如果计算机启用了TLS 1.0,则请求将被阻止。最后,我编写了一个最小的应用程序(hello world,你有服务器吗?),并检查了两台计算机中的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的预构建包支持OpenSSL(在Windows和Linux上,macOS默认使用SecureTransport框架)但是他们没有提供,因为一些国家对具有加密功能的软件有具体的限制

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

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


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

显然,您的应用程序不使用较新的SSL库,而是先找到较旧的库并加载它们。如果您使用应用程序安装程序进行部署,则可以在安装应用程序时将较新的库部署到应用程序目录。@talamaki有道理。。。但我使用最新的Qt在完全更新的windows10中编译。我猜这些库是默认的。我尝试了使用windeplotqt和手动(即导入所有内容)。你知道在哪里可以找到这些库吗?调用
socket->setProtocol(QSsl::TlsV1_2)
,看看
socket->protocol()
是否等于
QSsl::TlsV1_2
。如果不是,则所选的OpenSSL库不支持它。解决方案:在构建Qt时,自己编译OpenSSL并在
configure
过程中添加库和路径。例如:
OPENSSL\u LIBS\u DEBUG=“libeay32MTd.lib ssleay32MTd.lib”OPENSSL\u LIBS\u RELEASE=“libeay32MT.lib ssleay32MT.lib”
。最后使用
socket->sslLibraryBuildVersionString()
检查。如果你的图书馆被使用。我不会发布答案,因为上次我们讨论您的问题时您删除了它。您好,您可以发布答案。我删除了ordee中的最后一个线程,用新的证据重新打开它,并试图更精确。我试试你的解决办法谢谢你详细的回答。虽然我觉得这一切都很奇怪,但由于TLS是一个标准协议,所有这一切都应该更容易。