[英]QsslSocket: Cannot access peer (client) certificate on other peer (server)
這是我最初的問題的后續解決方案: Qt Server + Client App:加密失敗(使用代碼更新)還將其發布到Qt論壇: http : //qt-project.org/forums/viewthread/41293/
嗨,
我的目標是為Server + Client應用程序建立雙向身份驗證。 我有一個奇怪的問題。 使用Qt 5.2.0在我的Server + Client應用程序中將XCA和OpenSSL生成的證書用於測試目的。
注意:我不使用QSslSocket::ignoreSslErrors()
來克服錯誤。
2種情況:
1)客戶端具有有效的clientCA,有效的本地證書(由serverCA簽名,客戶端模板)和有效的私鑰集。 服務器具有有效的serverCA,有效的本地證書(由clientCA簽名,服務器模板)和有效的私鑰集。
2)客戶具有有效的clientCA。 服務器具有有效的本地證書(由clientCA,服務器模板簽名)和有效的私鑰集。
--------
廣告1)
我可以建立安全連接,但QSslSocket::peerVerifyMode
是我必須在服務器端將QSslSocket::peerVerifyMode
設置為VerifyNone
(在客戶端上自動執行VerifyPeer
)。
如果我不這樣做,即使套接字已正確地評估為服務器端(為此選中了SslMode
),我也將自動分配為VerifyPeer
模式。 這顯然與文檔相反,因為它說如果套接字是服務器端,則應該自動使用QueryPeer
。 但是,即使手動將套接字設置為QueryPeer
也無濟於事,並且握手失敗與VerifyPeer
相同。
現在我得到的錯誤是:
QSslError::CertificateSignatureFailed (4) “The signature of the certificate is invalid”
在服務器上檢查SSL錯誤(和/或加密)的對等證書后,發現對等方未提供任何證書( peerCertificate()
產生空證書),因此也難怪該錯誤會失敗。 在這種情況下,我也無法在客戶端獲得對等證書。
但是即使在服務器上設置了VerifyNone
並且加密成功,我仍然會遇到上述錯誤,原因是對等端(客戶端)不提供其證書,盡管事實上不應首先請求它。 在這種情況下,我可以在客戶端上獲得對等(服務器)證書。
--------
廣告2)
這是文檔樣式的方案,應該只能以一種方式進行身份驗證(客戶端對服務器進行身份驗證)。 在這種情況下,默認情況下再次將peerVerifyMode
選擇為服務器上的VerifyPeer
。
但是peerVerifyMode
對服務器端的握手沒有任何影響! 即使將其設置為VerifyPeer
它VerifyPeer
成功執行,盡管客戶端沒有提供任何證書。
不管peerVerifyMode
的設置如何, peerVerifyMode
發生與#1相同的錯誤,外加兩個新錯誤,因此我進入服務器:
QSslError::CertificateSignatureFailed (4) “The signature of the certificate is invalid”
QSslError::UnableToGetLocalIssuerCertificate (11) “The issuer certificate of a locally looked up certificate could not be found”
QSslError::UnableToVerifyFirstCertificate (12) “No certificates could be verified”
盡管如此,無論服務器端是否peerVerifyMode
,SSL握手peerVerifyMode
成功。 我在客戶端上沒有任何錯誤。 這再次與文檔明確指出,如果出現任何SSL錯誤,除非忽略它們,否則連接將被丟棄。
---------------
我不了解此行為,也不了解如何解決此問題,因為我相當確定證書是可以的(使用openssl.exe
的測試握手成功,並且驗證返回碼為0(Ok))。 在我看來, peerVerifyMode
的設置通常會被忽略,並且在某些情況下也會自動忽略錯誤。 由於它們與服務器端未發送(或未接收到)的對等(客戶端)證書有關,因此我可以理解,但是如果peerVerifyMode
設置為VerifyPeer
。
有人可以幫忙嗎? 謝謝!
我已經能夠以不同尋常的方式解決此問題。 這是由Qt中的錯誤引起的,我認為這是一個https://bugreports.qt-project.org/browse/QTBUG-7200,因為它與我最新嘗試的症狀相符(openssl成功驗證證書時Qt中出現了相同錯誤)等等。)。
從5.2.0更新到5.3.0-beta解決了它(錯誤在5.2.2中顯然得到解決)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.