Probleme mit QSslSocket

Alles rund um die Programmierung mit Qt
Antworten
Winni
Beiträge: 7
Registriert: 31. August 2007 21:32

Probleme mit QSslSocket

Beitrag von Winni »

Hallo zusammen,

ich versuche mich gerade vergeblich darin, eine verschlüsselte SSL-Verbindung zwischen einem SSL-Client und meinem SSL-Server aufzubauen.
Zwar kann sich der Client mittels connectToHostEncrypted() mit dem Server verbinden, aber die Verbindung zwischen beiden wird offenbar nicht verschlüsselt (encrypted-Signal erfolgt nicht).
Anscheinend tauschen beide ihre Zertifikate garnicht aus, zumindest kann man diese nicht mittels peerCertificate() abfragen.
Seltsamerweise bekomme ich allerdings weder einen SSL- noch einen Socket-Fehler.

Versuche ich allerdings einen SSL-Handshake mittels startServerEncryption() durch den Server, erhalte ich umgehend den Fehler
"The peer (also der Client) did not present any certificate"...

Mein Server (abgeleitet von QTcpServer) sieht in etwa wie folgt aus:

Code: Alles auswählen

void SslSocketServer::incomingConnection (int socketDescriptor)
{
serverSocket=new QSslSocket();

serverSocket->addCaCertificates("ca.crt");
serverSocket->setLocalCertificate ("server.crt");
serverSocket->setPrivateKey("server.key");

if(serverSocket->setSocketDescriptor(socketDescriptor))
{...
connect(serverSocket,SIGNAL(encrypted()),&debugWindow,SLOT(testEncryption()));
...
//serverSocket->startServerEncryption();
}
else delete serverSocket;
}
Der "Client" sieht wie folgt aus:

Code: Alles auswählen

main ()
{	...

QSslSocket *socket=new QSslSocket();
socket->addCaCertificates("ca.crt");
socket->setLocalCertificate("client.crt");
socket->setPrivateKey("client.key");
socket->connectToHostEncrypted("127.0.0.1",4711);
//bzw. socket->connectToHost("127.0.0.1",4711);
connect(socket,SIGNAL(encrypted()),&debugWindow,SLOT(testEncryption()));
	
 }
Nachdem das mit dem oben beschriebenen Client nicht funktioniert hat, habe ich den Server dann mal mit stunnel im Client-Modus getestet.
Sofern ich startServerEncryption() weglasse, bleibt stunnel mit folgendem Eintrag im Log hängen:
SSL State (connect): SSLv3 write client hello A

Nehme ich das startServerEncryption() wieder rein, läuft der SSL-Handshake weiter (Server schickt Zertifikat etc...).
Dann allerdings bricht der Server die Verbindung irgendwann mit der Meldung ab "The peer did not present any certificate" :(

Kann mir jemand evtl. einen Tipp geben, wo genau das klemmt?
Vorab schon einmal vielen Dank für Euere Hilfe!

Gruß

Winni
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

Schon mal im TaskTracker geguckt? Da finden sich einige Fehler bzgl. SSL, vielleicht ist einer dabei der auf dein Problem zutrifft.
Die deutsche Schriftsprache ist case-sensitive. Außerdem gibt es eine Interpunktionsnorm. Wenn manch einer seine Programme genauso schlampig schreibt, wie sein Posting hier, dann sollte er es lieber bleiben lassen.
Winni
Beiträge: 7
Registriert: 31. August 2007 21:32

Beitrag von Winni »

Ja, da hatte ich schon geschaut.
Mittlerweile findet sich da aber etwas Passendes :wink:

Gruß

Winni
Antworten