2011-03-02 10 views
22

Es relativamente fácil para importar un certificado en el almacén personal del usuario desde un archivo PFX utilizando CertUtil:Importación en particular, almacén de certificados desde la línea de comandos

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

Pero esto termina en el almacén personal de la usuario actual. Lo necesito en TrustedPeople en LocalMachine.

¿Hay alguna manera de hacerlo desde la línea de comandos, llamando a 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

Respuesta

48

anclaje mis resultados aquí para el futuro lectores. certificado

de importación a las autoridades de certificación raíz de confianza en el equipo local:

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

pfj importación a personal en la máquina local

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

pfj Importar para Personas de confianza en el equipo local - Link a importpfx.exe

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

Certificado de importación para La gente de confianza en el equipo local

Certutil -addstore -f "TRUSTEDPEOPLE" "someCertificate.cer" 
+0

Es frustrante que CertUtil no puede importar un PFX a TRUSTEDPEOPLE. CertUtil funciona bien con un PSSession remoto (PowerShell), pero importpfx no (FYI, fuente de importpfx es http://home.fnal.gov/~jklemenc/src/importpfx.cpp). No estoy seguro de qué es lo que CERTUTIL está haciendo de manera diferente, pero * does * funciona con sesiones de PS remotas, pero no puedo ubicar el certificado en Trusted People. Suspiro. Un par de días muy frustrante. –

+1

Terminamos escribiendo un conjunto de funciones de powershell para hacer el trabajo duro. Mire CiPsLib.Certificates.psm1 -> Import-Certificate https://github.com/rasmus/CiPsLib/tree/master/tools – jaspernygaard

+0

¿Cómo puedo importar sin usar una contraseña? ¿Es posible? – drgmak

6

a cualquier persona en busca de esto, no fue capaz de utilizar certutil -importpfx en una tienda específica, y yo no quería descargar la herramienta importpfx suministrado por la respuesta de jaspernygaard con el fin de evite el requisito de copiar el archivo a una gran cantidad de servidores. Terminé encontrando mi respuesta en un script de powershell que se muestra en here.

El código utiliza System.Security.Cryptography.X509Certificates para importar el certificado y luego se desplazará a la tienda deseada:

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

¿me puede ayudar a comprender los valores y su significado? "MaxAllowed", "Mi", –

+0

@RaviKhambhati: Mi es el nombre de la tienda de certificados que estoy usando. consulte https://msdn.microsoft.com/en-us/library/windows/desktop/aa388136(v=vs.85).aspx para obtener más información acerca de las ubicaciones de las tiendas cert. MaxAllowed es el valor de los OpenFlags que estoy usando para abrir. Honestamente solo copié y pegué esa parte, pero puede obtener más información sobre sus posibles valores aquí: https://msdn.microsoft.com/en-us/library/system.security.cryptography.x509certificates.openflags(v=vs. 110) .aspx – mao47

+0

Muchas gracias. Cuando hacemos la misma operación de IIS, ¿cuáles serán estos valores? –

2

Con Windows 2012 R2 (Win 8.1) y por exceso, también tienen la "oficial" Import-PfxCertificate cmdlet

Aquí están algunas partes esenciales del código (un ejemplo adaptables):

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, redactó un litt le artículo y un cmdlet simple para importar/enviar certificados PFX a computadoras remotas.

Here's mi artículo con más detalles y un código completo que también funciona con PSv2 (predeterminado en Server 2008 R2/Windows 7), siempre que tenga habilitado SMB y acceso compartido de administración.

+1

Si bien esto podría responder teóricamente a la pregunta, [sería preferible] (// meta.stackoverflow.com/q/8259) incluir las partes esenciales de la respuesta aquí y proporciona el enlace para referencia. – manetsus

1

Aquí está el código completo, pfj importación, añadir el sitio web de IIS, añadir SSL vinculante:

$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() 
2

Para Windows 10:

certificado de importación a las autoridades de certificación raíz de confianza para el usuario actual:

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

certificado de importación a Trusted People para el usuario actual:

certificado

importación a las autoridades de certificación raíz de confianza en el equipo local: Certificado

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

importación a Personas de confianza en el equipo local:

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

Realmente estaba luchando por agregar un certificado de usuario a una nueva tienda. El último ejemplo funcionó para mí. Nota: si usa un nombre de tienda (por ejemplo, "ABC") en lugar de "TrustedPeople", se creará la tienda. No hay necesidad de usar el argumento -addstore para agregar una tienda ... esto es lo que estaba atrapado. – AQuirky

Cuestiones relacionadas