【问题标题】:How can I distribute OpenSSL with my Qt WebKit based application to Windows?如何将 OpenSSL 与基于 Qt WebKit 的应用程序一起分发到 Windows?
【发布时间】:2012-02-25 16:21:08
【问题描述】:

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

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

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

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

【问题讨论】:

  • 您确定要检查所有呼叫站点的 OpenSSL 错误返回并可能记录或显示意外错误结果吗?我可以很容易地想象系统上缺少证书存储或无效日期/时间导致证书链验证错误在“正常”测试期间可能不会弹出......
  • 这是一个很好的观点。我在别处读到未处理的 OpenSSL 错误会导致 HTTPS 页面的加载停止。就我而言,我正在处理所有 OpenSSL 错误(通过忽略它们),但我的 QNetworkManager 从未调用错误处理程序。

标签: windows qt openssl qwebkit


【解决方案1】:

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

【讨论】:

  • 这是一个很好的观点。如果他们打算在 QWebView 中使用 HTTPS,每个人都应该处理 SSL 错误。这不是我问题的根源,但无论如何这是个好建议!
【解决方案2】:

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

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

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

【讨论】:

  • 非常感谢,这对我有用:我已经用 mingw 构建了 OpenSSL,问题已得到解决。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多