QT QSslError сигнализируется с кодом ошибки, установленным в NoError - PullRequest
2 голосов
/ 08 августа 2010

Моя проблема
Я скомпилировал OpenSSL в QT, чтобы включить поддержку OpenSSL. В компиляции все оказалось правильно.

Однако, когда я пытаюсь использовать официальный пример HTTP-приложения, которое можно найти , можно найти здесь , каждый раз, когда я пытаюсь загрузить страницу https, он сигнализирует о двух QSslError, каждое с содержимым NoError.

Типы QSslErrors, включая NoError, документированы здесь , плохо. Нет объяснения, почему они даже включили тип ошибки с именем NoError или что это означает.

Как ни странно, код ошибки NoError кажется верным, поскольку он отлично загружает удаленный https-документ даже при сообщении об ошибке.

Кто-нибудь знает, что это значит и что может быть причиной этого?

Дополнительное фоновое чтение
Вот соответствующая часть кода из примера приложения (это связано с сигналом sslErrors сетевого подключения конструктором):

void HttpWindow::sslErrors(QNetworkReply*,const QList<QSslError> &errors)
{
 QString errorString;
 foreach (const QSslError &error, errors) {
     if (!errorString.isEmpty())
         errorString += ", ";
     errorString += error.errorString();
 }

 if (QMessageBox::warning(this, tr("HTTP"),
                          tr("One or more SSL errors has occurred: %1").arg(errorString),
                          QMessageBox::Ignore | QMessageBox::Abort) == QMessageBox::Ignore) {
     reply->ignoreSslErrors();
 }
}

Я попробовал старую версию этого примера, и она дала тот же результат.

Я пробовал OpenSSL 1.0.0a и 0.9.8o. Я пытался самостоятельно компилировать OpenSSL, я пытался использовать предварительно скомпилированные версии OpenSSL из сети. Все дают одинаковый результат.

Если бы я впервые использовал QT с SSL, я бы почти подумал, что это ожидаемый результат (даже если в их примере приложения отображаются окна с сообщениями об ошибках), если бы не тот факт, что в прошлый раз я играл с QT Используя то, что сейчас было бы старой версией QT со старой версией SSL, я отчетливо помню, как все работало нормально, без окон ошибок.

Моя система работает под управлением Windows 7 x64.

Ответы [ 2 ]

1 голос
/ 24 февраля 2012

Я получаю 4 ошибки, 3 раза. 4 (ожидаемые) ошибки: 1. Имя хоста не соответствует ни одному из действительных хостов для этого сертификата. 2. Сертификат эмитента локально проверенного сертификата не найден 3. Сертификат корневого ЦС не является доверенным для этой цели. 4. Нет сертификаты могут быть проверены

Я подозреваю, что ваш "NoError" относится к последнему (# 4) ...

Причина, по которой я получил 3 повторения, заключается в том, что запущены 3 потока - каждый запускает один и тот же сигнал sslErrors.

Я подозреваю, что ваши 2 повторения произошли из-за двух потоков, запущенных в виджете WebView.

1 голос
/ 09 августа 2010

Единственный путь, где QSslError может быть создан с кодом NoError, это во время преобразования из кодов ошибок OpenSSL в значения QSslError :: SslError , когда код ошибки X509_V_OK.В документации OpenSSL есть интересное примечание об этом коде ошибки :

Если сертификат равноправного узла не был представлен, возвращаемый код результата - X509_V_OK.Это связано с тем, что ошибки проверки не произошло, однако это не означает успех.

Можете ли вы проверить с помощью Wireshark или что-то подобное, если сертификат передается?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...