如何将基于Qt WebKit的应用程序的OpenSSL分发到Windows?

时间:2012-02-03 00:22:24

标签: windows qt openssl qwebkit

我有一个基于Qt QWebKit的应用程序,需要使用HTTPS与网页通信。我已经下载了QtSDK以及OpenSSL二进制文件(from here)。

我的问题在于部署我的应用程序。我已将相关的Qt DLL文件以及相关的OpenSSL DLL文件(libeay32.dllssleay32.dll)复制到我的应用程序目录中,但是当我尝试从我的应用程序中访问HTTPS网页时,它失败了!应用程序不会崩溃,但页面是空白的。常规HTTP页面工作得很好。

很明显,我在使用我的应用程序分发OpenSSL时出现错误,我只是不确定我哪里出错了。

我真的不想将OpenSSL安装程序与我的应用程序捆绑在一起。

2 个答案:

答案 0 :(得分:5)

大家好,读过这个试图调试类似问题的人。问题是由Shining Light Productions分发的OpenSSL DLL二进制文件要求Visual C ++可再发行组件正常运行。

要使用您的应用程序分发OpenSSL DLL而不必分发Visual C ++ Redistributables,您可以使用MinGW自行编译OpenSSL。有关使用MinGW编译OpenSSL的说明包含在OpenSSL源代码分发中。

如果这样做,您可能需要将MinGW DLL与您的应用程序一起分发。这对我来说不是问题,因为我首先用Qt应用程序编译了MinGW。

答案 1 :(得分:2)

可以尝试忽略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示例。