crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> Подключение к SSL-серверу, Когда есть локальный сертификат
Vortex_001
  опции профиля:
сообщение 4.2.2009, 15:43
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 3
Регистрация: 4.2.2009
Пользователь №: 528

Спасибо сказали: 0 раз(а)




Репутация:   0  


Всем доброго времени суток.
Второй день решаю проблему - не могу подключиться к серверу 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")

Хелп плиз, для меня это очень важная задача! :)
Заранее спасибо!
Причина редактирования: Слово ТРАБЛА, как-то не звучит, исправил на более приятное
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Vortex_001
  опции профиля:
сообщение 4.2.2009, 18:27
Сообщение #2


Новичок


Группа: Новичок
Сообщений: 3
Регистрация: 4.2.2009
Пользователь №: 528

Спасибо сказали: 0 раз(а)




Репутация:   0  


Мда... сдается мне, никто не сталкивался :(
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 4.2.2009, 18:41
Сообщение #3


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Угу, думаю так.

Вот есть старая статья по поводу работы с SSL в Qt: Secure Networking with QtSSLSocket может поможет чем.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Vortex_001
  опции профиля:
сообщение 4.2.2009, 19:19
Сообщение #4


Новичок


Группа: Новичок
Сообщений: 3
Регистрация: 4.2.2009
Пользователь №: 528

Спасибо сказали: 0 раз(а)




Репутация:   0  


А что за класс такой QtSslSocket? его вроде нет в стандартной комплектации... Подскажите, где взять такой? :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 4.2.2009, 19:23
Сообщение #5


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Там написано, что он относится к Qt Solutions смотри SSL Socket .

Но думаю по примеру можно сделать и со стандартным QSslSocket подобное.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 4.2.2009, 19:30
Сообщение #6


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(Vortex_001 @ 4.2.2009, 22:19) *
А что за класс такой QtSslSocket?
Он был в Qt Solution, как написано в статье, а вот с сайта тролей:
Цитата
SSL Socket

Provided in Qt 4.3 and later in the QSSLSocket class.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 27.12.2024, 3:01