2016-03-14 80 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的人!