11

QNetworkRequest を使用して QNeworkRequest を介して外部からデータをロードする 2 つの Qt アプリケーションで、この出力に気付きました。

QSslSocket: cannot resolve TLSv1_1_client_method
QSslSocket: cannot resolve TLSv1_2_client_method
QSslSocket: cannot resolve TLSv1_1_server_method
QSslSocket: cannot resolve TLSv1_2_server_method
QSslSocket: cannot resolve SSL_select_next_proto
QSslSocket: cannot resolve SSL_CTX_set_next_proto_select_cb
QSslSocket: cannot resolve SSL_get0_next_proto_negotiated

これらの警告が表示される原因となるリクエストの一例は次のとおりです。

QNetworkReply reply = m_nam->get(QNetworkRequest(QUrl("http://api.openweathermap.org/data/2.5/forecast?id=2835297&mode=xml")));

どのクエリにも TLS/SSL が関与していないことは十分に確信しています。すべてがプレーンな HTTP です。メッセージは、URL に関係なく、最初のリクエストがディスパッチされた後に常に表示されます。SSL を使用するつもりはまったくありません。コードに SSL についての言及はありません。つまり、プログラムで警告を無視することはできません。

私のセットアップは、Windows 7 64 ビット、MSVC2013 および MinGW、Qt 5.3.2 です。メッセージは、使用するコンパイラに関係なく表示されます。OpenSSL やその他の SSL 開発ライブラリはインストールされていません。

問題は、これらの警告を取り除くにはどうすればよいかということです。

4

4 に答える 4

18

これらは、OpenSSL 関数が解決されたときの qWarning() 呼び出しからのものです。これらの関数を呼び出そうとするのではなく、解決するだけです。未解決の関数を呼び出すと、QSslSocket: cannot call unresolved function ...代わりに警告が発生します。

この警告は、サポートされているスキーマを返すQSslSocket::supportsSsl()static inへの呼び出しによって実行時に解決される OpenSSL 関数の結果です---また、SSL がサポートされている場合は.QNetworkAccessManager::supportedSchemesImplementation()httphttps

これらの警告に関する選択肢はほとんどありません。

  1. とにかくSSLが必要ないか、必要ないため、それらを無視してください
  2. -no-opensslに渡されたQtを再コンパイルしますconfigure
  3. 機能が解決されて利用可能になるようにOpenSSLを出荷しhttpsます-おそらくあなたが望むものではありません
于 2014-10-14T21:17:30.883 に答える
5

関連する警告メッセージを無効にすることができますQLoggingCategory::setFilterRules("qt.network.ssl.w arning=false");

于 2016-10-01T03:14:59.960 に答える
4

時折、非常によく似た警告メッセージが表示される顧客がいましたが、ソフトウェアもクラッシュしていました。

QSslSocket: cannot resolve TLSv1_1_client_method
QSslSocket: cannot resolve TLSv1_2_client_method
QSslSocket: cannot resolve TLSv1_1_server_method
QSslSocket: cannot resolve TLSv1_2_server_method
QSslSocket: cannot resolve SSL_select_next_proto
QSslSocket: cannot resolve SSL_CTX_set_next_proto_select_cb
QSslSocket: cannot resolve SSL_get0_next_proto_negotiated
QMutex: destroying locked mutex

SSL も使用していませんでしたが、プログラムが顧客のコンピューターで OpenSSL のコピーを見つけ、それとの接続を試みたためであると判断しました。ただし、見つかったバージョンは古すぎました ( Qt 5.2 以降では v1.0.0 以降が必要です)。

私たちの解決策は、OpenSSL DLL をアプリケーション (~1.65 MB) と共に配布することでした。別の方法は、OpenSSL をサポートせずに Qt をゼロからコンパイルすることです。

于 2015-07-07T18:55:08.340 に答える
1

QSslSocket::ignoreSslErrorsを試しましたか?

于 2014-10-14T12:50:00.393 に答える