Das Verwalten von Certificate Authority (CA) Zertifikaten für jede Applikation, wie curl, wget, java, etc. ist aufwändig und mühsam. Zum Glück gibt es eine einfache Lösung wie man Zertifikate für das ganze System im systemweiten Truststore verwalten kann. Wenn du erfahren willst, wie man das macht und auf was man sich achten muss, dann ist dieser Blog-Eintrag genau das Richtige für dich.
Zertifikate zum Truststore hinzufügen
Standardmässig sind auf dem System bereits eine ganze Menge von Zertifikaten vorinstalliert. Diese kommen mit dem Packet ca-certificates
mit. Grundsätzlich gibt es zwei verschiedene Pfade, wo die eigenen Zertifikate im PEM-Format abgelegt werden können. Somit werden sie beim Generieren des Truststores berücksichtigt.
/usr/share/pki/ca-trust-source/anchors/
: Zertifikate im PEM-Format mit einer niedrigen Priorität/usr/share/pki/ca-trust-source/
: Zertifkate im erweiterten „BEGIN TRUSTED“ File Format mit einer niedrigen Priorität/etc/pki/ca-trust/source/anchors/
: Zertifikate im PEM-Format mit einer hohen Priorität/etc/pki/ca-trust/source/
: Zertifikate im erweiterten „BEGIN TRUSTED“ File Format mit einer niedrigen Priorität
Die eigenen Zertifikate sollte man also besser im/etc/pki/ca-trust/source/
ablegen, damit sie die höchste Priorität besitzen und bevorzugt werden.
Es können zusätzlich auch Zertifikate hinzugefügt werden, welchen man explizit nicht vertrauen möchte. Diese können in die folgenden beiden Pfade gelegt werden.
/usr/share/pki/ca-trust-source/blacklist/
/etc/pki/ca-trust/source/blacklist/
Löschen der vorinstallierten Zertifikate
Es kann sein, dass man den vorinstallierten Zertifikaten nicht vertraut und deshalb nur seine eigenen Zertifikate im Truststore haben möchte.
Dies ist möglich, indem man die vorinstallierten Zertifkate löscht. Dies ist jedoch keine empfohlene Konfiguration. Denn, falls ein System direkt nach aussen ins Internet kommuniziert, kann es dazu führen, dass Verbindungen nicht mehr aufgebaut werden können! So würde z.B. yum update
nicht mehr funktionieren.
bash
rm -f /usr/share/pki/ca-trust-legacy/ca-bundle.legacy.default.crt
Beachte: Bei einem Update oder Reinstallation des ca-certificates
Paket die Standard Zertifikate wieder installiert werden!
Anzeigen lassen des Truststores
Auf einem RHEL7 System kann der Truststore mit dem Kommando trust list
angezeigt werden und generiert einen Output wie diesen:
[root@localhost anchors]# trust list pkcs11:id=%d2%87%b4%e3%df%37%27%93%55%f6%56%ea%81%e5%36%cc%8c%1e%3f%bd;type=cert type: certificate label: ACCVRAIZ1 trust: anchor category: authority pkcs11:id=%f7%7d%c5%fd%c4%e8%9a%1b%77%64%a7%f5%1d%a0%cc%bf%87%60%9a%6d;type=cert ...
Auf einem RHEL6 System gibt es dieses Kommando jedoch nicht. Somit ist es etwas umständlicher die Zertifikate im Truststore anzeigen zu lassen. Man kann dies mit dem folgenden Workaround machen:
Für jeden generierten Truststore im Pfad /etc/pki/ca-trust/extracted/
das folgende Kommando ausführen, wobei die Input-Datei angepasst werden muss.
[root@localhost anchors]# awk -v cmd='openssl x509 -noout -subject' '/BEGIN/{close(cmd)};{print | cmd}' < /etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt unable to load certificate 140142916292976:error:0806F06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:703:Expecting: TRUSTED CERTIFICATE subject= /C=CH/O=My Company/CN=MY COMPANY Test CA 2 subject= /C=CH/O=My Company/CN=MY COMPANY CA 2
Truststore auf RHEL6 aktivieren
Möchte man den Truststore auf einem RHEL6 System verwalten, muss dieser zuerst aktiviert werden, indem man das Kommando ca-trust enable
absetzt. Dies sollte am besten gerade als erstes gemacht werden bevor man irgendwelche Zertifikate hinzufügt oder entfernt.
Testen
1. Wget einer internen Seite
[root@localhost anchors]# curl curl: (60) Peer's Certificate issuer is not recognized. More details here: http://curl.haxx.se/docs/sslcerts.html
2. Eigenes Zertifikat hinzufügen: cp my-ca-cert.crt /etc/pki/ca-trust/source/anchors/
3. Truststore neu generieren: update-ca-trust extract
4. Wget die gleiche interne Seite
[root@localhost anchors]# curl | head % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 5172 0 5172 0 0 30729 0 --:--:-- --:--:-- --:--:-- 30785
Alles in Kürze
1. (Auf Rhel6) Truststore aktivieren: update-ca-trust enable
2. Eigenes Zertifikat hinzufügen: cp my-ca-cert.crt /etc/pki/ca-trust/source/anchors/
3. (Optional) Standard Zertifikate löschen: rm -f /usr/share/pki/ca-trust-legacy/ca-bundle.legacy.default.crt
4. Truststore neu generieren: update-ca-trust extract
Weiterführende Links:
- https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/security_guide/sec-shared-system-certificates
- man pages von
update-ca-trust