10

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

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

很明显,我如何通过我的应用程序分发 OpenSSL 存在错误,我只是不确定我哪里出错了。

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

4

2 回答 2

6

你好,任何阅读这篇文章试图调试类似问题的人。问题在于Shining Light Productions分发的 OpenSSL DLL 二进制文件需要 Visual C++ 可再发行组件才能正常运行。

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

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

于 2012-02-08T23:18:24.847 回答
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 示例。

于 2012-02-03T02:17:09.997 回答