2010-09-10 27 views
7

Bir sunucuyla HTTPS istekleri yapmak için aşağıdaki kod parçasını kullanıyorum.QNetworkRequest ve varsayılan SSL yapılandırması

QNetworkRequest request; 

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

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

Her şey benim test sunucusu ile çalışıyor görünüyor, ama defaultConfiguration (yorumsuz ikinci hat) ayarlamak için tavsiye edilir veya SSL kullanırken ağ API otomatik olarak tüm defaultConfigurations kontrol eğer bilmek istiyorum? Ve eğer kontrol ederse, bir özel konfigürasyon eklersek de yapar mı? Yani, özel yapılandırmayı varsayılan yapılandırma listesine eklemek gerekiyor mu? Örneğin:

QSslConfiguration SslConfiguration(QSslConfiguration::defaultConfiguration()); 

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

request.setSslConfiguration(SslConfiguration); 

Düzenleme: Symbian platformunda çalıştığımı eklemek istiyorum.
void QNetworkRequest::setSslConfiguration (const QSslConfiguration & config) belgelenmesi itibaren

cevap

6

:

Varsayılan olarak hiçbir SSL yapılandırması için arka uçları onlar için en iyi hangi yapılandırmasını özgürce seçmek verir kümesidir.

Aşağıdaki kodu kullanarak bu ifadeyi doğrulayabilirsiniz:

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

Ancak, SSL yapılandırma ile kök CA sertifikaları mağaza şaşırtmak gibi görünüyor. Eski, ikincisinin sadece bir parçasıdır (bkz. QList<QSslCertificate> QSslConfiguration::caCertificates() const). Eğer kök CA sertifikaları QNAM tarafından kullanılacak emin olmak istiyorsanız QNAM SSL bağlantıları yapmak ve

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) 

kök CA sertifikalarını ayarlamak için aşağıdaki statik yöntemlerden herhangi birini kullanmak için QSslSocket kullanıyor olması yararlanabilir tarafından kullanılan tüm QSslSocket kullanılarak yapılan SSL bağlantıları. Unutmayın, bu, global ayarıdır ve QSslSocket kullanılarak yapılan tüm SSL bağlantılarını, QNAM kullanılarak yapılanları sadece etkilemez. Bunu yalnızca belirli QNAM veya tüm QNAM'ler için ayarlamak için API yoktur.