CA-Rootzertifikat unter Linux und Windows importieren

Obwohl das Betreiben einer eigenen CA (Certification Authority) in den meisten Fällen weder notwendig noch ratsam ist, gibt es auch Ausnahmen: Wenn z.B. Unternehmens-interne Dienste abgesichert werden sollen, kann es einfacher / sicherer oder sogar erforderlich sein, selbst signierte Zertifikate einzusetzen. Während meiner Beschäftigung bei der ADITO Software GmbH habe ich ein Tool zur Verwaltung von X.509-Zertifikaten im Unternehmensumfeld entwickelt. Nachdem erste Tests und das Aufsetzen der Produktivumgebung erfolgreich waren, galt es nun, das Root-Zertifikat der eigenen CA auf die Windows- und Linuxrechner der Mitarbeiter zu verteilen. Weil der Vorgang (vor allem in Hinblick auf die Akzeptanz bei Webbrowsern) nicht ganz trivial ist, habe ich ein kleines HowTo auf GitHub veröffentlicht. Hier will ich den Prozess noch einmal in deutscher Sprache erklären.

Im folgenden gehe ich davon aus, dass die Zertifikats-Datei root.cert.pem heißt.

Linux

System (Debian / Ubuntu)

Die Installation des Rootzertifikats auf dem Linux-System ist mit wenigen Kommandos erledigt:

sudo mkdir /usr/local/share/ca-certificates/extra
sudo cp root.cert.pem /usr/local/share/ca-certificates/extra/root.cert.crt
sudo update-ca-certificates

Über die Root CA ausgestellte Zertifikate sollten nun von System-nahen Tools wie z.B. get, curl und anderen akzeptiert werden. Die meisten Webbrowser hingegen erkennen die Root CA nach einem Import ins System nicht an…

System (Fedora)

Unter Fedora Linux gestaltet die sich Installation etwas anders:

sudo cp root.cert.pem /etc/pki/ca-trust/source/anchors/
sudo update-ca-trust

Browser (Firefox, Chromium, …)

Eine manuelle Installation des Zertifikats ist auch über die Einstellungen erreichbar. Etwa für Firefox: “Einstellungen” => “Datenschutz und Sicherheit” => “Zertifikate anzeigen” => “Zertifizierungsstellen” => “Importieren” (Ähnlich unter Chromium)

Webbrowser wie Firefox, Chromium, Chrome, Vivaldi, aber auch der Mailclient Mozilla Thunderbird nutzen standardmäßig nicht den Truststore des Linux-Systems, sondern stützen sich auf eigene Truststores. Diese Truststores liegen in Form von Datenbank-Dateien im persönlichen Verzeichnis des jeweiligen Benutzers vor. Die Datenbank-Dateien heißen “cert8.db” und “cert9.db” und können mit dem “certutil”-Tool ergänzt werden. Dazu muss unter Ubuntu und Debian das “libnss3-tools”-Paket installiert werden:

sudo apt install libnss3-tools

Über ein kleines Script kann man die Truststore-Datenbanken finden und jeweils die eigene Root-CA darin bekannt machen:

#!/bin/bash

### Script installs root.cert.pem to certificate trust store of applications using NSS
### (e.g. Firefox, Thunderbird, Chromium)
### Mozilla uses cert8, Chromium and Chrome use cert9

###
### Requirement: apt install libnss3-tools
###


###
### CA file to install (customize!)
###

certfile="root.cert.pem"
certname="My Root CA"


###
### For cert8 (legacy - DBM)
###

for certDB in $(find ~/ -name "cert8.db")
do
    certdir=$(dirname ${certDB});
    certutil -A -n "${certname}" -t "TCu,Cu,Tu" -i ${certfile} -d dbm:${certdir}
done


###
### For cert9 (SQL)
###

for certDB in $(find ~/ -name "cert9.db")
do
    certdir=$(dirname ${certDB});
    certutil -A -n "${certname}" -t "TCu,Cu,Tu" -i ${certfile} -d sql:${certdir}
done

Nach Ausführung des Scripts und einem Neustart der verwendeten Webbrowser wird das Root-Zertifikat von Firefox, Chromium, Chrome und Vivaldi anerkannt.

Windows

System

Die Installation des Root-Zertifikats auf einem Windows-Rechner kann manuell oder - falls vorhanden - über das Active Directory erfolgen. Ich werde hier nur auf die manuelle Installation eingehen.

Damit Windows die Zertifikatsdatei als solche erkennt, wird die Dateiendung von .pem zu .crt geändert und die Datei geöffnet. Im darauf folgenden Fenster wird “Zertifikat installieren” gewählt. Das Root-Zertifikat kann dann entweder System-weit oder nur für den aktuellen Benutzer in “Vertrauenswürdige Root-Zertifizierungsstellen” importiert werden.

Der folgende Screencast veranschaulicht die Installation:

Unter Windows nutzen die üblichen Webbrowser den Windows-eigenen Truststore - mit einer Ausnahme: Mozilla Firefox …

Mozilla Firefox

Firefox vertraut (wie auch unter Linux) nur den Zertifikaten, die er selbst mitbringt. Man kann das Root-Zertifikat nun entweder manuell über die Firefox-Einstellungen importieren, oder die Experimentelle Unterstützung des Windows-Truststores aktivieren:

Dazu wird im Firefox-Installationsverzeichnis unter C:\Program Files (x86)\Mozilla Firefox\defaults\pref eine neue Javascript-Datei firefox-windows-truststore.js mit folgendem Inhalt angelegt:

/* Enable experimental Windows trust store support */
pref("security.enterprise_roots.enabled", true);

Beim nächsten Browser-Neustart vertraut auch Firefox der eigenen CA, wenn diese zuvor ins System importiert wurde.