[英]In Qt, how to remove all Certificate Authorities certificates from a QNetworkRequest?
我們正在嘗試完全控制QNetworkRequest
將被允許使用哪些CA證書。 我們要運行的第一個“簡單”測試是刪除所有CA證書,並確保它在任何https嘗試中均觸發並出錯。
這是顯示我們如何設置實例的最小示例:
QNetworkAccessManager manager;
QUrl requestedUrl("https://www.google.com");
QNetworkRequest request(requestedUrl);
QSslConfiguration sslConfig = request.sslConfiguration();
// Set the QList of certificates to an empty list
sslConfig.setCaCertificates({});
request.setSslConfiguration(sslConfig);
QNetworkReply *reply = manager.get(request);
connect(reply, SIGNAL(sslErrors(QList<QSslError>)),
this, SLOT(slotSslErrors(QList<QSslError>)));
我們希望在運行時失敗,因為請求是故意沒有任何CA證書來完成身份驗證的。 但是請求實際上已成功完成,答復包含網頁內容,並且未執行slotSslErrors
插槽。
一個人實際上如何禁用這種請求的所有證書?
無論您設置什么CA證書,都應在SSL握手之前完成。
http://doc.qt.io/qt-5/qsslconfiguration.html#setCaCertificates
因此,您可能需要先調用void QNetworkAccessManager::connectToHostEncrypted
並設置QSslConfiguration
對象,然后再調用
QNetworkReply *reply = manager.get(request);
http://doc.qt.io/qt-5/qnetworkaccessmanager.html#connectToHostEncrypted
嘗試如下所示:
QSslConfiguration sslConfig = request.sslConfiguration();
// Set the QList of certificates to an empty list
sslConfig.setCaCertificates({});
request.setSslConfiguration(sslConfig);
//ONCE YOU SET THE CONFIG ESTABLISH HAND SHAKE
manager.connectToHostEncrypted("....",..,sslConfig);
QNetworkReply *reply = manager.get(request);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.