首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QNetworkRequest和默认SSL配置

QNetworkRequest和默认SSL配置
EN

Stack Overflow用户
提问于 2010-09-10 10:20:09
回答 1查看 13.3K关注 0票数 9

我使用下面的代码来使用服务器进行HTTPS请求。

代码语言:javascript
复制
QNetworkRequest request;

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

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

所有东西似乎都在我的测试服务器上工作,但是我想知道是否建议设置defaultConfiguration (取消注释第二行),还是网络API在使用defaultConfigurations时会自动检查所有的defaultConfigurations?如果它检查,如果我添加了一个自定义配置,它也会这样做吗?我的意思是,是否需要将自定义配置附加到默认配置列表中?例如:

代码语言:javascript
复制
QSslConfiguration SslConfiguration(QSslConfiguration::defaultConfiguration());

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

request.setSslConfiguration(SslConfiguration);

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

EN

回答 1

Stack Overflow用户

发布于 2011-02-25 07:46:35

从…的文件

void QNetworkRequest::setSslConfiguration ( const QSslConfiguration & config )

默认情况下,不设置SSL配置,这允许后端自由选择最适合它们的配置。

可以使用以下代码验证此语句:

代码语言:javascript
复制
#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 QSslConfiguration::caCertificates () const)。如果要确保QNAM将使用根CA证书,则可以利用QNAM使用QSslSocket进行SSL连接的事实,并使用以下任何静态方法

代码语言:javascript
复制
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设置它。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3683826

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档