2016-03-14 206 views
3

我试图在应用程序部署中包含SSL证书,以便我们可以安全地连接到我们的服务器。我可以将这些文件添加到我们的资源文件夹和我们的resources.qrc文件中,它可以在调试部署中使用。但是,当我尝试进行发布构建时,它会中断并且无法找到这些文件。使用QT部署TLS证书qrc

我已经翻阅了QT文档,所以我试过的一切都没有奏效。

下面是来自.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` 

这里是我的resources.qrc文件:

<RCC> 
    <qresource prefix="/"> 
     <file>qml</file> 
     <file>GandiStandardSSLCA2.crt</file> 
     <file>SSLcomDVCA_2.crt</file> 
    </qresource> </RCC> 

这里是我设置路径:certPath = "://SSLcomDVCA_2.crt"; // Dev Cert

我从右击文件获得路径。它再次在调试版本中工作,但不是用于发布,所以我相信它没有被正确打包。任何提示或想法如何解决这个问题?

+0

您是否尝试重新运行qmake并为发布构建完整重建项目? –

+0

是的,我完全删除了构建文件夹,重新启动QT和我的电脑,并尝试用qmake重建几次,仍然有同样的问题。 – Churak

+0

您可以查看生成文件夹中生成的文件qrc_ .cpp并查看是否有类似于SSLcomDVCA_2.crt的注释中的任何文本?您可以比较调试和发布文件夹中的文件。 –

回答

0

我找到了“问题”和我的问题的答案。虽然我认为这个问题会是一个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的位置相同,所以我不确定这是为什么/在哪里破坏。如果有人有任何进一步的见解,听到这将是太棒了。希望这可以帮助任何有类似问题的人或通常在QT中使用SSL的人!