Importer des certificats CA dans Firefox

Importation du certificat

Le magasin de certificat de Firefox se manipule à l’aide d’un utilitaire téléchargeable sur le site de Firefox, certutil.exe.
Il n’est pas disponible sous forme de binaires, et il a le même nom que l’utilitaire de Windows. En cherchant sur le net, j’ai récupéré des binaires que j’ai complété, car tous les fichiers ne sont pas disponibles ensembles.
Enfin, j’ai renommé l’exécutable certff.exe pour éviter d’avoir des conflits de nom avec l’outil système.
L’ensemble est disponible en téléchargement su ce blog :  fichier   http://blogf.leunens.fr/wp-content/uploads/2014/09/certutil-firefox.zip.
Il faut décompresser l’archive, et laisser dans le même répertoire l’exécutable ainsi que ses dll.

Le magasin de certificats se trouve dans un sous-répertoire du répertoire Profile de Firefox. Ce sous-répertoire a un nom composé en deux parties :

  • Une zone aléatoire générée à l’installation du navigateur
  • la chaîne de caractère « .default »

Par exemple :

oc65kbbo.default

A l’intérieur se trouve le fichier cert8.db qui est le magasin en lui même.
Cela donne en final la chaine :

%APPDATA\mozilla\Firefox\Profile\oc65kbbo.default\cert8.db

Comme une partie du nom du répertoire n’est jamais la même sur toutes les machines, il faut trouver un moyen de l’identifier. On utilise pour cela la commande :

FOR /F "tokens=*" %%A IN ('dir /B %APPDATA%\Mozilla\Firefox\Profiles\*.default') DO .....

qui va chercher tous les sous-répertoires de Profiles qui se terminent par .default.

Remarque :
Dans la syntaxe DOS, dans un fichier BAT, il faut utiliser %%A dans une boucle FOR, mais dans une ligne de commande il faut utiliser %A.

La commande pour importer le certificat est alors :

certff.exe -A -n mon_alias  -t "TCu,TCu,TCw" -d "%APPDATA%\Mozilla\Firefox\Profiles\oc65kbbo.default" -i <fichier_certificat>

Où :

  • -A : demande d’ajout du certificat
  • -n : alias du certificat
  • -t : droits associé au certificat
  • -d : indique le répertoire parent du fichier cert8.db
  • -i : nom du fichier certificat.

En combinant les deux morceaux du dessus, la commande finale devient :

FOR /F "tokens=*" %%A IN ('dir /B %APPDATA%\Mozilla\Firefox\Profiles\*.default') DO
   certff.exe -A -n mon_alias  -t "TCu,TCu,TCw" -d "%APPDATA%\Mozilla\Firefox\Profiles\%%A" -i <fichier_certificat>

Remarque : La commande est mise sur deux lignes pour plus de lisibilité, mais doit être en réalité sur une seule.

Vérification si le certificat est présent

Si on souhaite vérifier si le certificat est déjà installé on utilise son alias. Si on base l’alias sur le nom du fichier contenant le certificat, on peut alors facilement vérifier sa présence ou non.
On définit une variable %CERT_ALIAS% basée sur le nom du fichier sans son extension :

FOR /F "delims=.;" %%a in ("%1") do set CERT_ALIAS=%%a

(%1 est ici un nom de fichier passé en paramètre du script).
Puis on exécute une commande très proche de l’ajout, qui  va demander à lister le contenu du magasin, puis à y rechercher l’alias :

FOR /F "tokens=*" %%A IN ('dir /B %APPDATA%\Mozilla\Firefox\Profiles\*.default') DO
 certff.exe -L -d "%APPDATA%\Mozilla\Firefox\Profiles\%%A" | findstr %CERT_ALIAS%

en sortie de commande, si %ERRORLEVEL% vaut 0, c’est que l’alias existe dans la base de l’utilisateur, donc que ce certificat est déjà installé.
Sinon il ne l’est pas.

Script pour Firefox uniquement

A l’aide des éléments ci-dessus, voici un script qui combine l’ensemble et permet d’importer le certificat qui est passé en paramètre, si ce dernier n’est pas déjà présent dans le magasin de l’utilisateur :

