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

发布于 2025-01-02 04:54:51 字数 447 浏览 0 评论 0原文

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

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

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

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

I have a Qt QWebKit based application that needs to use HTTPS to talk to web pages. I have downloaded the QtSDK, as well as the OpenSSL binaries (from here).

My problem lies in deploying my application. I have copied the relevant Qt DLL files, as well as the relevant OpenSSL DLL files (libeay32.dll and ssleay32.dll) into my application directory, but when I try to access HTTPS web pages from within my application it fails! The application doesn't crash, but the page is blank. Regular HTTP pages work perfectly fine.

It's clear that there's an error with how I'm distributing OpenSSL with my application, I'm just not sure where I'm going wrong.

I'd really not like to bundle the OpenSSL installer with my application.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

潦草背影 2025-01-09 04:54:51

大家好,阅读本文并尝试调试类似问题的人。问题在于 Shining Light Productions 分发的 OpenSSL DLL 二进制文件需要 Visual C++ 可再发行组件才能正常运行。

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

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

Hello anybody reading this trying to debug similar issues. The problem was that the OpenSSL DLL binaries distributed by Shining Light Productions require the Visual C++ redistributables to function properly.

To distribute OpenSSL DLLs with your application without having to also distribute the Visual C++ Redistributables, you can compile OpenSSL yourself using MinGW. The instructions for compiling OpenSSL with MinGW are included in the OpenSSL source distribution.

You may need to distribute the MinGW DLL with your application if you do this. This wasn't a problem for me since I compiled by Qt application with MinGW in the first place.

腹黑女流氓 2025-01-09 04:54:51

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

Can try to ignore the ssl certificate ?

Header file :

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

Constructor :

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

Method definition :

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();
 }
}

For more information , kindly see your QT HTTP example.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文