Signieren von Skripten

Ein Skript muss von einer für die Konsole vertrauenswürdigen Zertifizierungsstelle signiert sein, damit es von Security Controls importiert oder ausgeführt werden kann. Alle von Security Controls bereitgestellten Skripte wurden von Ivanti signiert. Während der Installation von Security Controls wird das Ivanti Zertifikat zum Speicher für vertrauenswürdige Zertifikate auf dem Konsolencomputer hinzugefügt.

Die von Ihnen erstellten Skripte müssen zuerst signiert werden, damit sie in Security Controls importiert werden können. Dazu benötigen Sie ein Signaturzertifikat. Das Zertifikat muss von einer Zertifizierungsstelle ausgestellt worden sein, die in der Vertrauensliste für die Konsolen enthalten ist, die die von Ihnen erstellten Skripte ausführen.

In diesem Abschnitt wird eine der Methoden beschrieben, mit der Sie ein Signaturzertifikat erstellen und es zu den vertrauenswürdigen Zertifikaten auf der Konsole hinzufügen können.

Erstellen eines Stammzertifikats zum Ausstellen eines Codesignaturzertifikats

Für diesen Schritt müssen Sie Windows ab Version 10 oder Windows Server ab Version 2016 verwenden.

Verwenden Sie den folgenden Befehl, um ein Stammzertifikat zu erstellen, das in der Lage ist, ein Codesignaturzertifikat auszustellen.

PS C:\> $signerRoot = New-SelfSignedCertificate -Subject "CN=PowerShell Local Certificate Root2" -HashAlgorithm Sha256 -CertStoreLocation Cert:\LocalMachine\My -TextExtension @("2.5.29.37={text}1.3.6.1.5.5.7.3.3") -KeyUsageProperty None -KeyUsage None

Erstellen eines Codesignaturzertifikats

Für diesen Schritt müssen Sie Windows ab Version 10 oder Windows Server ab Version 2016 verwenden.

Im nächsten Schritt erstellen Sie ein Signaturzertifikat, das vom Stammzertifikat ausgestellt wird. Geben Sie dazu den folgenden Befehl an der Eingabeaufforderung ein:

PS C:\> $powershellSignerSigner = New-SelfSignedCertificate -Subject "CN=PowerShell User" -HashAlgorithm Sha256 -CertStoreLocation Cert:\LocalMachine\My -Signer $signerRoot -TextExtension @("2.5.29.37={text}1.3.6.1.5.5.7.3.3") -KeyUsageProperty None -KeyUsage None

Verifizieren des Signaturzertifikats

Sie können das Zertifikat innerhalb von PowerShell überprüfen, indem Sie den folgenden Befehl eingeben:

Get-ChildItem cert:\LocalMachine\My -codesigning | Where-Object {$_.Subject -match "CN=PowerShell User"}

Wird das Zertifikat gefunden, werden ein Miniaturbild und der Betreff des Zertifikats angezeigt, in etwa so:

Verschieben des Signaturzertifikats in den vertrauenswürdigen Stammzertifikatspeicher

Sie müssen das Signaturzertifikat aus dem eigenen Zertifikatspeicher in den Stammzertifikatspeicher verschieben. Dadurch wird die Vertrauenskette zum Stammspeicher erstellt.

PS C:\> Move-Item -Path "Cert:\LocalMachine\My\$($signerRoot.Thumbprint)" -Destination Cert:\LocalMachine\Root

Signieren eines Skripts

In diesem Abschnitt wird beschrieben, wie Sie eine Skriptdatei über eine PowerShell-Eingabeaufforderung oder innerhalb der PowerShell-ISE signieren.

Wechseln Sie von der PowerShell-Befehlseingabe in das Verzeichnis, in dem sich Ihre Skriptdatei befindet. In diesem Beispiel heißt dieses "test-script.ps1". Geben Sie anschließend die zwei folgenden Befehle ein:

Der erste Befehl muss innerhalb einer Zeile eingegeben werden. Der CN=PowerShell-Benutzer muss dem Namen entsprechen, den Sie beim Erstellen des Signaturzertifikats angegeben haben.

$cert = @(Get-ChildItem cert:\LocalMachine\My -codesigning | Where-Object {$_.Subject -match "CN=PowerShell User"})[0]

Set-AuthenticodeSignature .\test-script.ps1 $cert

Durch den ersten Befehl wird das Zertifikat im Zertifikatspeicher ausfindig gemacht. Mit dem zweiten Befehl wird das Skript unter Verwendung des Zertifikats signiert.

Durch Signieren des Skripts wird am Ende des Skripts ein Block eingefügt, der in etwa folgendermaßen aussieht:

# SIG # Anfang Signaturblock

# MIIEMwYJKoZIhvcNAQcCoIIEJDCCBCACAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB

# gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR

# AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQU4QyppfQY+5HviH7wuIBvvmRf

……

# SIG # Ende Signaturblock

Wenn Sie Änderungen an dem Skript vornehmen, müssen Sie es erneut signieren.

Signieren eines Skripts unter Verwendung einer PFX-Datei

Wenn Sie Skripte, die dasselbe Signaturzertifikat verwenden, auf mehreren Computern signieren, aber das Signaturzertifikat nicht auf allen Computern installieren möchten, können Sie eine PFX-Datei verwenden (PFX steht für Personal Information Exchange).

So erstellen Sie eine PFX-Datei:

  1. Führen Sie CertMgr.exe aus.
  2. Wählen Sie auf der Registerkarte Persönlich das Signaturzertifikat aus.
  3. Klicken Sie auf Exportieren.
  4. Klicken Sie im ersten Bildschirm des Exportassistenten auf Weiter.
  5. Wählen Sie die Option Personal Information Exchange aus.
    Falls die Option Starken Schutz aktivieren angeboten wird, wählen Sie sie aus.
  6. Geben Sie bei Aufforderung ein Kennwort ein.
    Dieses ist erforderlich, wenn Sie diese PFX-Datei zum Signieren von Skripten verwenden möchten.
  7. Geben Sie bei Aufforderung einen Namen für die PFX-Datei ein.

Geben Sie zum Signieren eines Skripts unter Verwendung der PFX-Datei die folgenden Befehle in PowerShell ein:

$cert = Get-PfxCertificate mycert.pfx

Set-AuthenticodeSignature .\test-script.ps1 $cert

Geben Sie bei Aufforderung das in Schritt 6 erstellte Kennwort ein.