Всем доброго времени суток.
Второй день решаю проблему - не могу подключиться к серверу 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;
}
Мда... сдается мне, никто не сталкивался
Угу, думаю так.
Вот есть старая статья по поводу работы с SSL в Qt: http://wiki.crossplatform.ru/index.php/Secure_Networking_with_QtSSLSocket может поможет чем.
А что за класс такой QtSslSocket? его вроде нет в стандартной комплектации... Подскажите, где взять такой?
Там написано, что он относится к http://www.qtsoftware.com/products/appdev/add-on-products/catalog/4 смотри http://www.qtsoftware.com/products/appdev/add-on-products/catalog/4/Utilities/qtsslsocket/.
Но думаю по примеру можно сделать и со стандартным QSslSocket подобное.
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)