powershell - puede - Importar archivo pfx en un almacén de certificados particular desde la línea de comandos
certificado exchange (6)
Anclando mis hallazgos aquí para futuros lectores.
Importar certificado a las autoridades de certificación de raíz de confianza en la máquina local:
CERTUTIL -addstore -enterprise -f -v root "somCertificat.cer"
Importar pfx a Personal en la máquina local
CERTUTIL -f -p somePassword -importpfx "somePfx.pfx"
Importe pfx a personas de confianza en la máquina local: Link a importpfx.exe
importpfx.exe -f "somePfx.pfx" -p "somePassword" -t MACHINE -s "TRUSTEDPEOPLE"
Importar certificado a Trusted People en una máquina local.
Certutil -addstore -f "TRUSTEDPEOPLE" "someCertificate.cer"
Es relativamente fácil importar un certificado en el almacén personal del usuario desde un archivo pfx usando CertUtil:
certutil –f –p [certificate_password] –importpfx C:/[certificate_path_and_name].pfx
Pero esto termina en la Tienda Personal del usuario actual. Lo necesito en TrustedPeople en LocalMachine.
¿Hay alguna manera de hacerlo desde la línea de comandos, ya sea llamando diferentes argumentos en certutil importpfx, usando otro comando certutil o una utilidad diferente? Powershell es otra posibilidad, aunque no sé mucho al respecto.
Saludos, Matt
Aquí está el código completo, importar pfx, agregar el sitio web iis, agregar el enlace 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()
Con Windows 2012 R2 (Win 8.1) y superior, también tiene el cmdlet "oficial" Import-PfxCertificate
Aquí hay algunas partes esenciales del código (un ejemplo 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
Basado en el código de mao47 y algunas investigaciones, escribí un pequeño artículo y un sencillo cmdlet para importar / enviar certificados PFX a computadoras remotas.
Here''s mi artículo con más detalles y código completo que también funciona con PSv2 (predeterminado en Server 2008 R2 / Windows 7), siempre que tenga habilitado el acceso compartido de SMB y administrativo.
Consulte estos enlaces: http://www.orcsweb.com/blog/james/powershell-ing-on-windows-server-how-to-import-certificates-using-powershell/
Certificado de importación: http://poshcode.org/1937
Puedes hacer algo como:
dir -Path C:/Certs -Filter *.cer | Import-Certificate -CertFile $_ -StoreNames AuthRoot, Root -LocalMachine -Verbose
Para Windows 10:
importar certificado a las autoridades de certificación de raíz de confianza para el usuario actual:
certutil -f -user -p oracle -importpfx root "example.pfx"
Importar certificado a personas de confianza para el usuario actual:
certutil -f -user -p oracle -importpfx TrustedPeople "example.pfx"
certificado de importación a Trusted Root Certification Authorities en la máquina local:
certutil -f -user -p oracle -enterprise -importpfx root "example.pfx"
Certificado de importación a personas de confianza en la máquina local:
certutil -f -user -p oracle -enterprise -importpfx TrustedPeople "example.pfx"
Para cualquier otra persona que esté buscando esto, no pude usar certutil -importpfx
en una tienda específica, y no quería descargar la herramienta importpfx suministrada por la respuesta de jaspernygaard para evitar el requisito de copiar el archivo a una gran cantidad Número de servidores. Terminé encontrando mi respuesta en un script de powershell que se muestra here .
El código utiliza los Certificados System.Security.Cryptography.X509Certificates
para importar el certificado y luego lo traslada al almacén deseado:
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()
}