2010-09-10 3 views
7

Я использую следующий фрагмент кода, чтобы сделать HTTPS-запросы с сервером.QNetworkRequest и конфигурация SSL по умолчанию

QNetworkRequest request; 

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

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

Все, кажется, работает с моим тестовым сервером, но я хотел бы знать, если это рекомендуется установить defaultConfiguration (раскомментируйте вторую линию) или же сеть API автоматически проверять все defaultConfigurations при использовании SSL? И если он проверяет, делает ли это также, если я добавлю одну настраиваемую конфигурацию? Я имею в виду, нужно ли добавлять настраиваемую конфигурацию в список настроек по умолчанию? Например:

QSslConfiguration SslConfiguration(QSslConfiguration::defaultConfiguration()); 

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

request.setSslConfiguration(SslConfiguration); 

Редактировать: Я хотел бы добавить, что я работаю на платформе Symbian.

ответ

6

Из документации
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(); 
} 

Однако, вы, кажется, запутать сертификатов корневого центра сертификации с конфигурацией 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) 

, чтобы установить сертификаты корневого ЦС для использования все SSL-соединения, выполненные с использованием QSslSocket. Помните, что это global настройка и влияет на все SSL-соединения, выполненные с использованием QSslSocket , а не только, сделанные с использованием QNAM. API не может устанавливать это только для определенного QNAM или для всех QNAM.