QNetworkRequest和默认SSL配置

9
我正在使用以下代码与服务器进行HTTPS请求。
QNetworkRequest request;

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

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

我的测试服务器似乎一切正常,但我想知道是否建议设置defaultConfiguration(取消第二行的注释),或者在使用SSL时网络API自动检查所有defaultConfigurations?如果它进行了检查,那么如果我添加一个自定义配置,它也会进行检查吗?我的意思是,是否需要将自定义配置附加到默认配置列表中?例如:

QSslConfiguration SslConfiguration(QSslConfiguration::defaultConfiguration());

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

request.setSslConfiguration(SslConfiguration);

编辑:我想补充一下,我正在Symbian平台上工作。

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 )

要设置根CA证书,以便所有使用QSslSocket进行的SSL连接都可以使用。请记住,这是全局设置,会影响所有使用QSslSocket进行的SSL连接,而不仅仅是使用QNAM进行的连接。没有API可以仅为特定的QNAM或所有QNAM设置此设置。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接