2012-04-10 168 views
4

我正在嘗試向證書自簽名的web服務發送休息請求。目前,我正在創建一個請求,設置url和auth。鍵作爲標題。然後我告訴回覆忽略這個SSL錯誤:當我運行它QSslError:證書是自簽名的,而且不受信任

QSslError error(QSslError::SelfSignedCertificate); 
QList<QSslError> expectedSslErrors; 
expectedSslErrors.append(error); 

QNetworkReply *reply = _accessManager.put(request, ""); // no requestbody 
reply->ignoreSslErrors(expectedSslErrors); 

我得到以下SSL錯誤:

9 - The certificate is self-signed, and untrusted

其次是網絡錯誤NR 6:

Request failed with message: SSL handshake failed

目前我忽略了所有的錯誤,因爲它似乎是唯一可行的。感覺髒。

如果有人知道我在做什麼錯,我會很感激!

編輯:

更改爲:

QList<QSslError> expectedSslErrors; 
expectedSslErrors.append(QSslError::SelfSignedCertificate); 
expectedSslErrors.append(QSslError::CertificateUntrusted); 
reply->ignoreSslErrors(expectedSslErrors); 

但仍然得到同樣的錯誤...

回答

3

The certificate is self-signed, and untrusted

的問題是 「不信任」 的一部分。 您必須提供自簽名證書,作爲QSslError的第二個參數。

編輯:根據源代碼,實際接收到的SSL錯誤與傳遞給ignoreSslErrors的錯誤之間的比較是通過比較錯誤代碼和證書來完成的。
因此,如果OpenSSL返回的錯誤包含證書(如QSslError::SelfSignedCertificate),則必須始終將證書傳遞給QSslError構造函數,否則比較將失敗。

但是,您也可以通過將信號sslError()連接到插槽來檢查錯誤列表是否僅包含自簽名證書錯誤,然後致電ignoreSslErrors()(不含任何參數),從而手動忽略此錯誤。

+0

提供證書是什麼意思?它是一個base64編碼的字符串,它是auth的一部分。頭。不確定如何將其作爲證書提供 – chikuba 2012-04-11 01:35:35

+0

@chikuba您所描述的看起來更像是基本身份驗證,而不是證書。該文檔顯示瞭如何將證書從文件[這裏](http://qt-project.org/doc/qt-4.8/qnetworkreply.html#ignoreSslErrors-2)傳遞給'QSslError',並獲得文件,請在服務器上使用瀏覽器,當您點擊掛鎖時,您應該可以下載/導出證書。 – alexisdm 2012-04-11 01:46:51

+0

沒有證書,掛鎖交叉。該網站不受信任。認爲當您使用自簽名時,您並不需要證書 – chikuba 2012-04-11 01:51:05

相關問題