Seite 1 von 1

Probleme mit QSslSocket

Verfasst: 1. September 2007 00:23
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

Verfasst: 3. September 2007 13:40
von macman
Schon mal im TaskTracker geguckt? Da finden sich einige Fehler bzgl. SSL, vielleicht ist einer dabei der auf dein Problem zutrifft.

Verfasst: 5. September 2007 13:17
von Winni
Ja, da hatte ich schon geschaut.
Mittlerweile findet sich da aber etwas Passendes :wink:

Gruß

Winni