QHttp & Client Authentifizierung

Alles rund um die Programmierung mit Qt
Antworten
qtagent
Beiträge: 19
Registriert: 28. Mai 2007 21:36
Wohnort: Schwiiz | Schweiz | Switzerland | Suisse | Svizzera | Svizra

QHttp & Client Authentifizierung

Beitrag von qtagent »

Abend

Kann man mit QHttp auch eine Client authentifizierung durch ein Client Zertifikat durchzuführen?

So das es erfolgreich mit Apache Konfiguration (httpd-ssl.conf) arbeitet:

Code: Alles auswählen

SSLVerifyClient require
SSLVerifyDepth 2
Ich verwende zurzeit Qt 4.3.0 auf FreeBSD 6.2 Release.

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

Beitrag von macman »

Schau dir mal die configure Optionen an. Du wirst auf jeden Fall Qt neu übersetzen müssen.
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.
qtagent
Beiträge: 19
Registriert: 28. Mai 2007 21:36
Wohnort: Schwiiz | Schweiz | Switzerland | Suisse | Svizzera | Svizra

Beitrag von qtagent »

Abend

Habe mir die Configure Optionen angeschaut, doch nichts gefunden und glaube auch nicht das dort die Lösung zu finden ist.

Ich habe generell an

Code: Alles auswählen

QSslSocket*sslSocket;
...
QHttp::setSocket(sslSocket);
...
gedacht, wobei dort das setzen eines Client Zertifikates via:

Code: Alles auswählen

sslSocket->setLocalCertificate("/home/User/client.pem",QSsl::Pem);
Leider auch nicht funktioniert hat.
Hat jemand sowas schon mal realisiert? Müsste ja generell irgendwie mit QSslSocket gehen oder?

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

Beitrag von macman »

qtagent hat geschrieben:Habe mir die Configure Optionen angeschaut, doch nichts gefunden und glaube auch nicht das dort die Lösung zu finden ist.
-openssl nicht gesehen? Und dann steht da noch was in der Doku zu QSslSocket:
Qt Doku hat geschrieben:This product uses software developed by the OpenSSL Project for use in the OpenSSL Toolkit. You can download the necessary software from http://www.openssl.org/.
Also, OpenSSL downloaden, nach Qt/src/network kopieren, neues configure mit -openssl und dann noch den QtNetwork-Part neu compilieren. Dann sollte es funktionieren, obwohl ich noch auf verzweifelter Suche nach einem Bug bin.
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.
qtagent
Beiträge: 19
Registriert: 28. Mai 2007 21:36
Wohnort: Schwiiz | Schweiz | Switzerland | Suisse | Svizzera | Svizra

Beitrag von qtagent »

Morgen

Es hat nun Funktioniert :D

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

Beitrag von macman »

qtagent hat geschrieben:Es hat nun Funktioniert :D
Verrätst Du auch woran es gelegen hat?
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.
qtagent
Beiträge: 19
Registriert: 28. Mai 2007 21:36
Wohnort: Schwiiz | Schweiz | Switzerland | Suisse | Svizzera | Svizra

Beitrag von qtagent »

Morgen
macman hat geschrieben:
qtagent hat geschrieben:Es hat nun Funktioniert :D
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 :shock:.
Antworten