Alles rund um die Programmierung mit Qt
danibert
Beiträge: 20 Registriert: 19. April 2010 09:11
Beitrag
von danibert » 5. Mai 2010 17:16
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 » 5. Mai 2010 17:33
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 » 5. Mai 2010 18:07
@AuE
was muss bei sslConfig hin? Wie hattest Du das deklariert?
AuE
Beiträge: 918 Registriert: 5. August 2008 10:58
Beitrag
von AuE » 5. Mai 2010 18:20
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 » 14. Mai 2010 21:10
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/