簡體   English   中英

在Qt中,如何從QNetworkRequest中刪除所有證書頒發機構證書?

[英]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.

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