Pagina 1 di 1

Creazione di un pacchetto per installare i certificati in Windows Store

Pubblicato: 18 giugno 2021 - 17:06
di megs
Buongiorno,

Sto cercando di creare un pacchetto per installare i certificati sull'intera flotta.
Nella sezione di installazione faccio questo:

Codice: Seleziona tutto

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)
Non ho riscontrato errori (è normale, è in modalità silenziosa), tranne il fatto che i certificati non vengono installati.
Si tratta di un problema di diritti? L'account del computer/sistema non può integrare i certificati?
Come posso farlo funzionare?

Re: Creazione di un pacchetto per installare i certificati in Windows Store

Pubblicato: 21 giugno 2021 - 15:45
di dcardon
Ciao Megs,

Nel codice, la sostituzione sembra aggiungere un file .crt al nome del file che contiene già un file .crt:

Codice: Seleziona tutto

{}\{}.crt
L'agente WAPT esegue il contenuto della funzione `def install()` come account di sistema locale, quindi ha i diritti per aggiungere certificati all'archivio locale. Tuttavia, è necessario prestare attenzione quando si creano directory nella radice (C:\CERTIFMAAF) con autorizzazioni ereditate per impedire che utenti diversi dall'account di sistema locale possano scrivervi. Infatti, non è necessario creare una copia intermedia in C:\CERTIFMAAF (se non ci sono altre applicazioni che necessitano di accedere ai file .crt) ed è possibile utilizzare `certutil` direttamente dalla directory di installazione del pacchetto WAPT.

Sinceramente,

Denis

Re: Creazione di un pacchetto per installare i certificati in Windows Store

Pubblicato: 21 giugno 2021 - 16:21
di megs
Sì, era proprio venerdì sera, quindi... :rotolo: .
Inoltre, i percorsi non mi sono chiari, quindi non c'è modo di recuperare il percorso corretto del certificato a meno che non lo copi in un posto dove so con certezza dove si trova. Ho provato il percorso .\CERTIFMAAF ma puff... non l'ho trovato. :lol:

Ma comunque non cambia nulla. Certutils non funziona tramite prompt dei comandi. Funziona con PowerShell, tuttavia, poiché non richiama un eseguibile esterno.

Ho compilato una versione più semplice e intuitiva per tutti (non testata su Win 7). Sentitevi liberi di usarla come guida, se lo desiderate. Testata e funzionante su Win 10. WAPT 1.8.2. Versione Linux core.

Codice: Seleziona tutto

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)
Infine, non resta che capire come trovare l'identificativo di ciascun certificato dalla cartella e dal suo contenuto memorizzato, per poi eliminarli in modo mirato e creare un pacchetto generalizzato. Ma non ho tempo.