it-swarm.com.de

Importieren Sie die pfx-Datei über die Befehlszeile in einen bestimmten Zertifikatspeicher

Es ist relativ einfach, ein Zertifikat aus einer pfx-Datei mithilfe von CertUtil in den persönlichen Speicher des Benutzers zu importieren:

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

Dies landet jedoch im Personal Store des aktuellen Benutzers. Ich brauche es in TrustedPeople auf LocalMachine.

Gibt es eine Möglichkeit, dies über die Befehlszeile zu tun, indem Sie verschiedene Argumente in certutil importpfx mit einem anderen certutil-Befehl oder einem anderen Dienstprogramm aufrufen? Powershell ist eine andere Möglichkeit, obwohl ich nicht viel darüber weiß.

Prost, Matt

28
Matt Thrower

Hier meine Erkenntnisse für zukünftige Leser verankern.

Zertifikat in vertrauenswürdige Stammzertifizierungsstellen auf lokalem Computer importieren:

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

Importieren Sie pfx in Personal auf lokalem Computer

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

Importieren Sie pfx zu vertrauenswürdigen Personen auf dem lokalen Computer - Link zu importpfx.exe

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

Importieren Sie ein Zertifikat an vertrauenswürdige Personen auf einem lokalen Computer

Certutil -addstore -f "TRUSTEDPEOPLE" "someCertificate.cer"
54
jaspernygaard

Für alle, die dies suchen, konnte ich certutil -importpfx nicht in einem bestimmten Store verwenden und ich wollte das von jaspernygaard zur Verfügung gestellte importpfx-Tool nicht herunterladen, um zu vermeiden, dass die Datei auf eine große Anzahl von Dateien kopiert wird Server. Am Ende fand ich meine Antwort in einem Powershell-Skript, das hier angezeigt wurde.

Der Code verwendet System.Security.Cryptography.X509Certificates zum Importieren des Zertifikats und verschiebt es dann in den gewünschten Store:

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

Überprüfen Sie diese Links: http://www.orcsweb.com/blog/james/powershell-ing-on-windows-server-how-to-import-certificates-using-powershell/

Import-Zertifikat: http://poshcode.org/1937

Sie können so etwas tun:

dir -Path C:\Certs -Filter *.cer | Import-Certificate -CertFile $_ -StoreNames AuthRoot, Root -LocalMachine -Verbose
6
ravikanth

Mit Windows 2012 R2 (Win 8.1) und höher haben Sie auch das "offizielle" Import-PfxCertificate-Cmdlet

Hier sind einige wesentliche Teile des Codes (ein anpassbares Beispiel):

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

Basierend auf mao47-Code und einigen Nachforschungen habe ich einen kleinen Artikel und ein einfaches Cmdlet zum Importieren von Push-Zertifikaten auf Remote-Computer geschrieben.

Hier ist mein Artikel mit mehr Details und vollständigem Code, der auch mit PSv2 funktioniert (Standardeinstellung für Server 2008 R2/Windows 7), sofern Sie SMB aktiviert haben und über Administratorzugriff verfügen.

2
Joakim

Für Windows 10:

zertifikat in vertrauenswürdige Stammzertifizierungsstellen für aktuellen Benutzer importieren:

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

zertifikat für vertrauenswürdige Personen für aktuellen Benutzer importieren:

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

zertifikat in vertrauenswürdige Stammzertifizierungsstellen auf lokalem Computer importieren:

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

zertifikat in vertrauenswürdige Personen auf lokalem Computer importieren:

certutil -f -user -p Oracle -enterprise -importpfx TrustedPeople "example.pfx"
2
BurningFish

Hier ist der vollständige Code, pfx importieren, iis-Website hinzufügen, SSL-Bindung hinzufügen:

$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
Aurel Havetta

In der neueren Version von Windows hat Certuil [CertificateStoreName], wo wir den Namen des Geschäfts angeben können. In früheren Fenstern war dies nicht möglich.

* .Pfx-Zertifikat installieren: Certutil -f -p "" -enterprise -importpfx root ""

* .Cer-Zertifikat installieren: Certutil -addstore -enterprise -f -v root ""

Für weitere Details kann der Befehl in Windows cmd ..__ ausgeführt werden. C:> certutil -importpfx -? Verwendung: CertUtil [Options] -importPFX [CertificateStoreName] PFXFile [Modifikatoren]

0
santoshkhembram