9

次のコードを使用して、サーバーでHTTPSリクエストを作成しています。

QNetworkRequest request;

//request.setSslConfiguration(QSslConfiguration::defaultConfiguration());
request.setUrl(QUrl("https://www.someurl.com/"));

QNetworkReply *reply = manager->get(request);

すべてが私のテストサーバーで機能しているようですが、defaultConfigurationを設定することをお勧めするか(2行目のコメントを外す)、SSLを使用するときにネットワークAPIがすべてのdefaultConfigurationsを自動的にチェックするかどうかを知りたいですか?また、チェックする場合、カスタム構成を1つ追加した場合も同様に機能しますか?つまり、デフォルト構成のリストにカスタム構成を追加する必要がありますか?例えば:

QSslConfiguration SslConfiguration(QSslConfiguration::defaultConfiguration());

QList<QSslCertificate> certificates = SslConfiguration.caCertificates();
certificates.append(QSslCertificate::fromData(certificate.toAscii(), QSsl::Pem));
SslConfiguration.setCaCertificates(certificates);

request.setSslConfiguration(SslConfiguration);

編集:私はSymbianプラットフォームで作業していることを追加したいと思います。

4

1 に答える 1

7

のドキュメントから
void QNetworkRequest::setSslConfiguration ( const QSslConfiguration & config ):

デフォルトでは、SSL 構成は設定されていないため、バックエンドは最適な構成を自由に選択できます。

次のコードを使用して、このステートメントを確認できます。

#include <QtGui/QApplication>
#include <QtCore/QDebug>
#include <QtNetwork/QNetworkAccessManager>
#include <QtNetwork/QNetworkRequest>
#include <QtNetwork/QNetworkReply>
#include <QtNetwork/QSslConfiguration>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QNetworkAccessManager qnam;
    QNetworkRequest request;
    QNetworkReply* reply = qnam.get(request);

    qDebug() << "Default SSL configuration isNull: "
             << QSslConfiguration::defaultConfiguration().isNull();

    qDebug() << "SSL configuration used by QNAM isNull: "
             << reply->sslConfiguration().isNull();

    return app.exec();
}

ただし、ルート CA 証明書ストアと SSL 構成を混同しているようです。前者は後者の一部にすぎません ( を参照QList<QSslCertificate> QSslConfiguration::caCertificates () const)。ルート CA 証明書が QNAM によって使用されることを確認したい場合は、QNAM が QSslSocket使用して SSL 接続を確立し、次の静的メソッドのいずれかを使用するという事実を利用できます。

void addDefaultCaCertificate ( const QSslCertificate & certificate )
bool addDefaultCaCertificates ( const QString & path, QSsl::EncodingFormat encoding = QSsl::Pem, QRegExp::PatternSyntax syntax = QRegExp::FixedString )
void addDefaultCaCertificates ( const QList<QSslCertificate> & certificates )
void setDefaultCaCertificates ( const QList<QSslCertificate> & certificates )

QSslSocket を使用して作成されたすべてのSSL 接続で使用されるルート CA 証明書を設定します。これはグローバル設定であり、QNAM を使用して作成された接続だけでなく、 QSslSocket を使用して作成されたすべての SSL 接続に影響することに注意してください。特定の QNAM またはすべての QNAM に対してのみこれを設定する API はありません。

于 2011-02-25T07:46:35.447 に答える