@echo off
rem Script d'importation du certificats d'autorité racine 
rem dans le magasin Firefox
rem rem 17-09-2014 : FL Création
rem echo ====================================================
echo + Importation du certificat %1 +
echo ====================================================
echo.
SETLOCAL
rem -------------------------------------------------
rem Vérification de la présence de Firefox
rem -------------------------------------------------
echo.
IF NOT EXIST %APPDATA%\Mozilla goto non_Firefox
echo Firefox présent
set CERT_NAME=%1
rem Alias du certificat = nom du fichier sans l'extension
FOR /F "delims=.;" %%a in ("%1") do set CERT_ALIAS=%%a
FOR /F "tokens=*" %%A IN ('dir /B %APPDATA%\Mozilla\Firefox\Profiles\*.default') DO certff.exe -L -d "%APPDATA%\Mozilla\Firefox\Profiles\%%A" | findstr %CERT_ALIAS% > nul
IF %ERRORLEVEL% == 0 goto Certificat_Firefox_OK
FOR /F "tokens=*" %%A IN ('dir /B %APPDATA%\Mozilla\Firefox\Profiles\*.default') DO certff.exe -A -n %CERT_ALIAS% -t "TCu,TCu,TCw" -d "%APPDATA%\Mozilla\Firefox\Profiles\%%A" -i %CERT_HOME%\%CERT_NAME%
ENDLOCAL
echo Importation effectuée.
goto fin
:Certificat_Firefox_OK
echo Certificat pour Firefox déja installé.
goto fin
:non_Firefox
echo --------------------------------------------------
echo Erreur ! Pas d'installation de Firefox trouvée.
echo --------------------------------------------------
exit 1
:fin
Posts relatifs
  1. Merci pour ce partage.
    Enfin une méthode qui fonctionne.
    Par contre attention à la variable %CERT_HOME% qui n’est pas reconnue car non déclarée dans le script.

    • exact !
      Ce script est extrait d’un script plus général, et j’ai oublié de reporter la déclaration de variable.
      Je corrigerai cela à l’occasion.
      Merci.

  2. Importer des certificats CA dans Firefox

    je n’arrive pas a bien saisir votre script..

    pouvez-vous m’aider?

    • Bonjour,
      Quelle partie ne vous semble pas claire ?
      Le principe est le suivant :
      – On vérifie que Firefox est bien Installé.
      – On récupère la variable passé en paramètre, sans son extension (nom du certificat)
      – On vérifie si le certificat est déjà installé ou pas (partie avec le findstr)
      – S’il n’est pas déjà installé, alors on l’installe.
      Attention, comme précisé dans un commentaire précédent il manque dans le script donné ici la déclaration de la variable %CERT_HOME% dans la commande d’installation du certificat. Je vais procéder à la correction, comme indiqué ce script est un extrait d’un script beaucoup plus général sur la gestion de certificats sous Windows.

      Fabrice

  3. Bonjour,
    Excellent !!
    Enfin un script « simple », et qui fonctionne sans faire une usine à gaz.
    Avec quelques petites adaptations, mon certificat pour le proxy s’est bien installé sur mes 600 pc 😎 😀
    MERCI

  4. Hello Fabrice, j’aurais besoin d’un petit coup de main pour quelque chose que je suis en train de mettre en place par rapport à l’importation de certificat dans Firefox.

    En gros, je dois « pousser » un certificat vers toutes les stations de mon parc utilisant Firefox. Le tout avec des utilisateurs ayant un profil itinérant.

    Pourrais tu m’aider à adapter la solution que tu donnes plus haut ?

    Merci d’avance.

    • Bonjour Florian,
      Une solution basique, mais qui est à envisager si tu ne l’as pas fait, c’est d’envoyer un mail à tes utilisateurs avec
      * soit le script en demandant aux utilisateurs de l’exécuter
      * soit un lien qui pointe sur le script dans un site intranet.
      Ca n’est pas automatique, mais ça règle pas mal de soucis, à peu de sueur, notamment par rapport à l’itinérance.
      Fabrice

  5. Bonjour Fabrice,
    Super script, mais sais tu s’il existes un argument particulier pour indiquer à certutil de déployer le certificat dans l’onglet « Autorité » et non dans l’onglet « Serveur » ?
    Merci par avance

  6. Bonjour et bravo pour ton script. Cependant, j’ai une erreur :
    certff.exe: could not obtain certificate from file: security library: improperly
    formatted DER-encoded message.
    Tu sais à quoi cela est du ?

    Jerome

Laisser un commentaire


NOTE - Vous pouvez utiliser les éléments et attributs HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre lang="" line="" escaped="" cssfile="">