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")

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

Сообщений в этой теме


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


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




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