簡體   English   中英

QsslSocket:無法訪問其他對等方(服務器)上的對等方(客戶端)證書

[英]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對服務器端的握手沒有任何影響! 即使將其設置為VerifyPeerVerifyPeer成功執行,盡管客戶端沒有提供任何證書。

不管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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM