5

証明書が自己署名されている Web サービスに残りの要求を送信しようとしています。現時点では、URL と認証を設定してリクエストを作成しています。ヘッダーとしてのキー。次に、この ssl エラーを無視するように返信に伝えます。

QSslError error(QSslError::SelfSignedCertificate);
QList<QSslError> expectedSslErrors;
expectedSslErrors.append(error);

QNetworkReply *reply = _accessManager.put(request, ""); // no requestbody
reply->ignoreSslErrors(expectedSslErrors);

実行すると、次のsslエラーが発生します。

9 - 証明書は自己署名されており、信頼されていません

続いてネットワーク エラー番号 6:

リクエストが次のメッセージで失敗しました: SSL ハンドシェイクに失敗しました

現時点では、すべてのエラーを無視しています。それが機能する唯一のものであるように思われるからです。汚い感じ。

誰かが私が間違っていることを知っていれば、本当に感謝しています!

編集:

変更:

QList<QSslError> expectedSslErrors;
expectedSslErrors.append(QSslError::SelfSignedCertificate);
expectedSslErrors.append(QSslError::CertificateUntrusted);
reply->ignoreSslErrors(expectedSslErrors);

しかし、それでも同じエラーが発生します...

4

2 に答える 2

6

証明書は自己署名されており、信頼されていません

問題は「信頼できない」部分です。の 2 番目のパラメータとして、自己署名証明書を提供する必要がありますQSslError

編集:ソース コードに基づいて、実際に受信した SSL エラーと渡されignoreSslErrorsたエラーの比較は、エラー コードと証明書の両方を比較することによって行われます。
したがって、OpenSSL によって返されるエラーに のように証明書が含まれる場合は、QSslError::SelfSignedCertificate常に証明書をQSslErrorコンストラクターに渡す必要があります。そうしないと、比較が失敗します。

ただし、信号をスロットに接続して、エラー リストに自己署名証明書エラーのみが含まれていることを確認し、 (パラメーターなしで)sslError()を呼び出すことにより、エラーを手動で無視することもできます。ignoreSslErrors()

于 2012-04-11T01:30:51.737 に答える