10

Web ページと通信するために HTTPS を使用する必要がある Qt QWebKit ベースのアプリケーションがあります。QtSDK と OpenSSL バイナリをダウンロードしました (ここから)。

私の問題は、アプリケーションのデプロイにあります。関連する Qt DLL ファイルと関連する OpenSSL DLL ファイル (libeay32.dllおよびssleay32.dll) をアプリケーション ディレクトリにコピーしましたが、アプリケーション内から HTTPS Web ページにアクセスしようとすると失敗します。アプリケーションはクラッシュしませんが、ページは空白です。通常の HTTP ページは問題なく動作します。

アプリケーションで OpenSSL を配布する方法に誤りがあることは明らかです。どこが間違っているのかわかりません。

アプリケーションに OpenSSL インストーラーをバンドルしたくありません。

4

2 に答える 2

6

こんにちは、これを読んで同様の問題をデバッグしようとしています。問題は、 Shining Light Productionsによって配布された OpenSSL DLL バイナリが正しく機能するために、Visual C++ 再配布可能ファイルを必要とすることでした。

Visual C++ 再頒布可能パッケージを配布せずに OpenSSL DLL をアプリケーションと共に配布するには、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 に答える