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.