Authentisierung mit Clientzertifikaten
Ziel des Seminarbeitrags war es, den Nutzen und die Nutzbarkeit von Clientzertifikaten zu untersuchen. Ferner sollte geprüft werden, ob und in welchem Rahmen sich Clientzertifikate am Modell der universitätsinstitutsübergreifenden Accountverwaltung verwenden lassen.
Passwörter
Das Konzept der Authentifizierung einer Person über geheimes Wissen (Passwort, PIN), das in der Erinnerung selbiger gespeichert ist, ist etabliert und durch verschiedene Ideen zur Wahl sicherer Passwörter verbessert worden. Nichtsdestotrotz gelangt das menschliche Gedächtnis aufgrund der Vielzahl von Zugangskonten, die eine Person heutzutage nutzt, sowie deren jeweils - im Idealfall - unterschiedlich gewählten Zugangsdaten, die durch die Gefahr eines Wörterbuchangriffs mittels schnellerer Rechentechnik eine immer größere Länge mit sich bringen müssen, an die Grenzen seiner Leistungsfähigkeit.
Aus diesem Grund ist es notwendig ein Medium größerer und konsistenterer Kapazität für die sichere Verwahrung von Identifikatoren zu verwenden.
Zertifikate
Allgemeines
Zertifikate sind digitale Nachweise spezifischer Eigenschaften von Subjekten, welche vom Aussteller des Zertifikates beglaubigt werden. Überprüft werden kann nur die Integrität, d.h. die Korrektheit des Zertifikates im Sinne der Nicht-Modifizierung selbigens und die Authentizität, also die Echtheit des Urhebers, sofern man dessen Identität bereits verifiziert hat. Den De-facto-Standard in der heutigen Kommunikationswelt stellen hierfür Zertifikate nach X.509, deren Funktionsweise mittels einer Public-Key-Infrastruktur sichergestellt wird.
Client-Zertifikate
== Certificate Revocation List (CRL)
Beispielimplementierung
In der Implementierung wurde eine Root Certificate Authority simuliert, welche Zertifikate an Intermediate-CAs ausstellt, welche daraufhin Benutzern mit den gewünschten Clientzertifikaten versorgen können. Der Nutzer muss lediglich das Zertifikat der RootCA und der clientzertifikataustellenden Intermediate-CA im Browser importiert haben, es muss also kein direktes Vertrauensverhältnis zwischen dem Client und anderen Intermediate-CAs bestehen, da diese anhand der Zertifikatskette die Authentizität des Clients verfizieren können.
Um die Funktion des Clientzertifikates zu überprüfen, wird für jeden Nutzer ein privater Ordner erstellt, auf den nur er mittels Authentisierung durch sein Zertifikat Zugriff besitzt.
Serverkonfiguration
Erstellung der Root-CA
Erstellung der Intermediate-CAs
Erstellung eines Clientzertifikats
Certificate Signing Request (CSR)
Damit ein Clientzertifikat von einer CA erstellt und signiert werden kann, muss der Nutzer einen Certificate Signing Request an die CA schicken, welche dann – nach Überprüfung der Angaben und Authentizität – dem Nutzer ein signiertes Zertifikat aushändigen kann.
Für einen CSR muss der Nutzer typischerweise die Informationen:
- Allgemeiner Name (CN)
- Organisation (O)
- Organisationseinheit (OU)
- Email-Adresse (E)
- Ort (L)
- Staat/Bundesland (ST)
- Land (C) angeben.
Signed Public Key and Challenge (SPKAC)
SPKAC ist ein von vielen Browsern unterstütztes Format um einen CSR und einen öffentlichen Schlüssel zu übermitteln. Hierbei wird der <keygen>-Tag verwendet, um clientseitig das Schlüsselpaar zu generieren. Die CA kann nun mit den Daten und dem öffentlichen Schlüssel des Nutzers eine .spkac-Datei erstellen welche folgendes Format hat:
SPKAC=Schlüssel CN=Allgemeiner Name emailAddress=Email-Adresse 0.OU=Organisationseinheit organizationName=Organisation countryName=Land stateOrProvinceName=Staat/Bundesland localityName=Ort
Dieser SPKAC kann dann mit folgendem (PHP)-Befehl von der CA signiert werden:
$command = "/usr/bin/openssl ca -config '".$dir."/openssl.cnf' -days ".$row['VALIDDAYS']." -notext -batch -key '".$password."' -spkac ".$dir.'/spkacs/'.$RID.'.spkac'; $output = shell_exec($command);
Probleme
Fehlende Benutzerakzeptanz
Handhabungsweise verschiedener Browser
Im Test hat sich gezeigt, dass verschiedene Browser unterschiedlich ausführliche Informationen an den Server übermitteln. So hat Firefox nur das erste Glied der Zertifikatskette übertragen, wohingegen Opera dem Server die komplette Kette bereitstellt. Dies ist dahingehend ein Problem, dass in unserem Beispiel-Setup mit Firefox nicht auf das Wurzelzertifikat überprüft werden konnte. In dem möglichen Anwendungsszenario müsste in dem Fall die Zertifizierungsstelle eines Instituts direkt den Zertifizierungsstellen anderer Institute vertrauen, sollte sich ein Benutzer mit einem Clientzertifikat authentifizieren wollen. Bei den von Opera übertragenen Daten hingegen würde eine Überprüfung auf die Wurzelzertifizierungsstelle der HU ausreichen.
Quellen
RFC 5246: The Transport Layer Security (TLS) Protocol Version 1.2
RFC 5280: Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile
[1] Verwendung des <keygen>-Tags mit PHP