Wer die „lästigen“ Dubletten im certs-Verzeichnis loswerden möchte, dem möchte ich im folgenden eine Schritt-für-Schritt-Anleitung anbieten.

Eine WICHTIGE Anmerkung vorweg:

Es gibt in /usr/local/ssl/certs eventuell Zertifikatsduplikate die NICHT gelöscht werden dürfen; es handelt sich um die lokalen Zertifikate des eigenen Servers, z. B.

  • apache.pem
  • exim.pem
  • ipop3d.pem
  • imapd.pem
  • pure-ftpd.pem

eventuell weitere, die oft als Kopie eines vorhandenen Serverzertifikats oder als Link darauf angelegt wurden, statt für jeden lokalen Dienst ein eigenes Zertifikat anzulegen.

Und natürlich auch nicht das lokale ca.pem.

Bevor man sich ans Werk begibt, erstmal in Ruhe durchlesen.

Nun gehts los:

1. Update auf diese neue Version des certs-Paketes (>= 1.3.3)

2. Download des Mozilla-CA-Bundles über den Menüpunkt „Download ca certificate bundle“ im certs-Menü.

3. Vorsichtige Naturen machen nun eine Kopie des Verzeichnisses /usr/local/ssl/certs.

4.

cd /root
/usr/bin/c_rehash /usr/local/ssl/certs 2> certdupes

Die Datei /root/certdupes enthält nun die Namen der Zertifikate, die nicht rehasht wurden, weil ein gleiches Zertifikat anderen Namens schon gehasht wurde, z. B.:

WARNING: Skipping duplicate certificate thawte.pem
WARNING: Skipping duplicate certificate thawte.pem
WARNING: Skipping duplicate certificate 12fa5cd4.pem
WARNING: Skipping duplicate certificate 12fa5cd4.pem

Jedes Duplikat taucht hierbei zweimal in der Liste auf.

Von diesen Zertifikaten löschen wir in einem ersten Schritt nur die Zertifikate, die genau 8 Zeichen vor dem „.“ haben und diese Zeichen sind 0-9 und a-f, also im obigen Beispiel 12fa5cd4.pem aus dem Verzeichnis /usr/local/ssl/certs.

thawte.pem passt nicht auf das Namensschema wird also nicht gelöscht, allerdings wird es noch ein weiteres Zertifikat gleichen Inhalts geben, dass wir möglicherweise loswerden wollen (Schritt 5).

Anstatt die Duplikate einzeln manuell zu löschen, können wir die Duplikatsliste certdupes auch in ein bash-Skript verwandeln, welches uns die Löscharbeit abnimmt:

Wir editieren nun die Datei certdupes:

Als erste Zeile „#!/bin/sh“ einfügen (ohne Anführungsstriche).

Alle Zeilen löschen, deren Zertifikate erhalten bleiben sollen.

„WARNING: Skipping duplicate certificate “ durch „rm /usr/local/ssl/certs/“ ersetzen z. B. durch „Search and Replace“ im mceditor. (wiederum ohne Anführungsstriche, aber zwingend das Leerzeichen hinter certificate, aber kein Leerzeichen am Ende des Ersetzungsstrings), so dass eine Löschzeile nun so aussieht:

rm /usr/local/ssl/certs/12fa5cd4.pem

Für Freunde der Kommandozeile hier nun ein sed-Kommando, um das „Search and Replace“ durchzuführen:

sed -i 's#WARNING: Skipping duplicate certificate #rm /usr/local/ssl/certs/#' certdupes

Anschließend machen wir das Script ausführbar und starten es: </code> chmod 0755 ./certdupes ./certdupes </code>

Anschließend rehashen wir erst mal wieder und löschen certdupes:

/var/install/bin/certs-update-hashes (Option 1 wählen)
rm certdupes

5. Nun sind noch die übrigen Duplikate an der Reihe, die zwar im Schritt 3 auch als Duplikate erkannt wurden, von denen wir aber das andere Gegenstück entfernen wollen.

