Page 1 sur 1

Creation de paquet pour installer des certificat dans le store windows

Posté : 18 juin 2021 - 17:06
par megs
Bonjour,

je tente de créer un paquet pour installer des certificats sur l'ensemble du parc.
dans la partie install je fait ceci:

Code : Tout sélectionner

CPath=r'C:\CERTIFMAAF'
ROOTlist=['IGCAACracineEtatfrancais.crt']
CINTList=['ACAGENTSAGRIALIMAUTONOME.crt',
          'ACAGENTSAVANCEE.crt',
          'ACAGENTSDDIAVANCEE.crt',
          'ACAGENTSDDISTANDARD.crt',
          'ACAGENTSSTANDARD.crt',
          'ACDISPOSITIFTECHNIQUE.crt',
          'ACDISPOSITIFTECHNIQUEDDI.crt',
          'ACPARTENAIRESAGRIALIMAUTONOME.crt',
          'ACPARTENAIRESAVANCEE.crt',
          'ACPARTENAIRESSTANDARD.crt',
          'ACRACINEAGRIALIMAUTONOME.crt',
          'ACRACINEMINISTEREENCHARGEDELAGRICULTURE.crt',
          'ACSERVEURSAGRIALIMAUTONOME.crt',
          'ACSERVEURSAVANCEE.crt',
          'ACSERVEURSDDISTANDARD.crt',
          'ACSERVEURSPARTENAIRESAGRIALIMAUTONOME.crt',
          'ACSERVEURSSTANDARD.crt',
          'ACUSAGERS.crt']

def install():
    if isdir(CPath):
        print('-- Déjà en place, on passe...')
    else:
        mkdirs (CPath)
        copytree2(r'.\CERTIFMAAF',CPath ,onreplace=default_overwrite)
        for cert in (ROOTlist):
            print (" Installing " + cert + " in Trusted Root CA Store.")
            cmd=r'certutil.exe -silent -addstore root {}\{}.crt'.format(CPath,cert)
            run_notfatal(cmd)
        for cert in (CINTList):
            print (" Installing " + cert + " in Trusted Intermediaries CA.")
            cmd=r'certutil.exe -silent -addstore ca {}\{}.crt'.format(CPath,cert)
            run_notfatal(cmd)
je n'ai aucune erreur( normal c'est en mode silent), sauf que les certificats ne s'installent pas.
Est ce un problème de droit? le compte ordinateur/systeme ne peut il pas intégrer de certificats ?
comment puis je m'y prendre pour que ca marche ?

Re: Creation de paquet pour installer des certificat dans le store windows

Posté : 21 juin 2021 - 15:45
par dcardon
Bonjour megs,

dans le code la substitution semble rajouter un .crt au nom du fichier qui contient déjà un .crt :

Code : Tout sélectionner

{}\{}.crt
L'agent WAPT exécute le contenu de la fonction def install() en compte Local System, il a donc les droits pour rajouter des certificats au store local. Par contre il faut faire attention en créant des répertoires à la racine (C:\CERTIFMAAF) sur les droits hérités pour éviter que d'autre que local system puisse écrire dedans. En fait il n'est pas nécessaire de faire une copie intermédiaire dans C:\CERTIFMAAF (si il y a pas d'autre appli qui ont besoin d'accéder aux .crt eux-mêmes) et on peut utiliser certutil directement depuis le répertoire d'installation du paquet WAPT.

Cordialement,

Denis

Re: Creation de paquet pour installer des certificat dans le store windows

Posté : 21 juin 2021 - 16:21
par megs
oui en effet, c'etait le vendredi soir donc bon... :roll: .
aussi les chemins sont nébuleux pour moi, et donc pas moyen de récupérer le bon chemin de certificat si je ne copie pas là ou je vais savoir a coup sûr ou ils sont. J'ai tenté le chemin .\CERTIFMAAF mais plouf... introuvable. :lol:

mais de toute façon ça ne change rien. Certutils ne fonctionne pas en appel de commande. ça passe avec powershell en revanche vu qu'il n'appelle pas un exécutable externe.

J'ai donc compilé plus simple et utilisable pour tout le monde ( Win 7 non testé ). vous pouvez vous en inspirer si vous le souhaitez. testé fonctionnel win10. WAPT 1.8.2. linux core version.

Code : Tout sélectionner

from setuphelpers import *
import os

uninstallkey = []
CRootPath=r'C:\CERTIFMAAF\ROOT'
CCaPath=r'C:\CERTIFMAAF\CA'
Certlist=[]

def install():
    global CRootPath
    global CCaPath
    global Certlist

    if isdir(CRootPath):
        print("-- Déjà en place, on passe...")
    else:
        copytree2(r'.\CERTIFMAAF',r'C:\CERTIFMAAF' ,onreplace=default_overwrite)

        for cert in os.listdir(CRootPath):
            cmd=r'import-certificate {}\{} -CertStoreLocation "Cert:\LocalMachine\Root"'.format(CRootPath,cert)
            print (cmd)
            run_powershell(cmd)
        for cert in os.listdir(CCaPath):
            cmd=r'import-certificate {}\{} -CertStoreLocation "Cert:\LocalMachine\CA"'.format(CCaPath,cert)
            print (cmd)
            run_powershell(cmd)

def uninstall():
    if isdir(CRootPath):
        print ("Removing... ")
        remove_tree (CPath)
        for cert in (RemoveList):
            print (" Removing ALL IGC and AC in Trusted Root & CA Store.")
            cmd=r'get-childitem cert:"LocalMachine\Root" | Where-object {$_.subject -like "CN=IGC/A AC*"} | ForEach-Object {Remove-Item -Path "Cert:\LocalMachine\CA\$($_.Thumbprint)"}'
            run_powershell(cmd)
            cmd=r'get-childitem cert:"LocalMachine\CA" | Where-object {$_.subject -like "CN=AC *"} | ForEach-Object {Remove-Item -Path "Cert:\LocalMachine\CA\$($_.Thumbprint)"}'
            run_powershell(cmd)
finalement reste plus qu'a trouver comment a partir du dossier et des certificats stocké trouver l'identifiant de chacun d'eux et le supprimer façon ciblé pour faire un paquet généralisé. mais j'ai pas le temps.