Zertifikate

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.