В Qt как удалить все сертификаты центров сертификации из QNetworkRequest?

Мы пытаемся получить полный контроль над тем, какие сертификаты CA QNetworkRequest будет разрешено использовать. Первый "простой" тест, который мы хотели запустить, состоял в том, чтобы удалить все сертификаты 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 слот не выполнен.

Как можно отключить все сертификаты для такого запроса?

1 ответ

Независимо от того, какие сертификаты CA вы устанавливаете, это должно быть сделано до рукопожатия SSL.

http://doc.qt.io/qt-5/qsslconfiguration.html

Так что, возможно, вам нужно позвонить void QNetworkAccessManager::connectToHostEncrypted и установить QSslConfiguration объект, перед вызовом

QNetworkReply *reply = manager.get(request);

http://doc.qt.io/qt-5/qnetworkaccessmanager.html

Попробуйте что-то вроде ниже:

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);
Другие вопросы по тегам