crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в Подключение к SSL-серверу
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
Litkevich Yuriy Дата 4.2.2009, 19:30
 
Цитата(Vortex_001 @ 4.2.2009, 22:19) *
А что за класс такой QtSslSocket?
Он был в Qt Solution, как написано в статье, а вот с сайта тролей:
Цитата
SSL Socket

Provided in Qt 4.3 and later in the QSSLSocket class.
ViGOur Дата 4.2.2009, 19:23
  Там написано, что он относится к Qt Solutions смотри SSL Socket .

Но думаю по примеру можно сделать и со стандартным QSslSocket подобное.
Vortex_001 Дата 4.2.2009, 19:19
  А что за класс такой QtSslSocket? его вроде нет в стандартной комплектации... Подскажите, где взять такой? :)
ViGOur Дата 4.2.2009, 18:41
  Угу, думаю так.

Вот есть старая статья по поводу работы с SSL в Qt: Secure Networking with QtSSLSocket может поможет чем.
Vortex_001 Дата 4.2.2009, 18:27
  Мда... сдается мне, никто не сталкивался :(
Vortex_001 Дата 4.2.2009, 15:43
  Всем доброго времени суток.
Второй день решаю проблему - не могу подключиться к серверу Apache, на котором используется OpenSSL. Использую для этого QSslSocket. Проблема в том, что сертификат есть на локали (сервер высылаетего при регистрации), без использования этого сертификата получить нужную мне инфу с сервера я не могу (выдается код html с ощибкой сертификата). Вопрос в том, как мне сделать так, чтобы мой локальный сертификат использовался? Вот код сласса с сокетом:

#include "MainClass.h"

MainClass::MainClass(QObject *parent): QObject(parent)
{
  this->Socket = new QSslSocket();
  connect(Socket, SIGNAL(readyRead()), this, SLOT(Read()));
  connect(Socket, SIGNAL(connected()), this, SLOT(Connected()));
  connect(Socket, SIGNAL(encrypted()), this, SLOT(Encrypted()));
  connect(Socket, SIGNAL(peerVerifyError(QSslError)), this, SLOT(PeerError(QSslError)));
  connect(Socket, SIGNAL(stateChanged(QAbstractSocket::SocketState)), this, SLOT(StateChanged(QAbstractSocket::SocketState)));
  connect(Socket, SIGNAL(sslErrors(QList<QSslError>)), this, SLOT(SslErrors(QList<QSslError>)));

  qDebug() << QSslSocket::supportsSsl();

  QFile *CertFile = new QFile("cert.cer");
  CertFile->open(QIODevice::ReadOnly);

  QSslCertificate Cert(CertFile);

  this->Socket->addCaCertificate(Cert);
  this->Socket->setCaCertificates(this->Socket->caCertificates());

  this->Socket->connectToHostEncrypted("my_ssl_server.ru", 443);
}

MainClass::~MainClass()
{

}

void MainClass::Connected()
{
  qDebug() << "Connected!!!";
}

void MainClass::Read()
{
  qDebug() << "Butes received = " << this->Socket->bytesAvailable();
  qDebug() << this->Socket->readAll();
}

void MainClass::Encrypted()
{
  qDebug() << "Encrypted!!!";
  QString Query = "GET / HTTP/1.0\r\n\r\n";
  QByteArray Arr = Query.toUtf8();
  this->Socket->write(Arr);
  qDebug() << this->Socket->peerCertificate();
}

void MainClass::StateChanged(QAbstractSocket::SocketState State)
{
  qDebug() << State;
  qDebug() << this->Socket->readAll();
}

void MainClass::SslErrors(QList<QSslError> List)
{
  qDebug() << "SSL Errors = " << List;
  this->Socket->ignoreSslErrors();
}

void MainClass::PeerError(QSslError Err)
{
  qDebug() << "Peer Error = " << Err;
}


Как видите - сертификат содержится в файле "cert.cer" (там же и ключ лежит), вопрос лишь в том, как мне сделать так, чтобы он использовался? При подключении к серверу, прога получает сертификат с сервера, потом выдаются следующие ошибки SSL:

Peer Error = "The root certificate of the certificate chain is self-signed, and
untrusted"
Peer Error = "The host name did not match any of the valid hosts for this certi
ficate"
SSL Errors = ("The host name did not match any of the valid hosts for this cert
ificate", "The root certificate of the certificate chain is self-signed, and unt
rusted")

Хелп плиз, для меня это очень важная задача! :)
Заранее спасибо!
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 29.3.2024, 8:02