Probleme mit QSslSocket
Verfasst: 1. September 2007 00:23
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:
Der "Client" sieht wie folgt aus:
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:
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
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;
}
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()));
}
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