Как установить SslConfiguration в QT5.9? - PullRequest
0 голосов
/ 15 февраля 2019

QT5.9.7 vs2017 msvc2017_64

мои настройки:

QSslConfiguration config;
config.setPeerVerifyMode(QSslSocket::VerifyNone);
config.setProtocol(QSsl::TlsV1SslV3);
httpRequest.setSslConfiguration(config);

httpRequest.setUrl(QUrl(strUrl));

QEventLoop eventLoop;
QObject::connect(&networkAccessManager, SIGNAL(finished(QNetworkReply*)), &eventLoop, SLOT(quit()));
QNetworkReply *reply = networkAccessManager.post(httpRequest, data);
eventLoop.exec();
QByteArray tmpQBA = reply->readAll();
QString tmpQStr = QVariant(tmpQBA).toString();

получено плохой ответ: enter image description here

при использовании http-прокси burpsuite получите правильный ответ: enter image description here

правильный ответ enter image description here

Итак, как получить правильный ответ без Burpsuite прокси?

Спасибо!

1 Ответ

0 голосов
/ 17 февраля 2019

Вам нужно подключиться к ошибкам и sslErrors , чтобы увидеть, что идет не так.

Вы выбрали Use a self-signed certificate в графическом интерфейсе Burb Suite.При использовании самозаверяющего сертификата вы обычно получаете SSL Common Name Mismatch Error, который можно игнорировать при тестировании.

В Qt вы можете игнорировать ошибки SSL в QNetworkReply , связанные с самозаверяющим сертификатом, следующим образом(из документа):

QList<QSslCertificate> cert = QSslCertificate::fromPath(QLatin1String("server-certificate.pem"));
QSslError error(QSslError::SelfSignedCertificate, cert.at(0));
QList<QSslError> expectedSslErrors;
expectedSslErrors.append(error);

QNetworkReply *reply = manager.get(QNetworkRequest(QUrl("https://server.tld/index.html")));
reply->ignoreSslErrors(expectedSslErrors);
// here connect signals etc.

Когда вы переключаетесь на окончательные сертификаты в производстве, вы должны не забыть удалить код "игнорировать", чтобы не оставить дыру в безопасности вашего программного обеспечения.

...