QNetworkRequest
がどのCA証明書を使用することができるかについて完全な制御をしようとしています。私たちが実行したい最初の「シンプルな」テストは、すべてのCA証明書を削除して、すべてのhttps試行でトリガーとエラーが発生することを確認することでした。ここでQtでは、QNetworkRequestからすべての認証局証明書を削除する方法は?
たちはインスタンスを設定する方法を示す、最小限の例です。
QNetworkAccessManager manager;
QUrl requestedUrl("https://www.google.com");
QNetworkRequest request(requestedUrl);
QSslConfiguration sslConfig = request.sslConfiguration();
// Set the QList of certificates to an empty list
sslConfig.setCaCertificates({});
request.setSslConfiguration(sslConfig);
QNetworkReply *reply = manager.get(request);
connect(reply, SIGNAL(sslErrors(QList<QSslError>)),
this, SLOT(slotSslErrors(QList<QSslError>)));
要求が意図的に認証を完了するために、任意のCA証明書を持っていないと私たちは、それが実行時に失敗することが期待されます。しかし、要求は実際に正常に完了し、応答にはWebページのコンテンツが含まれ、slotSslErrors
スロットは実行されません。
どのように実際にそのような要求のためのすべての証明書を無効にするでしょうか?
あなたの答えをありがとう。私はdocでpre-handshakeの必要条件を見ました。私の理解は、 'QNetworkAccessManager'接続メソッドの1つを明示的に呼び出さなければ、要求を発行するときにハンドシェイクが起こるということです。例)。とにかく、提案したように 'connectToHostEncrypted'への呼び出しを追加しようとしましたが、動作は変わりません。 –