Как обрабатывать QSslSocket: не удается устранить ошибку TLSv1_1_client_method

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

QSslSocket: не удается разрешить TLSv1_1_client_method

QSslSocket: не удается разрешить TLSv1_2_client_method

QSslSocket: не удается разрешить TLSv1_1_server_method

QSslSocket: не удается разрешить TLSv1_2_server_method

Я много гуглил, но не смог найти ответа, я также пытался установить open-ssl v1.0.1 и v .98, но все равно ничего не получил.

МОЯ версия Qt: Qt Creator 3.0.1 На основе Qt 5.2.1

Вот мой код:

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QUrl>
#include <QNetworkRequest>
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QString>
#include <QPixmap>namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
Q_OBJECT

public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();

private slots:
void on_pushButton_clicked();
void imageloaded(QNetworkReply *);
private:
Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);

}

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

void MainWindow::on_pushButton_clicked()
{

QString gmurl;
gmurl = "http://maps.googleapis.com/maps/api/staticmap?center=35.704465,51.409597&zoom=16&size=600x600&sensor=false&markers=color:red%7Clabel:S%7C35.704465,51.409597" ;
QUrl url(gmurl);
QNetworkRequest request(url);
QNetworkAccessManager manager;
manager.get(request);
connect(&manager,SIGNAL(finished(QNetworkReply*)),this,SLOT(imageloaded(QNetworkReply*)));}

void MainWindow::imageloaded(QNetworkReply *reply){QByteArray data = reply->readAll();
reply->deleteLater();
QPixmap pixmap;
pixmap.loadFromData(data);
ui->label->setPixmap(pixmap.scaled((600,600),Qt::KeepAspectRatio));
}

Большое спасибо.

7

Решение

Эти предупреждения выводятся Qt (в частности, Qt Network), когда он загружает библиотеки OpenSSL во время выполнения, но не находит в них вышеупомянутые функции (возможно, потому что найденные библиотеки OpenSSL слишком старые). По сути, они означают, что Qt был скомпилирован с версией OpenSSL, которая поддерживала TLS v1.1, v1.2, но библиотеки OpenSSL, найденные в вашей системе, поддерживают только до TLS v1.0.

Предупреждения сами по себе не являются фатальными (TLS 1.0 по-прежнему считается безопасным, и большинство серверов примут его), но они являются подсказкой, что ваше приложение связывает устаревшие библиотеки OpenSSL или полагается на поиск libeay32.dll, ssleay32.dll где-нибудь в системе (в ПУТИ).

Если вы хотите избежать этих предупреждений, либо отправьте совсем недавний libeay32.dll, ssleay32.dll вместе с вашим приложением, либо позвольте Qt ссылаться в openssl статически (см. Включение и отключение поддержки SSL в документации Qt о том, как это сделать).

6

Другие решения


По вопросам рекламы [email protected]