Qt & SSL, сообщение подтверждения не выполнено - программирование
Подтвердить что ты не робот

Qt & SSL, сообщение подтверждения не выполнено

У меня проблема. Я сделал приложение Qt, которое подключается к сайту https. На моей рабочей машине все работает нормально. Когда я пытаюсь проверить свое приложение на чистой машине Windows 7, я заметил следующую проблему:

После того, как я установил новую машину Win7 (установил все обновления), после запуска моего приложения я получил сообщение об ошибке SSL Handshake, SIGNAL (sslErrors (QNetworkReply *, QList)) испускается двумя пустыми строками ошибок и error = QSslError:: NoError. Я действительно искал весь день, почему это происходит, также может воспроизвести его с примерами \network\securesocketclient\release\securesocketclient и доменом "google.com".

Теперь я узнал, что как только я запустил интернет-проводник, обратившись к https://www.google.com, мое приложение также работает как ожидалось, и нет дальнейшие ошибки квитирования приближаются.

Кстати, неважно, на каком сайте вы обращаетесь - это не связано с google.com.

Может кто-нибудь объяснить мне, почему это происходит? Это ошибка в OpenSSL, или Qt, или в обоих?

UPDATE

Я нашел способ жить с этой проблемой для себя, реализуя следующую логику игнорирования:

QSslError ignoreNOErrors(QSslError::NoError);

foreach(QSslError error, errors)
    if(error.error() != QSslError::NoError)
        qDebug() << error.errorString();

QList<QSslError> expectedSslErrors;
expectedSslErrors.append(ignoreNOErrors);
reply->ignoreSslErrors(expectedSslErrors);

Спасибо

4b9b3361

Ответ 1

Вы можете игнорировать проверку сертификата с помощью QSslConfiguration:: setPeerVerifyMode():

QSslConfiguration conf = request.sslConfiguration();
conf.setPeerVerifyMode(QSslSocket::VerifyNone);
request.setSslConfiguration(conf);

Ответ 2

Я столкнулся с той же проблемой на Mac с Qt 5.5 и 5.6. Когда я обновился до 5.7, он будет решен. Надеюсь, что это поможет, если вы все еще сталкиваетесь с этой проблемой.

Ответ 3

Посмотрите на этот Qt bug

[Это дополнение для SO: D]