2010-09-10 14 views
7

J'utilise le morceau de code suivant pour effectuer des requêtes HTTPS avec un serveur.QNetworkRequest et configuration SSL par défaut

QNetworkRequest request; 

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

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

Tout semble fonctionner avec mon serveur de test, mais je voudrais savoir s'il est recommandé de régler la defaultConfiguration (deuxième ligne uncomment) ou ne l'API réseau vérifie automatiquement tous defaultConfigurations lorsque vous utilisez SSL? Et si elle vérifie, fait-elle aussi si j'ajoute une configuration personnalisée? Je veux dire, est-il nécessaire d'ajouter la configuration personnalisée à la liste de configuration par défaut? Par exemple:

QSslConfiguration SslConfiguration(QSslConfiguration::defaultConfiguration()); 

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

request.setSslConfiguration(SslConfiguration); 

Modifier: Je voudrais ajouter que je travaille sur la plate-forme Symbian.

Répondre

6

De la documentation de
void QNetworkRequest::setSslConfiguration (const QSslConfiguration & config):

Par défaut, aucune configuration SSL est ensemble, ce qui permet aux backends de choisir librement quelle configuration est mieux pour eux.

Vous pouvez vérifier cette déclaration en utilisant le code suivant:

#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(); 
} 

Cependant, vous semblez confondre les certificats de CA racine magasin avec la configuration SSL. Le premier n'est qu'une partie de ce dernier (voir QList<QSslCertificate> QSslConfiguration::caCertificates() const). Si vous voulez vous assurer que vos certificats de CA racine seront utilisées par QNAM vous pouvez profiter du fait que QNAM utilise QSslSocket pour établir des connexions SSL et utiliser l'une des méthodes statiques suivantes

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) 

à des certificats d'AC racine à utiliser par tous les connexions SSL effectuées à l'aide de QSslSocket. Rappelez-vous, c'est paramètre global et affecte toutes les connexions SSL faites en utilisant QSslSocket non seulement ceux-ci en utilisant QNAM. Il n'y a pas d'API pour définir ceci uniquement pour QNAM spécifique ou pour tous les QNAM.