Morgen
macman hat geschrieben:qtagent hat geschrieben:Es hat nun Funktioniert

Verrätst Du auch woran es gelegen hat?
Ich hab Qt 4.4.0 mit "-openssl" compiliert, wobei ich kein OpenSSL Quellcode brauchte.
Das "-openssl" ist auch nur bei Windows nötig, auf FreeBSD ist das per default aktiviert.
Hab dann ein QDialog im Qt-Designer mit einiegen Widgets erstellt:
- QLineEdit für Pass Phrase.
- QPushButton für Download Button.
- ...
Im Konstruktor des Dialogs hab ich folgendes geschrieben:
Code: Alles auswählen
setupUi(this);
QHttp http=new QHttp(this);
QSslSocket sslSocket=new QSslSocket(this);
connect(sslSocket,SIGNAL(sslErrors(const QList<QSslError>&)),this,SLOT(sslSocketSslErrors(const QList<QSslError>&)))
http->setSocket(sslSocket);
...
Beim click Slot für das Download Button clicked SIGNAL hab ich folgendes geschrieben:
Code: Alles auswählen
sslSocket->addCaCertificates("ca-bundle.crt",QSsl::Pem);
sslSocket->setLocalCertificate("client-rsa.crt",QSsl::Pem);
if(!sslSocket->localCertificate().isValid())
qFatal("Client Zertifikat ungültig.");
sslSocket->setPrivateKey("client-rsa.key",QSsl::Rsa,QSsl::Pem,lineEditPassPhrase->text().toLatin1());
...
Danach konnte ich problemlos mittels QHttp am Server authentifizieren und eine Datei herunterladen.
Die Zertifikate auf der Client Seite:
- Client Zertifikat: "client-rsa.crt".
- Client Private Key: "client-rsa.key".
- Server CA Zertifikat: "ca-bundle.crt".
Auf der Server Seite (Apache 2.2.3), müssen folgende Zertifikate vorhanden sein:
- Client CA Zertifikat.
- Server Zertifikat und Server Private Key.
Gruss
qtagent
P.S. Das schwierigste an der Ganzen sache ist eigentlich nur das Zertifikat und Private Key Chaos

.