Il est relativement facile d'importer un certificat dans le magasin personnel de l'utilisateur à partir d'un fichier pfx à l'aide de CertUtil:
certutil –f –p [certificate_password] –importpfx C:\[certificate_path_and_name].pfx
Mais cela se termine dans le magasin personnel de l'utilisateur actuel. J'en ai besoin dans TrustedPeople sur LocalMachine.
Est-il possible de le faire à partir de la ligne de commande, en appelant des arguments différents sur certutil importpfx, en utilisant une autre commande certutil ou un autre utilitaire? Powershell est une autre possibilité, bien que je ne sache pas grand chose à ce sujet.
A bientôt, Matt
Ancrer mes découvertes ici pour les futurs lecteurs.
Importer le certificat vers les autorités de certification racines de confiance sur l'ordinateur local:
CERTUTIL -addstore -enterprise -f -v root "somCertificat.cer"
Importer pfx dans Personnel sur une machine locale
CERTUTIL -f -p somePassword -importpfx "somePfx.pfx"
Importation de pfx vers des personnes de confiance sur la machine locale - Lien vers importpfx.exe
importpfx.exe -f "somePfx.pfx" -p "somePassword" -t MACHINE -s "TRUSTEDPEOPLE"
Importer un certificat sur Trusted People sur une machine locale
Certutil -addstore -f "TRUSTEDPEOPLE" "someCertificate.cer"
Pour ceux qui recherchaient cela, je ne pouvais pas 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 afin d'éviter d'avoir à copier le fichier sur un grand les 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 magasin souhaité:
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()
}
Avec Windows 2012 R2 (Win 8.1) et versions ultérieures, vous disposez également de la cmdlet "officielle" Import-PfxCertificate
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
Sur la base du code de mao47 et de quelques recherches, j'ai rédigé un petit article et une simple applet de commande permettant d'importer/d'envoyer des certificats PFX sur des ordinateurs distants.
Voici mon article avec plus de détails et un code complet qui fonctionne également avec PSv2 (valeur par défaut sur Server 2008 R2/Windows 7), tant que vous avez SMB activé et un partage administratif.
Pour les fenêtres 10:
importer le certificat vers les autorités de certification racines de confiance pour l'utilisateur actuel:
certutil -f -user -p Oracle -importpfx root "example.pfx"
importer le certificat vers des personnes de confiance pour l'utilisateur actuel:
certutil -f -user -p Oracle -importpfx TrustedPeople "example.pfx"
importer le certificat vers les autorités de certification racines de confiance sur l'ordinateur local:
certutil -f -user -p Oracle -enterprise -importpfx root "example.pfx"
certificat d'importation vers des personnes de confiance sur l'ordinateur local:
certutil -f -user -p Oracle -enterprise -importpfx TrustedPeople "example.pfx"
Voici le code complet, importer pfx, ajouter un site web iis, ajouter une liaison ssl:
$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()
Dans les versions plus récentes de Windows, le Certuil a [CertificateStoreName] où nous pouvons donner le nom du magasin. Dans les versions antérieures de Windows, cela n’était pas possible.
Installation du certificat * .pfx: Certutil -f -p "" -enterprise -importpfx root ""
Installation du certificat * .cer: Certutil -addstore -enterprise -f -v root ""
Pour plus de détails, la commande peut être exécutée dans Windows cmd . C:> certutil -importpfx -? Utilisation: CertUtil [Options] -importPFX [CertificateStoreName] PFXFile [Modificateurs]