Qt初學者和開發跨平臺應用程序,需要從服務器和客戶端進行SSL身份驗證。基於.pem的加密適用於Linux,Android,Windows。但是,Mac OSX存在問題。我們的代碼看起來像下面:如何在Mac OSX上使用Qt中的pkcs12/pfx執行成功的SSL加密?
QFile privateKeyFile(":/Certificate.pem"); // --> has certificate + key
privateKeyFile.open(QIODevice::ReadOnly | QIODevice::Text);
setLocalCertificateChain(QSslCertificate::fromPath(":/Certificate.pem", QSsl::Pem));
setPrivateKey(QSslKey(privateKeyFile.readAll(), QSsl::Rsa));
在上面的代碼中privateKey().isNull()
回報true
爲Mac。當我們提到this post時,它表示Mac不支持基於.pem的加密。
捲曲的安全傳輸後端僅支持採用PKCS#12(P12)格式的客戶端ID;它不支持PEM格式的客戶端ID,因爲Apple不允許我們使用PEM格式的身份文件創建安全身份,而不使用私有API。而且我們不能使用私有API,因爲使用私有API的應用不允許在Apple的任何應用商店中使用。
由於我的理解有限,我解釋說.pem不適合與服務器進行SSL通信。如果它錯了,請阻止我!
因此,我們決定移動到所有平臺的.pfx。我們已經有一個帶有密碼的.pfx文件。我們將上面的代碼轉換爲與.pfx兼容(即「Certificate.pfx」,我們將此舊文件與「Certificate.pem」一起)。我們嘗試了QSsl::Der
而不是QSsl::Pem
。但如預期的那樣,它沒有奏效。但是,也沒有加密錯誤,但我們確信我們做錯了什麼。 :-)
我們提到這篇文章,並嘗試從.pem重新生成.pfx,但這也沒有幫助。
QSslCertificate::importPkcs12 fails to parse PFX file
在上述情況下,QSslCertificate::importPkcs12()
對原始.pfx文件返回false。即使我們從命令行生成新的.pfx,上述功能也失敗了。
問題:有人可以幫助確切的方式與服務器執行.pfx加密嗎?
.pem認證也很好。
注意:
- 服務器支持.PFX &。質子交換膜。我們用常規的C OpenSSL庫進行了確認。但我們想用Qt來實現它。
- 我們是開放的比.PFX其他格式,它們應該在所有的平臺上工作
非常混亂。你在做SSL客戶端身份驗證嗎?如果你是這種情況,這很少見。如果你不是,那麼你沒有私鑰,所以你不需要Pkcs#12。 –
@JamesKPolk,我對SSL的知識有限。簡而言之,我們有一個使用C函數來驗證服務器的舊代碼。它使用一個.pfx證書,該證書被轉換爲.pem,然後與服務器交換。現在我們必須將該代碼移植到Qt。使用.pem,它的工作原理已經在上面的代碼中演示過了。但是,它僅在Mac中無法使用。在網上搜索時,我們得到了一個github帖子,這表明Mac不支持.pem,這在Qn中也有提到。所以我們想回到.pfx。現在我們不知道該怎麼做。對不起,不夠清楚。 – iammilind
您是否試過將證書和客戶端密鑰文件分開,將它們轉換爲DER格式並逐一加載它們? – nothingam