Howto: Webserver-Login mit Client-Zertifikaten

CA (certification authority) erstellen

openssl genrsa -des3 -out ca.key 4096
openssl req -new -x509 -days 1365 -key ca.key -out ca.crt

Client-Zertifikat

Client-Zertifikat erstellen

openssl genrsa -des3 -out client.key 4096
openssl req -new -key client.key -out client.csr

Client-Zertifikat signieren

openssl x509 -req -days 365 -in client.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out client.crt

Client-Zertifikat nach PKCS12 umwandeln

openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.p12

Client-Zertifikat in Browser importieren

Firefox

Einstellungen -> Erweitert -> Zertifikate -> Anzeigen (Öffnet neues Fenster “Zertifikat-Manager”)

Zertifikat-Manager -> Ihre Zertifikate -> Importieren

Chrome

chrome://settings/certificates -> Your Certificates -> Import

Webserver

CA-Zertifikat einbinden

<IfModule mod_ssl.c>
    <VirtualHost _default_:443>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
        SSLEngine on
        SSLCertificateFile  /etc/ssl/certs/ssl-cert-snakeoil.pem
        SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key

        # Diese 3 Zeilen einfügen:
        SSLCACertificateFile /etc/apache2/ssl/ca.pem
        SSLVerifyClient optional
        SSLOptions +FakeBasicAuth +StdEnvVars

        <Location />
            AuthType basic
            AuthName "private area"
            AuthBasicProvider  file
            AuthUserFile /etc/apache2/ssl/htpasswd
            Require  valid-user
        </Location>
    </VirtualHost>
</IfModule>

Apache

Zugangsbeschränkung, Authentifizierung mittels Client-Zertifikat

Apache

Der User-Name besteht aus dem gesamten ‘Subject’ des Client-Zertifikates

openssl x509 -noout -in client.crt -subject | cut -d" " -f2-

Das Passwort ist einfach ‘password’

Den entsprechenden ‘htpasswd’-Eintrag kann man sich so anschauen:

htpasswd -b -n "$(openssl x509 -noout -in client.crt -subject | cut -d" " -f2-)" password

Um den User in die ‘htpasswd’-Datei einzufügen, kann man z.B. folgendes tun:

htpasswd -b /etc/apache2/ssl/htpasswd "$(openssl x509 -noout -in client.crt -subject | cut -d" " -f2-)" password