Importer des certificats CA dans Windows

Objectif

Mettre en place un moyen simple d’importer des certificats CA (autorité de certification) dans les différents magasins de Windows, en utilisant un fichier batch. L’utilisateur est supposé ne pas avoir les droits d’administrations. Les commandes utilisées devront donc respecter cette contrainte.
Ce premier article concerne le magasin de Windows

Importation du certificat

Le système dispose d’une commande permettant de manipuler les magasins de certificat : certutil.
Il n’est pas très convivial et sa syntaxe pas toujours évidente.
Pour ne pas être confronté au problème des droits Administrateurs, on va utiliser le magasin d’autorité de certification de l’utilisateur. La commande pour importer le certificat est alors :

certutil -f -user -addstore root <fichier_certificat>

où :

  • -f Permet d’ignorer l’erreur si le certificat est déjà installé.
  • -user : pour mettre e certificat dans le magasin utilisateur (et pas celui système qui nécessite des droits Administrateur)
  • -addstore root : pour ajouter dans le magasin des autorités de confiance

Vérification si le certificat est présent

Si on souhaite vérifier si le certificat est déjà installé on utilise son numéro de série. On l’extrait du fichier contenant le certificat, puis on le compare avec les numéros de série déjà présents dans le magasin.
Pour extraire le numéro de série, il faut convertir le certificat , qui est en base 64, dans un format compris par certuil :

set TEMPO=fichier_temp.txt
IF EXIST %TEMPO% del %TEMPO%
certutil -decode "certificat.cer" "%TEMPO%"

certificat.cer est dans cet exemple le nom du fichier certificat.
Après ces commande, le fichier %TEMPO% contient le certificat dans un format utilisable par certutil. On procède alors à l’extraction du numéro de série du certificat :

FOR /F "tokens=4" %%A IN ('certutil %TEMPO% ^| findstr /r /c:"ro de s.rie.:"') do set NUMSERIE=%%A
echo Numéro de série du certificat : %NUMSERIE%

Remarque 1:
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.
Pour tester la commande dans une console, il faut alors utiliser :

FOR /F "tokens=4" %A IN ('certutil %TEMPO% ^| findstr /r /c:"ro de s.rie.:"') do set NUMSERIE=%A
echo Numéro de série du certificat : %NUMSERIE%

Remarque 2:
Dans le filtre findstr, on est obligé de remplacer les caractères accentués par ‘.’, ces derniers n’étant en effet pas supportés.

On recherche ensuite si le certificat est présent dans le magasin de l’utilisateur :

certutil -user -store root | findstr %NUMSERIE% > nul
IF %ERRORLEVEL% == 0 goto Certificat_Win_OK

Dans ce test, si %ERRORLEVEL% vaut 0, c’est que le numéro de série existe dans la base de l’utilisateur, donc que ce certificat est déjà installé.
Sinon il ne l’est pas.

Script pour Windows

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 Windows
rem
rem 17-09-2014 : FL Création
rem
echo ====================================================
echo + Importation du certificat %1 +
echo ====================================================
echo.
SETLOCAL
set TEMPO=fichier_temp.txt
IF EXIST %TEMPO% del %TEMPO%
certutil -decode "%1" "%TEMPO%" > nul
FOR /F "tokens=4" %%A IN ('certutil %TEMPO% ^| findstr /r /c:"ro de s.rie.:"') do set NUMSERIE=%%A > nul
echo Numéro de série du certificat : %NUMSERIE%
certutil -user -store root | findstr %NUMSERIE% > nul
IF %ERRORLEVEL% == 0 goto Certificat_Win_OK
certutil -f -user -addstore root "%1"
echo Importation effectuée.
goto fin
ENDLOCAL
:Certificat_Win_OK
echo Certificat déjà Installé.
:fin
Posts relatifs

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="">