Importer le fichier pfx dans un magasin de certificats particulier à partir de la ligne de commande

Il est relativement facile d'importer un certificat dans le magasin personnel de l'utilisateur à partir d'un fichier pfx CertUtil:

certutil –f –p [certificate_password] –importpfx C:[certificate_path_and_name].pfx 

mais cela finit dans le magasin personnel de l'utilisateur courant. J'en ai besoin dans les gens de confiance sur machine locale.

y a-t-il un moyen pour que je puisse faire cela depuis la ligne de commande, soit en appelant différents arguments sur certutil importpfx, en utilisant une autre commande certutil ou un autre utilitaire? Powershell est une autre possibilité, bien que je ne sais pas beaucoup à ce sujet.

Cheers, Matt

25
demandé sur schwolf 2011-03-02 20:27:47

6 réponses

ancrer mes conclusions ici pour les futurs lecteurs.

Importer le certificat Racine de Confiance des Autorités de Certification sur la Machine Locale:

CERTUTIL -addstore -enterprise -f -v root "somCertificat.cer"

Importer le fichier pfx Personnels sur l'ordinateur local

CERTUTIL -f -p somePassword -importpfx "somePfx.pfx"

Importer le fichier pfx à des Personnes de Confiance sur la machine locale - Lien pour importer PFX.exe

importpfx.exe -f "somePfx.pfx" -p "somePassword" -t MACHINE -s "TRUSTEDPEOPLE"

Importer le certificat à des Personnes de Confiance sur l'ordinateur local

Certutil -addstore -f "TRUSTEDPEOPLE" "someCertificate.cer"
51
répondu jaspernygaard 2011-08-31 16:31:23

Pour quiconque cherche à cela, je n'ai pas pu utiliser certutil -importpfx dans un magasin spécifique, et je ne voulais pas télécharger l'outil importpfx fourni par la réponse de jaspernygaard pour éviter d'avoir à copier le fichier sur un grand nombre de serveurs. J'ai fini par trouver ma réponse dans un script powershell montré ici.

le code utilise System.Security.Cryptography.X509Certificates pour importer le certificat, puis le déplace dans le bac désiré:

function Import-PfxCertificate { 

    param([String]$certPath,[String]$certRootStore = “localmachine”,[String]$certStore = “My”,$pfxPass = $null) 
    $pfx = new-object System.Security.Cryptography.X509Certificates.X509Certificate2 

    if ($pfxPass -eq $null) 
    {
        $pfxPass = read-host "Password" -assecurestring
    } 

    $pfx.import($certPath,$pfxPass,"Exportable,PersistKeySet") 

    $store = new-object System.Security.Cryptography.X509Certificates.X509Store($certStore,$certRootStore) 
    $store.open("MaxAllowed") 
    $store.add($pfx) 
    $store.close() 
}
7
répondu mao47 2014-01-21 13:36:33

consultez ces liens: http://www.orcsweb.com/blog/james/powershell-ing-on-windows-server-how-to-import-certificates-using-powershell/

Certificat D'Importation:http://poshcode.org/1937

Vous pouvez faire quelque chose comme:

dir -Path C:\Certs -Filter *.cer | Import-Certificate -CertFile $_ -StoreNames AuthRoot, Root -LocalMachine -Verbose
6
répondu ravikanth 2011-03-02 17:38:51

avec Windows 2012 R2 (Win 8.1) et plus, vous avez aussi le "Officiel" Importer-PfxCertificate applet de commande

voici quelques parties essentielles du code (un exemple adaptable):

Invoke-Command -ComputerName $Computer -ScriptBlock {
        param(
            [string] $CertFileName,
            [string] $CertRootStore,
            [string] $CertStore,
            [string] $X509Flags,
            $PfxPass)
        $CertPath = "$Env:SystemRoot$CertFileName"
        $Pfx = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2
        # Flags to send in are documented here: https://msdn.microsoft.com/en-us/library/system.security.cryptography.x509certificates.x509keystorageflags%28v=vs.110%29.aspx
        $Pfx.Import($CertPath, $PfxPass, $X509Flags) #"Exportable,PersistKeySet")
        $Store = New-Object -TypeName System.Security.Cryptography.X509Certificates.X509Store -ArgumentList $CertStore, $CertRootStore
        $Store.Open("MaxAllowed")
        $Store.Add($Pfx)
        if ($?)
        {
            "${Env:ComputerName}: Successfully added certificate."
        }
        else
        {
            "${Env:ComputerName}: Failed to add certificate! $($Error[0].ToString() -replace '[\r\n]+', ' ')"
        }
        $Store.Close()
        Remove-Item -LiteralPath $CertPath
    } -ArgumentList $TempCertFileName, $CertRootStore, $CertStore, $X509Flags, $Password

basé sur le code de mao47 et quelques recherches, j'ai écrit un petit article et un cmdlet simple pour importer/pousser des certificats PFX aux ordinateurs distants.

Ici mon article avec plus de détails et le code complet qui fonctionne aussi avec PSv2 (par défaut sur le serveur 2008 R2 / Windows 7), tant que vous avez activé SMB et l'accès de partage administratif.

2
répondu Joakim 2016-10-09 19:12:28

Pour windows 10:

importer le certificat aux autorités de Certification racine de confiance pour L'Utilisateur courant:

certutil -f -user -p oracle -importpfx root "example.pfx"

importer le certificat à des personnes de confiance pour L'utilisateur actuel:

certutil -f -user -p oracle -importpfx TrustedPeople "example.pfx"

importer le certificat Racine de Confiance des Autorités de Certification sur la Machine Locale:

certutil -f -user -p oracle -enterprise -importpfx root "example.pfx"

importer le certificat aux personnes de confiance sur la Machine locale:

certutil -f -user -p oracle -enterprise -importpfx TrustedPeople "example.pfx"
2
répondu BurningFish 2017-06-22 04:54:27

voici le code complet, importer pfx, ajouter IIS website, ajouter SSL binding:

$SiteName = "MySite"
$HostName = "localhost"
$CertificatePassword = '1234'
$SiteFolder = Join-Path -Path 'C:\inetpub\wwwroot' -ChildPath $SiteName
$certPath = 'c:\cert.pfx'


Write-Host 'Import pfx certificate' $certPath
$certRootStore = “LocalMachine”
$certStore = "My"
$pfx = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2
$pfx.Import($certPath,$CertificatePassword,"Exportable,PersistKeySet") 
$store = New-Object System.Security.Cryptography.X509Certificates.X509Store($certStore,$certRootStore) 
$store.Open('ReadWrite')
$store.Add($pfx) 
$store.Close() 
$certThumbprint = $pfx.Thumbprint


Write-Host 'Add website' $SiteName
New-WebSite -Name $SiteName -PhysicalPath $SiteFolder -Force
$IISSite = "IIS:\Sites$SiteName"
Set-ItemProperty $IISSite -name  Bindings -value @{protocol="https";bindingInformation="*:443:$HostName"}
if($applicationPool) { Set-ItemProperty $IISSite -name  ApplicationPool -value $IISApplicationPool }


Write-Host 'Bind certificate with Thumbprint' $certThumbprint
$obj = get-webconfiguration "//sites/site[@name='$SiteName']"
$binding = $obj.bindings.Collection[0]
$method = $binding.Methods["AddSslCertificate"]
$methodInstance = $method.CreateInstance()
$methodInstance.Input.SetAttributeValue("certificateHash", $certThumbprint)
$methodInstance.Input.SetAttributeValue("certificateStoreName", $certStore)
$methodInstance.Execute()
1
répondu Aurel Havetta 2016-01-13 19:18:23