Authentifizierung über Client-Zertifikate
Client Zertifikate als Ersatz für Benutzername und Passwort.
Client-Zertifikate lassen sich als Ersatz/Zusatz für den klassischen Login verwenden.
Voraussetzung für den Einsatz dieser Zertifikate ist eine über HTTPS verschlüsselte Verbindung.
Zum Erstellen der Client-Zertifikate wird ein Root-Zertifikat benötigt.
Dies kann ein selbst erstelltes oder z.B. das Webserver-Zertifikat sein.
Mit den folgenden Befehlen kann ein Client-Zertifikat erstellt und signiert werden.
openssl genrsa -des3 -out user.key openssl req -new -key user.key -out user.req openssl ca -cert /pfad/zum/serverzertifikat.crt -keyfile /pfad/zum/serverzertifikat.key -out user.crt -in user.req
Damit das soeben erstellte Zertifikat genutzt werden kann, muss es meist in das PKCS#12 Format umgewandelt werden.
Dafür kann folgender Befehl verwendet werden:
openssl pkcs12 -export -inkey user.key -name "user" -in user.crt -certfile /pfad/zum/serverzertifikat.crt -out user.p12
Im nächsten Schritt muss nun die Webserver Konfiguration angepasst werden.
Hier als Beispiel mit dem Apache Webserver:
<VirtualHost *:443> ... SSLCACertificateFile /pfad/zum/serverzertifikat.crt SSLVerifyClient require|optional SSLVerifyDepth 1 SSLOptions +StdEnvVars ... </VirtualHost>
Zu den SSLOptions kann zusätzlich noch “+ExportCertData” hinzugefügt werden. Dann steht das Zertifikat auch in PHP zur Verfügung.
Zuletzt muss das Client-Zertifikat noch in den Browser importiert werden.
In Google Chrome wird das unter folgenden Seite importiert:
Optionen -> Details -> HTTPS -> Zertifikate
Das Client-Zertifikat wird nun den Server gesendet.
In PHP lässt sich über die $_SERVER
Variable auf die Zertifikatsdaten zugreifen.