Сообщение об ошибке Qt «qt.network.ssl: QSslSocket :: connectToHostEncrypted: сбой инициализации TLS» - PullRequest
0 голосов
/ 30 октября 2019

При попытке запустить приложение Qt появляется следующая ошибка:

qt.network.ssl: QSslSocket :: connectToHostEncrypted: сбой инициализации TLSqt.network.ssl: QSslSocket :: connectToHostEncrypted: инициализация TLS не удаласьОшибка: «инициализация TLS не удалась»

Мое приложение действительно простое, вот как оно выглядит:

#include "widget.h"
#include "ui_widget.h"
#include <QNetworkReply>

#include <QDebug>


Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    netManager  = new QNetworkAccessManager(this);
    netReply = nullptr;
    mDataBuffer = new QByteArray();

    //Define network request
    QNetworkRequest request;
    request.setUrl(QUrl("https://www.qt.io"));

    netReply = netManager->get(request);
    connect(netReply,&QIODevice::readyRead,this,&Widget::dataReadyToRead);
    connect(netReply,&QNetworkReply::finished,this,&Widget::dataReadFinished);

}

Widget::~Widget()
{
    delete ui;
}

void Widget::dataReadyToRead()
{
    qDebug() << "Datas available to read";
    mDataBuffer->append(netReply->readAll());
}

void Widget::dataReadFinished()
{
    if(netReply->error())
    {
        qDebug() << "Error: " << netReply->errorString();
    }
    else
    {
        ui->textEdit->setPlainText(QString(*mDataBuffer));
    }
}

Поэтому я искал переполнение стека и нашел несколько ответов (онокажется, что ошибка возникает из-за того, что библиотеки openSSl не найдены), но все равно не работает. Итак, вот что я сделал до сих пор:

  • Я скачал OpenSSL для 64-битного окна (Win64 OpenSSL v1.1.1d) на этом сайте: https://slproweb.com/products/Win32OpenSSL.html
  • Я установил OpenSSL (- Попробуйте установить переменные окружения, но мне не удалось сделать это правильно)
  • Попробуйте запустить мое приложение при запуске openSSL

Я что-то пропустил?

Редактировать:

Спасибо за ответ:

Вот что получается из qDebugs:

  • QSslSocket ::sslLibraryBuildVersionString () вернул: «OpenSSL 1.0.2p 14 августа 2018»

  • QSslSocket :: supportSsl () вернул: false

  • QSslSocket ::sslLibraryVersionString () возвратил: пустую строку

Итак, я взял и установил OpenSSL в версии 1.0.2, (удалите другую), добавьте в переменную PATH установкупапка (которая просто C: \ OpenSSL-Win64, также пробовал C: \ OpenSSL-Win64 \ bin оба этих файла содержит dll)

К сожалению, я до сих пор хЕсть такая же проблема.

Содержимое папки установки:

  • bin
  • exp
  • include
  • lib
  • changes.txt
  • faq.txt
  • libeay32.dll
  • libssl.dll
  • license.txt
  • news.txt
  • readme.txt
  • ssleay32.dll
  • unins000.dat
  • unins000.exe

Сейчас я попробовалсделать кое-что после того, как я прочел документацию Qt: https://doc.qt.io/qt-5/windows-requirements.html

  • Я копирую / вставляю каталог OpenSSL-Win64 в C: \ Windows \ System32 (в соответствии с документацией сначала ищутся библиотеки openSSLв этом каталоге) -> не работает
  • Я создал переменную среды PATH и присвоил ей значение установочной папки openSSL (сейчас я использую переменную среды Path, созданную по умолчанию), он переопределил значение по умолчанию, но мне удалось его восстановить) -> не сработало

Ответы [ 2 ]

0 голосов
/ 02 ноября 2019

Вот решение (которое сработало для меня):

  • Проверьте, какая версия OpenSSL использовалась для сборки Qt с qDebug (см. Ответ Fareanor).
  • Скачатьзакройте версию OpenSSl для Windows 64 бит, так как это моя ОС.
  • Запустите загруженный установщик и установите флажок «Копировать библиотеки OpenSSL в: системный каталог Windows» .
0 голосов
/ 30 октября 2019

На основании информации, предоставленной по вопросу, похоже, что вы установили слишком последнюю версию OpenSSL. На самом деле у меня уже была такая же проблема .

Как вы узнали, Qt не встраивает OpenSSL. Что вам нужно сделать, это установить его самостоятельно. Но вы должны убедиться, что у вас та же (или самая близкая) версия OpenSSL, что и для сборки Qt .

  • Вы можете проверить, какая версия OpenSSL использоваласьдля сборки Qt с:
qDebug() << QSslSocket::sslLibraryBuildVersionString();
  • Вы можете проверить, поддерживается ли SSL с:
qDebug() << QSslSocket::supportsSsl();
  • Вы можете проверить, какая версияу вас есть:
qDebug() << QSslSocket::sslLibraryVersionString();

Примечание: Не забудьте включить каталог установки в переменную окружения PATH, чтобы сделать dlls доступными (или скопируйте dlls ).


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

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