我尝试将 openssl 与 qt5.12 链接,但从 qt 和命令行运行可执行文件时结果不同。我使用 QSslSocket::supportsSsl()、QSslSocket::sslLibraryVersionString() 和 QSslSocket::sslLibraryBuildVersionString() 来观察结果。当从 qt 运行 exe 时,我分别得到以下输出
true
OpenSSL 1.1.1d 10 Sep 2019
OpenSSL 1.1.1k 25 Mar 2021
和命令行 false
""
OpenSSL 1.1.1k 25 Mar 2021
。该exe是用msvc 2017 64位编译的。可能是什么问题以及 qt 从哪里获取该库?
使用listdlls工具我设法找到openssl DLL的名称和位置。它们是
libssl-1_1-x64.dll
和 libcrypto-1_1-x64.dll
,位于 %QT_INSTALL_PATH%/Tools/QtCreator/bin
。将这些 DLL 复制到项目的构建文件夹中解决了问题。
QtCreator 使用的构建环境显然是默认环境,可以在
Projects -> Run
中找到。它设置了许多环境变量,在我的例子中,它更新了 PATH
变量,添加了 QtCreator bin 文件夹的路径。
Qt 默认情况下不提供 SSL 库,您需要手动安装它们,以确保您拥有兼容的 SSL 库 从
Qt Maintenance Tool安装
OpenSSL XXX Toolkit
,然后在 <Qt directory>/Tools/OpenSSL
中您将找到带有二进制文件的 OpenSSL 软件包。
为了将Windows Qt应用程序完整交付给最终用户,请仔细学习https://doc.qt.io/qt-5/windows-deployment.html
我想获得此高级功能,并认为 GUI 元素只是 GUI 中“使用版本 2”按钮旁边的“使用安全连接”按钮。并且在此之前仍需要添加版本 2 支持[并且该按钮仅在选择 NTRIP 版本 2 时才应处于活动状态,因为版本 1 中没有安全连接的概念]
我认为无论使用 Qt 还是仅使用 C/C++,您最终都会使用 openSSl 库(又名 libssl.so.* 或 libssl-1_1*.dll for windows),因为几乎每个人似乎都使用以下方式实现 SSL/TLS用于繁重的工作。 这包括其 NTRIP 客户中的所有主要 GNSS 制造商(Trimble、TopCon、Septentrio 等)。
我没有在 C/C++ 项目中使用它的实际经验(我们使用 Qt 开发 SNIP 和其他 NTRIP 工作)。 在 Qt 的最后几个“免费”版本(Qt 5)中,它使用了有点过时的 openSSL 版本,而“您必须向我们付款,否则”版本(Qt 6.x)使用最新版本。
大多数安全证书都有四打或更多的密码套件可供选择,因此我认为这不会很快成为问题。 [此外,如果您想测试安全套接字 NTRIP 连接,请在端口 2102(不是 2101)上使用 rtk2go.com,您将获得一个有效但自签名的证书作为连接的一部分。 我们大约每月轮换一次 CERT,以便人们可以在该主机上进行测试。
在为 RTKLIB 的 Qt 版本构建此功能方面,如果有兴趣,我可以提供一些支持对话框。 [如果返回的安全证书不完全有效或不是来自已知的可信来源,则需要弹出“您确定吗”对话框,然后需要显示有关它的详细信息以供用户查看] 不确定对于仍占大多数用户的非 Qt 构建来说,这样做如何工作。
--