gpt4 book ai didi

qt - QNetworkRequest 和默认 SSL 配置

转载 作者:太空宇宙 更新时间:2023-11-03 12:42:30 31 4
gpt4 key购买 nike

我正在使用以下代码向服务器发出 HTTPS 请求。

QNetworkRequest request;

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

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

我的测试服务器似乎一切正常,但我想知道是否建议设置 defaultConfiguration(取消注释第二行)或者网络 API 在使用 SSL 时是否自动检查所有 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 平台上工作。

最佳答案

来自
的文档 void QNetworkRequest::setSslConfiguration ( const QSslConfiguration & config ) :

By default, no SSL configuration is set, which allows the backends to choose freely what configuration is best for them.

您可以使用以下代码验证此声明:

#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 )。如果您想确保 QNAM 使用您的根 CA 证书,您可以利用 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 设置此项。

关于qt - QNetworkRequest 和默认 SSL 配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3683826/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com