Rou*_*uta 8 ssl qt qnetworkaccessmanager qnetworkrequest
我正在使用以下代码与服务器发出HTTPS请求.
QNetworkRequest request;
//request.setSslConfiguration(QSslConfiguration::defaultConfiguration());
request.setUrl(QUrl("https://www.someurl.com/"));
QNetworkReply *reply = manager->get(request);
Run Code Online (Sandbox Code Playgroud)
一切似乎与我的测试服务器上的工作,但我想知道如果要推荐它来设置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);
Run Code Online (Sandbox Code Playgroud)
编辑:我想补充一点,我正在使用Symbian平台.
来自以下文件
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();
}
Run Code Online (Sandbox Code Playgroud)
但是,您似乎将根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 )
Run Code Online (Sandbox Code Playgroud)
设置根CA证书以供使用QSslSocket 进行的所有 SSL连接使用.请记住,这是全局设置,并且影响使用QSslSocket进行的所有SSL连接,而不仅仅是使用QNAM进行的连接.没有API可以仅为特定的QNAM或所有QNAM设置此项.