2012-11-14 9 views
5

Wie kann ich den Apache-httpd konfigurieren, um bestimmten Client-Zertifikaten zu vertrauen?Apache httpd: Wie kann man bestimmten Client-Zertifikaten vertrauen?

Wir müssen den Zugriff auf einen Webservice auf bestimmte Server eines bestimmten Partners beschränken.
Wir planten, eine CA-basierte Lösung dafür zu verwenden (eine vertrauenswürdige CA, die nur vertrauenswürdige CSRs signierte, als wir sie akzeptierten); Die Zertifizierungsstelle unseres Unternehmens erstellt jedoch keine Zertifikate für externe Unternehmen.

Um die gesicherte Verbindung trotzdem herzustellen, wollten wir bestimmte Clientzertifikate auf unserem Apache-httpd-Proxy konfigurieren, bis die erforderliche PKI bereit ist.

Aber httpd akzeptiert keine Verbindungen durch die Clients, die versuchen, eine Verbindung herzustellen, indem das Clientzertifikat verwendet wird, das für die CACertificateFile (verkettete x509-Zertifikate in Base64 und im DER-Format (PEM)) konfiguriert wurde der virtuelle Host.

Das Client-Zertifikat ist in diesem Fall kein selbstsigniertes Zertifikat.

Antwort

4

Sie sollten die CA-Zertifikate konfigurieren Sie über SSLCACertificateFile oder SSLCACertificatePath vertrauen und verwenden SSLVerifyClient (optional oder required, nicht optional_no_ca, die jede Authentifizierung nicht durchführen würde) die Server-Anforderung eines Client-Zertifikat zu machen. Wenn Sie SSLVerifyClient direkt in Ihrem VirtualHost Abschnitt verwenden, wird das Clientzertifikat während des ersten Handshakes gesendet. Wenn Sie es in eine Directory/.htaccess setzen, wird das Client-Zertifikat erneut verhandelt.

Es ist einfacher zu debuggen, wenn das Zertifikat im ersten Handshake gesendet wird, da das Clientzertifikat selbst nicht verschlüsselt wird. Sie sollten in der Lage sein, es zu sehen, indem Sie den Verkehr mit Wireshark (in der Certificate Nachricht, die vom Client gesendet wird) betrachten. Beim Debuggen sollte überprüft werden, ob eine Nachricht vom Server gesendet wird und ob die Liste der Zertifizierungsstellen angezeigt wird.

Eine typische Ursache für ein Problem ist ein Client, der diese Liste nicht erkennt, oder ein Client, der seine Zwischenzertifikate in der Kette bei Bedarf nicht sendet.

Wenn Sie dann bestimmte Zertifikate genauer autorisieren möchten, können Sie variable SSL-Variablen (z. B. SSL_CLIENT_S_DN_*) überprüfen und in einer SSLRequire-Direktive verwenden (siehe example).

+2

Hallo Bruno, wir wollen bestimmte Zertifikate auch genauer autorisieren. Wenn Sie SSL-Variablen überprüfen, ist es trotzdem möglich, den Fingerabdruck/Fingerabdruck des Zertifikats zu überprüfen? In unserem Fall ist dies die einzige Information, die wir zur Autorisierung verwenden können. Aber ich habe festgestellt, dass es keine solche Variable gibt. – Xilang

+2

Oder gibt es eine Variable, um den öffentlichen Schlüssel des Zertifikats zu erhalten? Ich habe es auch nicht gefunden. – Xilang

+0

Wie setzen Sie das Client-Zertifikat (das über einen SSL-Handshake kommt) in ein Verzeichnis wie '.htaccess'? – Promod

Verwandte Themen