SSL mit QNetworkAccessManager

Alles rund um die Programmierung mit Qt
Antworten
danibert
Beiträge: 20
Registriert: 19. April 2010 09:11

SSL mit QNetworkAccessManager

Beitrag von danibert »

Hallo,

ich versuche, eine Webseite mit dem QNetworkAccessManager per SSL aufzurufen und die Ausgabe des Servers in myAnswer aufzufangen. Ohne SSL klappt es problemlos mit :

Code: Alles auswählen

myAnswer = myManager -> post(QNetworkRequest(Qurl("http://meineseite.de")), daten);
Gebe ich nun als URL "https://meineseite.de" an, wird keine Anfrage an den Server gesendet. Ich bekomme auch keine Fehlermeldung.
Ich habe schon den ganzen Tag gegoogelt und in der Doku gestöbert, aber die Informationsmenge erschlägt mich komplett. Irgendwie haben alle Beispiele nichts mit dem QNetworkAccessManager zu tun (oder ich kapier es einfach nicht). Gibt es wirklich keine einfache, und für mich als Anfänger nachzuvollziehende Möglichkeit, einen simplen SSL-Aufruf hinzubekommen?

Danke für alle Tipps
AuE
Beiträge: 918
Registriert: 5. August 2008 10:58

Beitrag von AuE »

Hatte das gleiche mal mit SSL mit Soap ..... hab dann die submit Request wie folgt angepasst....evtl hilft dir das!

Code: Alles auswählen

 QNetworkRequest networkReq;
    networkReq.setSslConfiguration(sslConfig);
    networkReq.setHeader(QNetworkRequest::ContentTypeHeader, QLatin1String("text/xml;charset=utf-8"));
    networkReq.setRawHeader("SOAPAction", soapAction.toAscii());
    url.setPath(path);
    networkReq.setUrl(url);

    soapResponse.clear();
    networkRep = networkMgr.post(networkReq, request.toXmlString().toUtf8().constData());
danibert
Beiträge: 20
Registriert: 19. April 2010 09:11

Beitrag von danibert »

@AuE
was muss bei sslConfig hin? Wie hattest Du das deklariert?
AuE
Beiträge: 918
Registriert: 5. August 2008 10:58

Beitrag von AuE »

Code: Alles auswählen

QSslConfiguration getSSL(){
QSslConfiguration tmpSslCfg;

	QFile fileCA(":/cert/cacert.pem");
	QFile fileSERVER(":/cert/server.pem");

	QSslCertificate certCA(&fileCA, QSsl::Pem);
	QSslCertificate certSERVER(&fileSERVER, QSsl::Pem);

	if((certCA.isValid() && !certCA.isNull())&&(certSERVER.isValid() && !certSERVER.isNull()))
	{
		tmpSslCfg.setLocalCertificate(certSERVER);
		fileSERVER.close();	 QByteArray passphrase = "dummy";
		fileSERVER.open(QIODevice::ReadOnly);
		QSslKey  key(&fileSERVER, QSsl::Rsa, QSsl::Pem,QSsl::PrivateKey , passphrase);
		tmpSslCfg.setCaCertificates(QList<QSslCertificate>() << certCA);
		tmpSslCfg.setPrivateKey(key);
		tmpSslCfg.setProtocol(QSsl::TlsV1);
		tmpSslCfg.setPeerVerifyMode(QSslSocket::QueryPeer);
		fileSERVER.close();
		fileCA.close();
	}
	
	return tmpSslCfg;
}
gouranga
Beiträge: 6
Registriert: 2. Oktober 2009 21:25

Beitrag von gouranga »

Vorraussetzung ist natürlich, dass du Qt mit OpenSSL Support kompiliert hast und OpenSSL entsprechend kompiliert und eingerichtet ist.

Dann sollte der QNetworkAccessManager https:// und SSL im allgemeinen implizit verwenden. Klappt bei mir tadellos!

https bedarf dann auch keiner weiteren SSL Konfiguration (zumindest solange der NetworkAccessManager es mit validen Zertifikaten zu tun bekommt.)

Das hier sollte dir helfen:
http://www.gouranga.me/2010/03/09/xml-r ... d-openssl/
Antworten