簡體   English   中英

QSslError:證書是自簽名的,不受信任

[英]QSslError: The certificate is self-signed, and untrusted

我正在嘗試向證書自簽名的網絡服務發送 rest 請求。 目前我正在創建一個請求,設置 url 和授權。 鍵作為標題。 然后我告訴回復忽略這個 ssl 錯誤:

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

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

當我運行它時,出現以下 ssl 錯誤:

9 - 證書是自簽名的,不受信任

其次是.network error nr 6:

請求失敗並顯示消息:SSL 握手失敗

目前我忽略了所有錯誤,因為它似乎是唯一有效的方法。 覺得臟。

如果有人知道我做錯了什么,將不勝感激!

編輯:

變成:

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

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

證書是自簽名的,不受信任

問題是“不受信任”的部分。 您必須提供自簽名證書,作為QSslError的第二個參數。

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

但是您也可以通過將信號sslError()連接到一個插槽來手動忽略錯誤,在該插槽中檢查錯誤列表是否僅包含自簽名證書錯誤,然后調用ignoreSslErrors() (不帶任何參數)。

閱讀文檔,您需要做的是在響應 QNetworkReply::sslErrors 信號的插槽上調用 ignoreSslErrors

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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