0
我們正試圖完全控制允許QNetworkRequest
允許使用哪些CA證書。我們想要運行的第一個「簡單」測試是刪除所有CA證書,並確保它在任何https嘗試中觸發並出錯。在Qt中,如何從QNetworkRequest中刪除所有證書頒發機構證書?
這裏是展示我們如何設置情況下,最小的例子:
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證書,以完成認證。但是請求實際上已成功完成,回覆中包含網頁內容,並且不會執行插槽。
如何實際上禁用所有證書的這種請求?
謝謝你的回答。我在文檔中看到了pre-handshake要求,我的理解是,當您不明確調用QNetworkAccessManager連接方法之一時,握手會在您發出請求時發生(例如,在例)。無論如何,我嘗試按照您的建議將調用添加到'connectToHostEncrypted',並且行爲保持不變。 –