2010-09-10 10 views
7

Estoy usando la siguiente pieza de código para realizar solicitudes HTTPS con un servidor.QNetworkRequest y la configuración SSL predeterminada

QNetworkRequest request; 

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

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

Todo parece estar trabajando con mi servidor de prueba, pero me gustaría saber si se recomienda ajustar la DefaultConfiguration (segunda línea uncomment) o no la API de red que compruebe automáticamente todos defaultConfigurations cuando se utiliza SSL? Y si se comprueba, ¿también lo hace si agrego una configuración personalizada? Quiero decir, ¿es necesario agregar la configuración personalizada a la lista de configuración predeterminada? Por ejemplo:

QSslConfiguration SslConfiguration(QSslConfiguration::defaultConfiguration()); 

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

request.setSslConfiguration(SslConfiguration); 

Editar: Me gustaría añadir que estoy trabajando en la plataforma Symbian.

Respuesta

6

De la documentación de
void QNetworkRequest::setSslConfiguration (const QSslConfiguration & config):

Por defecto, sin necesidad de configuración SSL es conjunto, lo que permite a los backends a elegir libremente qué configuración es mejor para ellos.

puede verificar esta afirmación con el siguiente código:

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

Sin embargo, parece confundir tienda de certificados de CA raíz con la configuración de SSL. El primero es solo una parte de este último (ver QList<QSslCertificate> QSslConfiguration::caCertificates() const). Si desea asegurarse de que sus certificados de CA raíz serán utilizados por QNAM se puede aprovechar el hecho de que QNAM utiliza QSslSocket para hacer las conexiones SSL y utilizar cualquiera de los siguientes métodos estáticos

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) 

para establecer certificados de CA raíz para ser utilizado por todos conexiones SSL hechas usando QSslSocket. Recuerde, esto es configuración global y afecta a todas las conexiones SSL hechas usando QSslSocket , no solo estas hechas usando QNAM. No hay API para configurar esto solo para QNAM específico o para todos los QNAM.

Cuestiones relacionadas