Bei diesem Schritt kann es beim Mailversand und Mailabholung zu temporären Problemen kommen, da kurzzeitig die Hash-Links auf nicht mehr existierende Zertifikate verweisen können - einfach ignorieren.

cd /root

Folgender Code in eine Datei (z. B. finddupes) im Verzeichnis des Users root speichern und mit chmod 0755 ausführbar machen:

#!/bin/sh
files=`ls /usr/local/ssl/certs/*.pem`
for f in $files
do
    mdsum=`openssl x509 -in $f -noout -fingerprint -md5`
    echo "${mdsum} : ${f}"
done

Nun folgende Befehlszeile ausführen:

./finddupes | sort > certdupes

certdupes enthält nun z. B.:

MD5 Fingerprint=18:98:C0:D6:E9:3A:FC:F9:B0:F5:0C:F7:4B:01:44:17 : /usr/local/ssl/certs/certSIGN_ROOT_CA.pem
MD5 Fingerprint=1B:2E:00:CA:26:06:90:3D:AD:FE:6F:15:68:D3:6B:B3 : /usr/local/ssl/certs/e1fa5d90.pem
MD5 Fingerprint=1B:2E:00:CA:26:06:90:3D:AD:FE:6F:15:68:D3:6B:B3 : /usr/local/ssl/certs/ePKI_Root_Certification_Authority.pem

MD5 Fingerprint=1D:35:54:04:85:78:B0:3F:42:42:4D:BF:20:73:0A:3F : /usr/local/ssl/certs/AddTrust_External_Root.pem
MD5 Fingerprint=AA:8E:5D:D9:F8:DB:0A:58:B7:8D:26:87:6C:82:35:55 : /usr/local/ssl/certs/1af45ce.pem
MD5 Fingerprint=AA:8E:5D:D9:F8:DB:0A:58:B7:8D:26:87:6C:82:35:55 : /usr/local/ssl/certs/Juur-SK.pem
MD5 Fingerprint=AA:8E:5D:D9:F8:DB:0A:58:B7:8D:26:87:6C:82:35:55 : /usr/local/ssl/certs/Juur.pem

MD5 Fingerprint=AA:C6:43:2C:5E:2D:CD:C4:34:C0:50:4F:11:02:4F:B6 : /usr/local/ssl/certs/D-TRUST_Root_Class_3_CA_2_EV_2009.pem

Hier suchen wir nun die Zertifikate, die den gleichen Fingerprint aufweisen; wegen des sort-Befehls stehen die immer untereinander.

Von den Zertifikaten gleichen Fingerprints brauchen wir nur jeweils eines.

Wenn eines davon einen aussagekräftigen Namen das andere aber wieder nur aus genau 8 Zeichen (0-9, a-f) besteht, ist die Sache klar:

  • e1fa5d90.pem
  • ePKI_Root_Certification_Authority.pem

Hier wird e1fa5d90.pem aus /usr/local/ssl/certs gelöscht.

Bei den drei gleichen Zertifikaten

  • 1af45ce.pem
  • Juur-SK.pem
  • Juur.pem

kann 1af45ce.pem aus /usr/local/ssl/certs gelöscht werden.

Zwischen Juur-SK-pem und Juur.pem entscheiden wir uns nun anhand der Dateiliste des Mozillabundles (/usr/local/ssl/mozillabundle.txt).

Die Datei Juur-SK.pem taucht in der Bundleliste auf und bleibt stehen, Juur.pem wird gelöscht.

Gibt es keinen der Namen in der Mozilla-Bundleliste entscheidet man sich nach persönlichen Geschmack für oder gegen einen Dateinamen. Es handelt sich hierbei um Zertifikate, die selbst mal downgeloadet wurden oder aus dem alten ca-Bundle stammen. Aber auch von diesen reicht eines.

Nun wieder rehashen und certdupes entfernen:

/var/install/bin/certs-update-hashes (Option 1 wählen)
rm certdupes

6. Im certs-Menu rufen wir nun noch den Punkt „Update revocation list(s)“ auf (der braucht schon eine Weile - Ruhe bewahren).