2014-04-10 85 views
0

這是後續我原來的問題:Qt Server+Client App: encryption fails (updated with code) 還張貼這對Qt的論壇:http://qt-project.org/forums/viewthread/41293/QsslSocket:不能對其他同行訪問端點(客戶端)證書(服務器)

嗨,

我目標是爲Server + Client應用程序建立雙向身份驗證。然而,我有一個奇怪的問題。使用Qt 5.2.0在我的Server + Client應用程序中使用XCA和OpenSSL生成的證書進行測試。

注意:我不使用QSslSocket::ignoreSslErrors()來越過錯誤。

2情景:

1) 客戶端具有有效的clientCA,有效的本地證書(由serverCA,客戶端模板)和有效的私有密鑰集簽名。 服務器有有效的serverCA,有效的本地證書(由clientCA,服務器模板簽名)和有效的私鑰集。

2) 客戶端有有效的客戶端CA. 服務器有有效的本地證書(由clientCA,服務器模板簽名)和有效的私鑰集合。

--------

廣告1)

我可以建立安全連接正常,但只有當我設置QSslSocket::peerVerifyModeVerifyNone在服務器端(自動VerifyPeer在客戶端上)。

如果我不這樣做,即使套接字被正確評估爲服務器端(爲此檢查SslMode),我也會自動分配VerifyPeer模式。這顯然與文檔相反,因爲它說它應該是自動QueryPeer如果套接字是服務器端。但是,即使將套接字手動設置爲QueryPeer也無濟於事,握手失敗的原因與VerifyPeer相同。

現在我得到的錯誤是:

QSslError::CertificateSignatureFailed (4) 「The signature of the certificate is invalid」 

檢查對端證書的SSL錯誤(和/或加密)在服務器上顯示,沒有證書被對方提出的(在peerCertificate()產生無效證書)所以難怪它會因這個錯誤而失敗。在這種情況下,我無法在客戶端獲得對等證書。

但即使VerifyNone設置在服務器和加密成功我仍然得到上述錯誤,由於對等(客戶端)不呈現其證書,儘管事實上它不應該首先要求。在這種情況下,我可以在客戶端上獲得對等(服務器)證書。

--------

廣告2)

這是文檔風格的場景,應該能夠只有一個辦法驗證(客戶端認證服務器)。在這種情況下,默認情況下peerVerifyMode在服務器上再次被選爲VerifyPeer

但是peerVerifyMode對服務器端的握手沒有任何影響!即使設置爲VerifyPeer,它仍會成功,儘管客戶端未提供任何證書。

不管的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」 

儘管這些SSL握手不管peerVerifyMode成功在服務器端。我在客戶端上沒有任何錯誤。這再次違背了文檔,明確指出,如果發生任何SSL錯誤,連接將被丟棄,除非被忽略。

---------------

我不明白,這種行爲也不知道怎樣去修復它,因爲我是相當肯定的證書都ok(使用openssl.exe測試握手驗證返回碼0(好))成功。在我看來,peerVerifyMode的設置經常被忽略,在某些情況下,錯誤也會自動忽略。由於它們與服務器端的未發送(或未收到)對等(客戶端)證書有關,所以我可以理解,但如果peerVerifyMode設置爲VerifyPeer,則不能。

任何人都可以幫忙嗎?謝謝!

回答

0

我已經能夠以不尋常的方式解決這個問題。這是由Qt中的錯誤引起的,我認爲這是一個https://bugreports.qt-project.org/browse/QTBUG-7200,因爲它與我最近的嘗試(Qt中的同樣錯誤,而openssl成功驗證證書等)的症狀相匹配。

從5.2.0更新到5.3.0-beta解決了它(bug在5.2.2中明顯解決)。

相關問題