In Firefox stellen Zertifikate eine zentrale Funktion der Sicherheitsinfrastruktur dar. Ein sauberes Management der Zertifikatsdatenbank ist daher wichtig. Mit dem folgenden Skript können CA Zertifikate automatisiert dem Firefox zugeführt werden. Die URLs können z.B. zu einer internen PKI führen. Das Skript erwartet die Zertifikate im PEM (Base64) Format.
#!/usr/bin/env bash umask 077 TMPDIR="/tmp/ff-certs" # Prefight checks for i in curl grep certtool certutil; do which "$i" > /dev/null 2> /dev/null if [ $? -ne 0 ]; then printf "%s not found in path, this error is fatal\n" "$i" exit 1 fi done # Download CA certificates URLS='https://ejbca.example.com/cacert?issuer=CN%3DRootCA-ECDSA%2CO%3DHonest+Achmet+CA%2CC%3DDE&level=0' URLS="$URLS https://ejbca.example.com/cacert?issuer=CN%3DRootCA-RSA%2CO%3DHonest+Achmet+CA%2CC%3DDE&level=0" if [ ! -d "$TMPDIR" ]; then mkdir "$TMPDIR" || exit 1 fi count=0 for i in $URLS; do CERT_FILE="cert.${count}.pem" curl --silent --insecure -lo "${TMPDIR}/${CERT_FILE}" "$i" let count=$count+1 done BASEDIR=~/.mozilla.XXX/firefox PF_DIRS=$(grep -i 'path=' "${BASEDIR}/profiles.ini" | awk -F= '{print $2}') for i in $PF_DIRS; do for n in cert8.db cert9.db; do if [ -f ${BASEDIR}/${i}/${n} ]; then find $TMPDIR -name "*.pem" | while read c; do CA_NAME=$(certtool --certificate-info --infile=$c | \
grep 'Subject:' | \
perl -pe 's/^\s+Subject:\s+.*CN=(\S+)$/$1/g') printf "Adding ${CA_NAME} to ${BASEDIR}/${i}/${n}\n" # if you want to delete a certificate, then use # certutil -D -n "${CA_NAME}" -d ${BASEDIR}/${i} certutil -A -n "${CA_NAME}" -t "TCu,Cuw,Tuw" -i ${c} -d ${BASEDIR}/${i} done fi done done rm -rf "$TMPDIR"
Alte CA Zertifikate sollten aus dem Firefox CA Store entfernt werden. Mit certutil -D -n "<Cert Name}" -d <Firefox Profil Verzeichnis> können diese Altlasten entfernt werden. Sofern nur interne oder handverlesene CA Zertifikate erwünscht sind, kann man mit
mv ~.mozilla/firefox//cert9.db ~.mozilla/firefox/cert9.db.BAK touch ~.mozilla/firefox/cert9.db
mit einem leeren Certstore anfangen und mit o.g. Skript die gewünschten Zertifikate eintragen.