Anmeldung über Zertifikate

Dieses Dokument ist eine Fortsetzung der Dokumentation meiner Schritt hin zu einer Zertifikatsbasierenden Zugriffskontrolle auf einen Webserver. Wie auch schon hier beschrieben: Use at your own risk. Diese Dokument erhebt nicht den Anspruch “richtig” zu sein.

Ein Client-Zertifikat ist eine “besondere” Datei auf einem Arbeitsplatz die zur Authentifizierung eines Besuchers dienen kann.

Diese Schritte basieren im wesentlichen auf diesen zwei Dokumenten.

Zuerst erstellen wir ein Benutzerzeritifikat und dann passen wir die Apache Konfiguration so an, das nur noch bestimmte Zertifikate auf ein Verzeichniss zugreifen können.

1. Generiere einen Key

cd $SSLDIR
openssl genrsa -des3 -out private/user-hagen-bauer.key 1024

2. Erstelle einen Signing Request

openssl req -new -key private/user-hagen-bauer.key -out certs/user-hagen-bauer.de.csr

openssl req -new -key private/user-hagen-bauer.key -out certs/user-hagen-bauer.de.csr
Enter pass phrase for private/user-hagen-bauer.key:
You are about to be asked to enter information that will be incorporated into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:DE
State or Province Name (full name) [Some-State]:NRW
Locality Name (eg, city) []:Meckenheim
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Hagen-Bauer-CA
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:Hagen Bauer
Email Address []:hagen.bauer@caserio.de
Please enter the following 'extra' attributes to be sent with your certificate request
A challenge password []:
An optional company name []:

3. Signiere den Request mit dem Zeritifikat der CA und erstelle ein Certifikat für den User

openssl ca -config openssl.conf -in certs/user-hagen-bauer.de.csr -out certs/user-hagen-bauer.de.cert
Using configuration from openssl.conf
Enter pass phrase for /root/CERT-AUTH/private/ca.key.pem:
Check that the request matches the signature
Signature ok
Certificate Details:
    Serial Number: 3 (0x3)
    Validity
        Not Before: Jun 29 11:08:08 2014 GMT
        Not After : Jun 29 11:08:08 2015 GMT
    Subject:
        countryName               = DE
        stateOrProvinceName       = NRW
        localityName              = Meckenheim
        organizationName          = Hagen-Bauer-CA
        commonName                = Hagen Bauer
        emailAddress              = hagen.bauer@caserio.de
Certificate is to be certified until Jun 29 11:08:08 2015 GMT (365 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

4. Konvertiere das Zertifikat in ein Format das von den Browsern verstanden wird

openssl pkcs12 -export -clcerts -in certs/user-hagen-bauer.de.cert -inkey private/user-hagen-bauer.key -out certs/user-hagen-bauer.de.P12

5. Importiere das Zertifikat im Broswer

Browser Import Zertifikat

6. Konfiguriere den Apache Web Server nur noch Verbindung zu aktezpieren die ein valides Zerrtifikat enthalten

vi /etc/apache2/sites-enabled/hagen-bauer-admin 

   SSLVerifyClient require
   SSLVerifyDepth  1
/etc/init.d/apache2 reload

Greift man dann mit seinem Webbrowser auf diese Seite zu dann wird man aufgefordert ein Zertificat auszuwählen.

Browser Cert

Browser ohne dieses Zertifikat bekommen eine SSL Fehlermeldung

Browser Cert