使用 QT qrc 部署 TLS 证书
Deploying TLS cert with QT qrc
我正在尝试在应用程序部署中包含SSL证书,以便我们可以安全地连接到我们的服务器。我能够将文件添加到我们的资产文件夹和 resources.qrc 文件中,它适用于调试部署。但是,当我尝试制作发布版本时,它会中断并且找不到文件。
我已经翻阅了 QT 文档和 SO,但我尝试过的所有方法都没有奏效。
以下是 .pro 文件的摘录:
`qmlFolder.source = qml
DEPLOYMENTFOLDERS += qmlFolder # comment for publishing
assetsFolder.source = assets
DEPLOYMENTFOLDERS += assetsFolder
# Add more folders to ship with the application here
QT += xml svg quick qml widgets
# resources.qrc
RESOURCES += resources.qrc # uncomment for publishing`
这是我的资源.qrc文件:
<RCC>
<qresource prefix="/">
<file>qml</file>
<file>GandiStandardSSLCA2.crt</file>
<file>SSLcomDVCA_2.crt</file>
</qresource> </RCC>
这是我设置路径的地方:certPath = "://SSLcomDVCA_2.crt"; // Dev Cert
我从右键单击文件中获得了路径。同样,它在调试版本中工作,但不适用于发布,所以我相信它没有正确打包。任何提示或想法如何继续解决此问题?
我找到了"问题"和问题的答案。尽管我认为问题可能是QT错误,或者我对字符串定义的理解是错误的。当我为 dev 和 prod 放置两个证书时,我设置了名为 certs.qrc
的资源文件。我创建了文件定义,并使用了通过右键单击资源文件并复制其路径获得的路径。有关SSL的完整定义,请参见下文,希望这也将作为QT SSL的示例,因为我也几乎找不到其中任何一个。
这是我没有"RCC"标头的证书文件,因为它似乎会破坏块引号:
<qresource prefix="/certs"> <file>GandiStandardSSLCA2.crt</file> <file>SSLcomDVCA_2.crt</file> </qresource>
下面是该证书文件的定义:
// SSL socket set up QFile certFile(":/certs/GandiStandardSSLCA2.crt"); if(certFile.open(QIODevice::ReadOnly)) { qDebug() << "File opened"; } else { qDebug() << "Boooo"; } QSslCertificate cert(&certFile, QSsl::Pem); forgotPwSocket = new QSslSocket(this); forgotPwSocket->addCaCertificate(cert);
所有这些目前都是有效的。 确保运行 qmake 以便编译资源文件。
所以现在,我解释为什么我有问题。我之前对部署整个资产文件夹的证书使用了不同的部署方法。这适用于Android而不是iOS,所以我决定改用qrc。当我尝试实现/assets
文件夹部署时,我使用 ifdef 来定义路径的字符串,具体取决于它是 iOS 还是 Android。我删除了ifdef,我所有的问题都消失了,它现在可以在路径上找到文件。该字符串是我的网络对象的成员,我将在运行时使用 ifdef 定义它。在我所有的调试过程中,这是检查器中显示的正确路径。意识到使用 .qrc 资源消除了基于 Android/iOS 定义路径的需要,我如上所述对路径值进行了硬编码。一旦我这样做了,它就开始工作了。路径名与调试器中的路径名相同,并且 ifdef 就位,所以我不确定为什么/在哪里中断。如果有人有任何进一步的见解,那就太好了。希望这将帮助任何遇到类似问题或让 SSL 在 QT 中正常工作的人!
- "unknown ca"自生成的 CA、证书和客户端/服务器
- 如何在C++中使用X509证书模在令牌中查找私钥
- OpenSSL TLS服务器-使用客户端证书白名单
- Websocket++ 错误:收到错误handle_transport_init TLS 握手失败
- 使用 OpenSSL 从内存中读取原始 SSL/TLS 证书
- GRPC C++ TLS 客户端 grpc::SslCredentials() 方法不返回
- CertGetCertificateChain 具有支持的内存存储和证书信任列表
- c++ libCurl :如何使用libCurl接受过期的证书
- OpenSSL C API:如何在程序exec()之后恢复TLS连接?
- 以 x64 配置访问证书公钥
- 来自带有mbedtls TLS的Mongoose Web服务器的错误消息
- 从网站复制证书,并使用脚本将其添加到受信任的根证书颁发机构
- curl_easy_perform() 失败:SSL 对等证书或 SSH 远程密钥不正常
- 我需要帮助来缩短检索 SSL 证书的执行时间
- 如何使用QWebEngineView忽略SSL证书错误
- 如何以编程方式从PKCS7中提取CA、多个CA和公共证书/密钥
- 成功完成TLS握手后,服务器关闭时出现错误的SSL例程:SSL3_GET_RECORD:错误的版本号
- Qt 错误消息"qt.network.ssl: QSslSocket::connectToHostEncrypted: TLS initialization failed"
- 使用 QT qrc 部署 TLS 证书
- tcp_connect中的gSoap SSL/TLS证书主机名不匹配