Importieren Sie eine Reihe von Zertifikaten mithilfe eines Skripts in den richtigen Zertifikatspeicher

Importieren Sie eine Reihe von Zertifikaten mithilfe eines Skripts in den richtigen Zertifikatspeicher

Ich habe eine Sammlung von Zertifikaten in einer p7b-Datei und möchte jedes Zertifikat je nach Zertifikatsvorlage automatisch in den richtigen Speicher importieren. Wie geht das am besten mit einem Skript?

Ich habe versucht certutil -addstore root Certificate.p7b, zu verwenden. Dadurch werden alle Stammzertifizierungsstellen ordnungsgemäß im Stammspeicher abgelegt. Allerdings wird ein Fehler zurückgegeben, wenn ein anderer Zertifikattyp gefunden wird.

Ich bin bereit, Batch-Skripte, VBScript oder Powershell zu verwenden, um diese Aufgabe zu erledigen. Danke!

Antwort1

Ich verwende CertMgr.exeeine einfache Bat-Datei zum Importieren von Zertifikaten.

certmgr.exe -add -c ca.cer -s -r localMachine root  >> log.txt
certmgr.exe -add -c test.cer -s -r localMachine root  >> log.txt
certmgr.exe -add -c edu.cer -s -r localMachine root  >> log.txt

Hier istein TechNet-Artikelwelches dokumentiert, welche Befehle/Verwendungen Sie mit certmgr.exe durchführen können

Antwort2

Ich habe kein Skript gefunden, um es basierend auf der Vorlage in das Zertifikat in den richtigen Speicher zu importieren. Ich glaube, Sie haben dieses Skript selbst erstellt, da es einfach nicht existiert. Was ich gefunden habe, ist ein PowerShell-Skript, das Zertifikate aus einem Verzeichnis importiert und in dem Befehl müssen Sie den richtigen Speicher selbst angeben. Ich dachte, das könnte für Sie nützlich sein:

So verwenden Sie das Skript Funktion zum Importieren von Sicherheitszertifikaten.

HINWEIS: Um eine Liste der verfügbaren Store-Namen zu erhalten, führen Sie den folgenden Befehl aus: dir cert: | Select -Expand StoreNames

Beispielverwendungen: Import-Certificate -CertFile "VeriSign_Expires-2028.08.01.cer" -StoreNames AuthRoot, Root -LocalMachine

Import-Certificate -CertFile "VeriSign_Expires-2018.05.18.p12" -StoreNames AuthRoot -LocalMachine -CurrentUser -CertPassword Passwort -Verbose

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

Skript selbst:

#requires -Version 2.0

function Import-Certificate
{
    param
    (
        [IO.FileInfo] $CertFile = $(throw "Paramerter -CertFile [System.IO.FileInfo] is required."),
        [string[]] $StoreNames = $(throw "Paramerter -StoreNames [System.String] is required."),
        [switch] $LocalMachine,
        [switch] $CurrentUser,
        [string] $CertPassword,
        [switch] $Verbose
    )

    begin
    {
        [void][System.Reflection.Assembly]::LoadWithPartialName("System.Security")
    }

    process 
    {
        if ($Verbose)
        {
            $VerbosePreference = 'Continue'
        }

        if (-not $LocalMachine -and -not $CurrentUser)
        {
            Write-Warning "One or both of the following parameters are required: '-LocalMachine' '-CurrentUser'. Skipping certificate '$CertFile'."
        }

        try
        {
            if ($_)
            {
                $certfile = $_
            }
            $cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2 $certfile,$CertPassword
        }
        catch
        {
            Write-Error ("Error importing '$certfile': $_ .") -ErrorAction:Continue
        }

        if ($cert -and $LocalMachine)
        {
            $StoreScope = "LocalMachine"
            $StoreNames | ForEach-Object {
                $StoreName = $_
                if (Test-Path "cert:\$StoreScope\$StoreName")
                {
                    try
                    {
                        $store = New-Object System.Security.Cryptography.X509Certificates.X509Store $StoreName, $StoreScope
                        $store.Open([System.Security.Cryptography.X509Certificates.OpenFlags]::ReadWrite)
                        $store.Add($cert)
                        $store.Close()
                        Write-Verbose "Successfully added '$certfile' to 'cert:\$StoreScope\$StoreName'."
                    }
                    catch
                    {
                        Write-Error ("Error adding '$certfile' to 'cert:\$StoreScope\$StoreName': $_ .") -ErrorAction:Continue
                    }
                }
                else
                {
                    Write-Warning "Certificate store '$StoreName' does not exist. Skipping..."
                }
            }
        }

        if ($cert -and $CurrentUser)
        {
            $StoreScope = "CurrentUser"
            $StoreNames | ForEach-Object {
                $StoreName = $_
                if (Test-Path "cert:\$StoreScope\$StoreName")
                {
                    try
                    {
                        $store = New-Object System.Security.Cryptography.X509Certificates.X509Store $StoreName, $StoreScope
                        $store.Open([System.Security.Cryptography.X509Certificates.OpenFlags]::ReadWrite)
                        $store.Add($cert)
                        $store.Close()
                        Write-Verbose "Successfully added '$certfile' to 'cert:\$StoreScope\$StoreName'."
                    }
                    catch
                    {
                        Write-Error ("Error adding '$certfile' to 'cert:\$StoreScope\$StoreName': $_ .") -ErrorAction:Continue
                    }
                }
                else
                {
                    Write-Warning "Certificate store '$StoreName' does not exist. Skipping..."
                }
            }
        }
    }

    end
    { }
}

Quelle:Einfuhr-Zertifikat

verwandte Informationen