Apache wird nicht Verlangen, Meine SSL-Client-Zertifikat

First off, bitte beachten Sie, dass ich bin neu in der SSL-Konfiguration. In der Vergangenheit habe ich immer das Glück zu haben eine IT-Abteilung festlegen, dass für mich vor der Zeit. So vorbereitet werden, für die Möglichkeit, dass ich vielleicht müssen Sie Fragen zur Klärung auf einige Ihrer Antworten. =)

, Was ich Versuche zu Tun,

Ich bin beim einrichten einer intranet-website für die Mitarbeiter. Zum Beispiel, es wird ein browser-start-Seite zeigt den Inhalt angepasst für jeden Mitarbeiter. Als solche, ich muss in der Lage sein, zu identifizieren, sagte ein Mitarbeiter ohne dass ein Benutzername/Passwort oder andere Eingebung (one-time setup ist ok aber, ich will einfach nicht dass Sie dazu aufgefordert werden jedes mal). Natürlich, SSL würde zu sein scheinen der beste Weg zu gehen über das tun dies.

Werde ich eine MySQL-Datenbank-setup zuordnen "Benutzer" - Konten mit SSL_CLIENT_M_SERIAL und SSL_CLIENT_I_DN, die ich nehme, wird einzigartig für jeden client-Zertifikat(?). Ich habe die Idee aus diesem Artikel: http://cweiske.de/tagebuch/ssl-client-certificates.htm

Das erste mal, wenn der Benutzer geht auf die interne website, die Sie nicht haben, ein Zertifikat (ich will NICHT zu sein, erzeugen Sie manuell für den Kunden!), in diesem Fall $_SERVER["SSL_CLIENT_VERIFY"] == "NONE". Wenn das geschieht, wird die Benutzer-Konto-setup-Seite, die auch ein Schritt, wo PHP generiert ein SSL-client-Zertifikat und sendet es an den browser für den Benutzer zu installieren. Schön und einfach. Der Benutzer installiert dann den cert, den Verband gemacht, und nach einem Neustart des browser (für eine gute Maßnahme), der Benutzer geht zurück auf die interne website.

Zu diesem Zeitpunkt, Apache Anfragen soll das client-Zertifikat, das der browser sendet dann. Das PHP-Skript parst dann die notwendigen $_SERVER-Variablen vergleicht, gegen die MySQL-Datenbank, und gute Zeiten werden für uns alle. Wieder schön und einfach.

Was Funktioniert So Weit

Habe ich die server-side-Zertifikate installiert. Und ja, Sie sind selbst-signiert (aus offensichtlichen Gründen). Apache mod_ssl installiert und alles scheint zu funktionieren gut. Erstellt habe ich ein PHP-Skript, dass nur Deponien der $_SERVER-array, und alle SSL_SERVER_* Schlüssel-Werte des Zertifikats übereinstimmen, die ich für ihn erstellt.

Das Problem

Komme ich nicht an die client-Zertifikate an die Arbeit! In das gleiche PHP-Skript, egal was ich mache, SSL_CLIENT_VERIFY == "NONE" und die anderen SSL_CLIENT_* Tasten fehlen. Dies ist, was passiert, wenn ich SSLVerifyClient optional " festgelegt, die in ssl.conf. Nach jedem tutorial das ich gelesen habe, sagen alle, dass der webserver Sie sollten Fragen Sie den browser für ein client-Zertifikat. Die Sache ist, ich kann es nicht mehr zu tun! Es geht eben gerade um das PHP-Skript und meint ich habe keine client-Zertifikate. Dies passiert in Firefox, Chrome und IE.

So, ich habe versucht, SSLVerifyClient erforderlich und der webserver neu gestartet. Mit dieser option wird an Ort und Stelle, kann ich auch nicht herstellen einer SSL-Verbindung. Firefox sagt nur das die Verbindung zurückgesetzt wurde (andere Browser zeigen Ihre eigenen Versionen dieser Fehler als auch). Was ist komisch ist, dass die Protokolle zeigen keine Aktivität auf diese Verbindung versucht! I. e. access_log, error_log, ssl_access_log, ssl_error_log, UND ssl_request_log alle nicht zeigen ALLES; es ist, als ob der Versuch noch nie aufgetreten. Das ist frustrierend, denn es bedeutet, dass ich nicht einmal eine Fehlermeldung aus zu arbeiten. Nur ein webserver passiv-aggressiv erzählte mir, zur Hölle zu gehen.

Ich habe versucht, die Erzeugung/Installation von meinem eigenen client-Zertifikat manuell durch die PHP OpenSSL-Erweiterung. Das Zertifikat problemlos installiert, aber ich kann nicht finden alle Informationen auf, wie ordnen Sie das Zertifikat mit dem server (vorausgesetzt, ich sogar müssen?). Auch, es scheint nicht eh egal, da der Apache noch nicht einmal die Anforderung eines client-Zertifikats, wenn der optionale eingestellt ist. Und falls erforderlich eingestellt ist, es ist einfach explodiert, ohne Erklärung. Ich brauche es auf optional gesetzt werden, jedenfalls für dieses schema zu arbeiten.

Die Umwelt

OS: CentOS 5.7 64-bit (in VirtualBox)

Apache: 2.2.3

PHP: 5.3.10

Ich vermute, Sie brauchen mehr info, um mir zu helfen, so Fragen Sie bitte an! Ich versorge Euch mit dem, was Sie brauchen.

Zusammen zu fassen, ich muss wissen, wie man den Apache zum anfordern eines SSL-client-Zertifikat, da die Bedingungen wie oben beschrieben. Auch, wenn es irgendwelche speziellen Unterzeichnung/etc, was getan werden muss, um das client-Zertifikat "kompatibel" mit dem server-Zertifikat (wieder, OHNE dies manuell über die shell für jeden client-cert!), Ich muss das auch wissen.

Ich bin zu 100% fest auf dieser, wie jetzt. Kann nicht finden, was auch nur entfernt hilfreich, auf Google. Jede Hilfe Sie bereitstellen können, auf das wäre ENORM geschätzt!! Danke! =)

Ist jedes client-Zertifikat erstellt wird self-signed? Oder wussten Sie, erstellen Sie Ihre eigene ZERTIFIZIERUNGSSTELLE zum signieren der erzeugten Anfragen? Der Kunde wird nur aufgefordert, Sie für ein Zertifikat, wenn Sie eine haben installiert, ist unterzeichnet von einer vertrauenswürdigen Zertifizierungsstelle (bestimmt durch die server-truststore). Wenn jeder client-cert ist selbst-signiert, müssen Sie jede dieser erzeugten certs werden in die server-truststore, was nicht machbar wäre.
Ich habe versucht, erstellen Sie eine client-cert auf dem server, die openssl verwenden, exportieren als p12, dann installieren Sie in Firefox, aber jetzt bin ich immer einen "unable to get local issuer certificate" - Fehler vom Apache. Ich habe das client-Zertifikat unter Verwendung durch das server-Zertifikat, also warum funktioniert das nicht? Ich habe versucht, uncommenting die SSLCACertificateFile-line-in ssl.conf, aber dann, gerade wieder bei mir um das erste problem, das war die Seite geladen ist in Ordnung, aber ohne zu erkennen, das client-Zertifikat. Also nochmals, ich bin wieder auf Platz eins....

InformationsquelleAutor Kris Craig | 2012-04-20

Schreibe einen Kommentar