in KSG-News

Zertifikate (mal wieder)

Firefox Sicherheits-Ausnahmeregel hinzufügen - Unbekannte Identität
valentin.d / Foter

So, ich habe meine Zertifikatsinfrastruktur mal etwas ausgemistet, erneuert und vor allem erweitert.

Was ist neu? Zum einen greifen nun alle Seiten meines vServers nur noch auf ein Zertifikat zurück. Dieses ist außerdem nicht mehr via Wildcard definiert, sondern hat für jede Domain und Subdomain einen SNI-Eintrag.

Die letzte große Neuerung ist eigentlich eine Vorbereitung. Ich habe es geschafft, dass man sich nun auch via CACert-Clientzertifikat authentifizieren kann.

Aber der Reihe nach.

SNI-Einträge

Um diese Einträge erzeugen zu können, musste ich meine /etc/ssl/openssl.cnf anpassen. Ich habe mich dabei größtenteils an die Anleitung von hier gehalten.

[cc lang=’text‘ line_numbers=’false‘]
[req]
req_extensions = v3_req

[ v3_req ]
subjectAltName = @alt_names

[alt_names]
DNS.1 = web.example.com
DNS.2 = dspl.example.com
DNS.3 = nprop.example.com
DNS.4 = webdir.example.com
DNS.5 = hpps.example.com
DNS.6 = remoteuser.example.com
DNS.7 = esm.example.com
DNS.8 = etsapprover.example.com
DNS.9 = ep.example.com
DNS.10 = cas.example.com
DNS.11 = wat.example.com
DNS.12 = ned.example.com
[/cc]

Anschließend habe ich einen neuen Schlüssel und ein Zertifikats-Request erstellt:

[cc lang=’bash‘ line_numbers=’false‘]
cd /etc/ssl
openssl req -new -x509 -extensions v3_ca -keyout private/server.key
openssl req -new -out certs/server.csr -key private/server.key
cat certs/server.csr
[/cc]

Das csr hab ich dann bei CAcert.org eingereicht und mein unterschriebenes Zertifikat erhalten. Dieses wurde dann in die /etc/ssl/certs/server.crt kopiert.

Anschließend mussten noch alle VirtualHosts angepasst werden:
[cc lang=’apache‘ line_numbers=’false‘]
SSLEngine on
SSLCertificateKeyFile /etc/ssl/private/server.key
SSLCertificateFile /etc/ssl/certs/server.crt
[/cc]

Zertifikatslogin

Eigentlich ist ja alles schon bei CACert selbst beschrieben.

[cc lang=’apache‘ line_numbers=’false‘]
## Client Verification
SSLVerifyClient optional
SSLVerifyDepth 3
SSLCADNRequestPath /usr/share/ca-certificates/cacert.org/

# error handling
RewriteEngine on
RewriteCond %{SSL:SSL_CLIENT_VERIFY} !=SUCCESS
RewriteRule .? – [F]
ErrorDocument 403 „You need a client side certificate issued by CAcert to access this site“
[/cc]

Natürlich mache ich bei einer solch einfachen Beschreibung auch meine Fehler. Wichtig: Man kann die Verifizierung des Clients bei bestimmten Browsern (Firefox z.B.) nicht über Location/Directory/Files erledigen. Man muss dafür immer einen eigenen VirtualHost erzeugen. Daher gibt es bei mir auch die neue Subdomain secure.stadtplan-ilmenau.de. Diese will ich in Zukunft für Logins in eine Adminumgebung des Stadtplans verwenden.