Debian & Zertifikate
Normalerweise fährt man ganz gut mit dem, was Systeme beziehungsweise Browser so an Zertifikaten mitbringen und kennen. Aber manchmal reicht das nicht aus…
Nehmen wir folgendes Beispiel:
echo -n Q | \
openssl s_client -servername example.com -connect example.com:443 | \
openssl x509 -noout -dates
[...]
verify error:num=2:unable to get issuer certificate
[...]
Unable to get issuer certificate beziehungsweise SEC_ERROR_UNKNOWN_ISSUER bedeuten soviel wie: “Ich vertraue diesem Zertifikat nicht, weil das Aussteller-Zertifikat unbekannt ist. Ich kann so nicht sicherstellen, dass der Aussteller vertrauenswürdig ist. Ich rate dir deshalb vom Besuch dieser Webseite ab.”
So erfordert es so manche Umgebung, eine eigene CA hinzuzufügen. Eigentlich ist das gar nicht so schwierig, aber ich notiere hier trotzdem mal ein paar Eckdaten – für mich, aber vielleicht sind sie jemandem da draußen ebenfalls nützlich.
Debian
Unter Debian (und das dürfte Debian-Abkömmlinge wie Ubuntu ebenfalls einschließen) finden eigene Zertifikate unter /usr/local/share/ca-certificates/ ihren Platz. Ich bin nun darauf angewiesen, für meine Umgebung eine eigene Example-CA hinzuzufügen, dafür erstelle ich im Sinne der Übersichtlichkeit einen entsprechenden Ordner:
mkdir /usr/local/share/ca-certificates/Example-CA && cd $_
Anschließend muss das Root-Zertifikat, im Beispiel heißt es example_root.crt, in diesen Ordner. Dabei ist zu beachten, dass Debian an dieser Stelle X509-Zertifikate der Form PEM erwartet. PEM ist das am weitesten verbreitete Format, die Dateien weisen üblicherweise die Endung cer, crt oder pem auf. Damit der Aufruf von update-ca-certificates (s.u.) das Zertifikat aber auch wirklich hinzufügt, muss es die Endung .crt aufweisen!
Da mein Root-Zertifikat als DER (binäre Form) vorlag, musste ich es zuerst konvertieren.
file example_root.der
example_root.der: Certificate, Version=3 Certificate, Version=01
openssl x509 -inform der \
-in example_root.der \
-out example_root.crt
file example_root.crt
example_root.crt: PEM certificate
Liegt es an Ort und Stelle, weist du Debian mit einem simplen Kommando dazu an, es in seinen Trusted Root Certificate Store zu laden:
sudo update-ca-certificates
Updating certificates in /etc/ssl/certs...
1 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
Solltest du es wieder vom System entfernen wollen, geht das folgendermaßen:
rm /usr/local/share/ca-certificates/Example-CA/example_root.crt
sudo update-ca-certificates --fresh
Clearing symlinks in /etc/ssl/certs...
done.
Updating certificates in /etc/ssl/certs...
141 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
Damit schlägt nun der eingangs erwähnte openssl-Aufruf nicht mehr fehl: auch cURL, wget & Co. sind auf diese Art nun zufrieden. Meine Browser hingegen meckerten allerdings nach wie vor.
Browser, Mail-Clients, eToken
Sobald ich meine Webseite im Browser aufrief, erhielt ich eine SEC_ERROR_UNKNOWN_ISSUER-Meldung. Das lag daran, dass mein Browser das Zertifikat nach wie vor nicht kennt; Browser (und auch Mail-Clients) verwenden häufig ihren eigenen Trust Store. Bedeutet: hier muss man das Root-Zertifikat gesondert importieren. Üblicherweise führt der Weg hierzu über Settings => Privacy & Security => Certificates. Im Zweifel konsultiere das RTFM der von dir verwendeten Software.
Eine Besonderheit ergab sich für mich aus der Verwendung eines eTokens im Firefox1: obgleich die benötigten Zertifikate auf dem Token enthalten und im Browser verfügbar sind, warf er dennoch die SEC_ERROR_UNKNOWN_ISSUER-Meldung. Es dauerte eine Weile, bis ich verstand, dass ich hier explizit angeben musste, dass dieses Zertifikat genutzt werden darf, um Webseiten zu identifizieren. Hierzu musste ich zu Settings => Privacy & Security => Certificates navigieren, das entsprechende Zertifikat auswählen, die Schaltfläche Edit Trust… betätigen und ein Häkchen setzen bei This certificate can identify websites.

Danach funktionierte der Aufruf der Webseite ohne weitere Warnmeldungen. Klick auf das kleine Bügelschloss ergibt lediglich den Hinweis, dass diese Verbindung auf eine Art gesichert ist, die Mozilla selbst nicht kennt – und das ist ja so auch sachlich richtig 😎
Falls du also auch einmal vor dieser Herausforderung stehen solltest: vielleicht helfen meine Notizen dir ja weiter.
Im Chromium-basierten Browser verwende ich das Token nicht, deshalb kann ich hier keine Aussage treffen. ↩︎
Hinterlasse einen Kommentar
Ich freue mich über jeden Kommentar, es sei denn, er ist blöd.
Deshalb sind die Kommentare auf dieser Seite auch generell moderiert.