Как я могу распространять OpenSSL с моим приложением на основе Qt WebKit для Windows? - PullRequest
10 голосов
/ 03 февраля 2012

У меня есть приложение на основе Qt QWebKit, которому нужно использовать HTTPS для общения с веб-страницами. Я скачал QtSDK, а также двоичные файлы OpenSSL ( отсюда ).

Моя проблема заключается в развертывании моего приложения. Я скопировал соответствующие файлы DLL Qt, а также соответствующие файлы DLL OpenSSL (libeay32.dll и ssleay32.dll) в каталог своего приложения, но когда я пытаюсь получить доступ к веб-страницам HTTPS из моего приложения, это не удается! Приложение не падает, но страница пуста. Обычные страницы HTTP работают отлично.

Понятно, что в том, как я распространяю OpenSSL с моим приложением, есть ошибка, я просто не уверен, где я ошибаюсь.

Я бы не хотел связывать установщик OpenSSL с моим приложением.

Ответы [ 2 ]

5 голосов
/ 09 февраля 2012

Здравствуйте, кто-нибудь читает это, пытаясь отладить подобные проблемы.Проблема заключалась в том, что двоичные файлы DLL OpenSSL, распространяемые Shining Light Productions , требуют, чтобы распространяемые файлы Visual C ++ функционировали должным образом.

Для распространения DLL-файлов OpenSSL с приложением без необходимости также распространять распространяемые файлы Visual C ++Вы можете самостоятельно скомпилировать OpenSSL, используя MinGW .Инструкции по компиляции OpenSSL с MinGW включены в исходный дистрибутив OpenSSL.

В этом случае вам может потребоваться распространять MinGW DLL вместе с приложением.Для меня это не было проблемой, так как я скомпилировал приложение Qt с MinGW.

2 голосов
/ 03 февраля 2012

Может попробовать проигнорировать сертификат ssl?

Заголовочный файл:

void sslErrors(QNetworkReply*,const QList<QSslError> &errors);

Конструктор:

 connect(&qnam, SIGNAL(sslErrors(QNetworkReply*,QList<QSslError>)),
         this, SLOT(sslErrors(QNetworkReply*,QList<QSslError>)));

Определение метода:

void HttpWindow::sslErrors(QNetworkReply *reply, const QList<QSslError> &errors)
{
 QString errorString;
 foreach (const QSslError &error, errors) {
     if (!errorString.isEmpty())
         errorString += ", ";
     errorString += error.errorString();
 }

 if (QMessageBox::warning(this, tr("HTTP"),
                          tr("One or more SSL errors has occurred: %1").arg(errorString),
                          QMessageBox::Ignore | QMessageBox::Abort) == QMessageBox::Ignore) {
     reply->ignoreSslErrors();
 }
}

Для получения дополнительной информации, пожалуйста, смотрите ваш пример QT HTTP.

...