siguiente puede importar exchange clave certificado archivo powershell certificate certutil

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.



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() }