Freigeben über


about_Signing

Kurze Beschreibung

Erläutert, wie Skripts signiert werden, damit sie den PowerShell-Ausführungsrichtlinien entsprechen.

Lange Beschreibung

Diese Informationen gelten nur für PowerShell, die unter Windows ausgeführt wird.

Die Eingeschränkte Ausführungsrichtlinie lässt die Ausführung von Skripts nicht zu. Die Ausführungsrichtlinien AllSigned und RemoteSigned verhindern, dass PowerShell Skripts ohne digitale Signatur ausführt.

In diesem Thema wird erläutert, wie Sie ausgewählte Skripts ausführen, die nicht signiert sind, auch wenn die Ausführungsrichtlinie RemoteSigned lautet, und wie Sie Skripts für ihre eigene Verwendung signieren.

Weitere Informationen zu PowerShell-Ausführungsrichtlinien finden Sie unter about_Execution_Policies.

So lassen Sie die Ausführung signierter Skripts zu

Wenn Sie PowerShell zum ersten Mal auf einem Computer starten, ist wahrscheinlich die Richtlinie für die eingeschränkte Ausführung( die Standardeinstellung) in Kraft.

Die Eingeschränkte Richtlinie lässt die Ausführung von Skripts nicht zu.

Um die effektive Ausführungsrichtlinie auf Ihrem Computer zu ermitteln, geben Sie Folgendes ein:

Get-ExecutionPolicy

Um nicht signierte Skripts auszuführen, die Sie auf Ihrem lokalen Computer schreiben, und signierte Skripts von anderen Benutzern, starten Sie PowerShell mit der Option Als Administrator ausführen , und verwenden Sie dann den folgenden Befehl, um die Ausführungsrichtlinie auf dem Computer in RemoteSigned zu ändern:

Set-ExecutionPolicy RemoteSigned

Weitere Informationen finden Sie im Hilfethema zum Set-ExecutionPolicy Cmdlet.

Ausführen von nicht signierten Skripts mithilfe der RemoteSigned-Ausführungsrichtlinie

Wenn Ihre PowerShell-Ausführungsrichtlinie RemoteSigned lautet, führt PowerShell keine nicht signierten Skripts aus, die aus dem Internet heruntergeladen werden, einschließlich nicht signierter Skripts, die Sie über E-Mail- und Chatprogramme erhalten.

Wenn Sie versuchen, ein heruntergeladenes Skript auszuführen, zeigt PowerShell die folgende Fehlermeldung an:

The file <file-name> cannot be loaded. The file <file-name> is not
digitally signed. The script will not execute on the system. Please see
"Get-Help about_Signing" for more details.

Bevor Sie das Skript ausführen, überprüfen Sie den Code, um sicherzustellen, dass Sie ihn vertrauen. Skripts haben die gleiche Wirkung wie jedes ausführbare Programm.

Verwenden Sie zum Ausführen eines nicht signierten Skripts das Unblock-File Cmdlet, oder verwenden Sie das folgende Verfahren.

  1. Speichern Sie die Skriptdatei auf Ihrem Computer.
  2. Klicken Sie auf Start, klicken Sie auf Arbeitsplatz, und suchen Sie die gespeicherte Skriptdatei.
  3. Klicken Sie mit der rechten Maustaste auf die Skriptdatei, und klicken Sie dann auf Eigenschaften.
  4. Klicken Sie auf Nicht mehr blockieren.

Wenn ein skript, das aus dem Internet heruntergeladen wurde, digital signiert ist, Sie sich aber noch nicht dafür entschieden haben, dem Herausgeber zu vertrauen, zeigt PowerShell die folgende Meldung an:

Do you want to run software from this untrusted publisher?
The file <file-name> is published by CN=<publisher-name>. This
publisher is not trusted on your system. Only run scripts
from trusted publishers.

[V] Never run  [D] Do not run  [R] Run once  [A] Always run
[?] Help (default is "D"):

Wenn Sie dem Herausgeber vertrauen, wählen Sie Einmal ausführen oder Immer ausführen aus. Wenn Sie dem Herausgeber nicht vertrauen, wählen Sie entweder Nie ausführen oder Nicht ausführen aus. Wenn Sie Nie ausführen oder Immer ausführen auswählen, werden Sie von PowerShell nicht erneut zur Eingabe dieses Herausgebers aufgefordert.

Methoden zum Signieren von Skripts

Sie können die Skripts, die Sie schreiben, und die Skripts signieren, die Sie aus anderen Quellen erhalten. Bevor Sie ein Skript signieren, überprüfen Sie jeden Befehl, um sicherzustellen, dass er sicher ausgeführt werden kann.

Bewährte Methoden zur Codesignierung finden Sie unter Bewährte Methoden für die Codesignierung.

Weitere Informationen zum Signieren einer Skriptdatei finden Sie unter Set-AuthenticodeSignature.

Das New-SelfSignedCertificate Cmdlet, das im PKI-Modul in PowerShell 3.0 eingeführt wurde, erstellt ein selbstsigniertes Zertifikat, das für Tests geeignet ist. Weitere Informationen finden Sie im Hilfethema zum New-SelfSignedCertificate Cmdlet.

Um einem Skript eine digitale Signatur hinzuzufügen, müssen Sie sie mit einem Codesignaturzertifikat signieren. Zwei Arten von Zertifikaten eignen sich zum Signieren einer Skriptdatei:

  • Zertifikate, die von einer Zertifizierungsstelle erstellt werden: Gegen eine Gebühr überprüft eine öffentliche Zertifizierungsstelle Ihre Identität und erteilt Ihnen ein Codesignaturzertifikat. Wenn Sie Ihr Zertifikat von einer seriösen Zertifizierungsstelle erwerben, können Sie Ihr Skript für Benutzer auf anderen Computern freigeben, auf denen Windows ausgeführt wird, da diese anderen Computer der Zertifizierungsstelle vertrauen.

  • Zertifikate, die Sie erstellen: Sie können ein selbstsigniertes Zertifikat erstellen, für das Ihr Computer die Autorität ist, die das Zertifikat erstellt. Dieses Zertifikat ist kostenlos und ermöglicht Es Ihnen, Skripts auf Ihrem Computer zu schreiben, zu signieren und auszuführen. Ein skript, das von einem selbstsignierten Zertifikat signiert ist, wird jedoch nicht auf anderen Computern ausgeführt.

In der Regel verwenden Sie ein selbstsigniertes Zertifikat nur zum Signieren von Skripts, die Sie für Ihre eigene Verwendung schreiben, und zum Signieren von Skripts, die Sie von anderen Quellen erhalten, die Sie als sicher überprüft haben. Es ist nicht für Skripts geeignet, die freigegeben werden, auch nicht innerhalb eines Unternehmens.

Wenn Sie ein selbstsigniertes Zertifikat erstellen, stellen Sie sicher, dass Sie einen starken Schutz für private Schlüssel für Ihr Zertifikat aktivieren. Dadurch wird verhindert, dass bösartige Programme Skripts in Ihrem Namen signieren. Die Anweisungen finden Sie am Ende dieses Themas.

Erstellen eines selbstsignierten Zertifikats

Verwenden Sie zum Erstellen eines selbstsignierten Zertifikats das Cmdlet New-SelfSignedCertificate im PKI-Modul. Dieses Modul wird in PowerShell 3.0 eingeführt. Weitere Informationen finden Sie im Hilfethema zum New-SelfSignedCertificate Cmdlet.

$params = @{
    Subject = 'CN=PowerShell Code Signing Cert'
    Type = 'CodeSigning'
    CertStoreLocation = 'Cert:\CurrentUser\My'
    HashAlgorithm = 'sha256'
}
$cert = New-SelfSignedCertificate @params

Verwenden von Makecert.exe

Um ein selbstsigniertes Zertifikat in früheren Versionen von Windows zu erstellen, verwenden Sie das Tool zum MakeCert.exeErstellen von Zertifikaten. Dieses Tool ist im Microsoft .NET SDK (Version 1.1 und höher) und im Microsoft Windows SDK enthalten.

Weitere Informationen zur Syntax und zu den Parameterbeschreibungen des MakeCert.exe Tools finden Sie unter Certificate Creation Tool (MakeCert.exe).

Um das MakeCert.exe Tool zum Erstellen eines Zertifikats zu verwenden, führen Sie die folgenden Befehle in einem SDK-Eingabeaufforderungsfenster aus.

Hinweis

Mit dem ersten Befehl wird eine lokale Zertifizierungsstelle für Ihren Computer erstellt. Der zweite Befehl generiert ein persönliches Zertifikat von der Zertifizierungsstelle. Sie können die Befehle genau so kopieren oder eingeben, wie sie angezeigt werden. Es sind keine Ersetzungen erforderlich, obwohl Sie den Zertifikatnamen ändern können.

makecert -n "CN=PowerShell Local Certificate Root" -a sha256 `
-eku 1.3.6.1.5.5.7.3.3 -r -sv root.pvk root.cer `
-ss Root -sr localMachine

makecert -pe -n "CN=PowerShell User" -ss MY -a sha256 `
-eku 1.3.6.1.5.5.7.3.3 -iv root.pvk -ic root.cer

Das MakeCert.exe Tool fordert Sie zur Eingabe eines Kennworts für einen privaten Schlüssel auf. Das Kennwort stellt sicher, dass niemand das Zertifikat ohne Ihre Zustimmung verwenden oder darauf zugreifen kann. Create und geben Sie ein Kennwort ein, das Sie sich merken können. Sie verwenden dieses Kennwort später, um das Zertifikat abzurufen.

Um zu überprüfen, ob das Zertifikat ordnungsgemäß generiert wurde, verwenden Sie den folgenden Befehl, um das Zertifikat im Zertifikatspeicher auf dem Computer abzurufen. Sie finden keine Zertifikatdatei im Dateisystemverzeichnis.

Geben Sie an der PowerShell-Eingabeaufforderung Folgendes ein:

Get-ChildItem cert:\CurrentUser\my -codesigning

Dieser Befehl verwendet den PowerShell-Zertifikatanbieter, um Informationen zum Zertifikat anzuzeigen.

Wenn das Zertifikat erstellt wurde, zeigt die Ausgabe den Fingerabdruck an, der das Zertifikat in einer Anzeige identifiziert, die der folgenden ähnelt:

Directory: Microsoft.PowerShell.Security\Certificate::CurrentUser\My

Thumbprint                                Subject
----------                                -------
4D4917CB140714BA5B81B96E0B18AAF2C4564FDF  CN=PowerShell User ]

Signieren eines Skripts

Nachdem Sie ein selbstsigniertes Zertifikat erstellt haben, können Sie Skripts signieren. Wenn Sie die Ausführungsrichtlinie AllSigned verwenden, können Sie beim Signieren eines Skripts das Skript auf Ihrem Computer ausführen.

Das folgende Beispielskript signiert Add-Signature.ps1ein Skript. Wenn Sie jedoch die Ausführungsrichtlinie AllSigned verwenden, müssen Sie das Add-Signature.ps1 Skript signieren, bevor Sie es ausführen.

Wichtig

Vor PowerShell 7.2 muss das Skript mithilfe der ASCII- oder UTF8NoBOM-Codierung gespeichert werden. PowerShell 7.2 und höher unterstützt signierte Skripts für jedes Codierungsformat.

Um dieses Skript zu verwenden, kopieren Sie den folgenden Text in eine Textdatei, und nennen Sie ihn Add-Signature.ps1.

## Signs a file
[cmdletbinding()]
param(
    [Parameter(Mandatory=$true)]
    [string] $File
)

$cert = Get-ChildItem Cert:\CurrentUser\My -CodeSigningCert |
    Select-Object -First 1

Set-AuthenticodeSignature -FilePath $File -Certificate $cert

Geben Sie zum Signieren der Add-Signature.ps1 Skriptdatei die folgenden Befehle an der PowerShell-Eingabeaufforderung ein:

$cert = Get-ChildItem Cert:\CurrentUser\My -CodeSigningCert |
    Select-Object -First 1

Set-AuthenticodeSignature add-signature.ps1 $cert

Nachdem Sie das Skript signiert haben, können Sie es auf dem lokalen Computer ausführen. Das Skript wird jedoch nicht auf Computern ausgeführt, auf denen die PowerShell-Ausführungsrichtlinie eine digitale Signatur von einer vertrauenswürdigen Autorität erfordert. Wenn Sie versuchen, zeigt PowerShell die folgende Fehlermeldung an:

The file C:\remote_file.ps1 cannot be loaded. The signature of the
certificate cannot be verified.
At line:1 char:15
+ .\ remote_file.ps1 <<<<

Wenn PowerShell diese Meldung anzeigt, wenn Sie ein Skript ausführen, das Sie nicht geschrieben haben, behandeln Sie die Datei wie jedes nicht signierte Skript. Überprüfen Sie den Code, um zu ermitteln, ob Sie dem Skript vertrauen können.

Aktivieren des starken Schutzes für Ihren privaten Schlüssel

Wenn Sie über einen privaten Schlüssel und ein Zertifikat auf Ihrem Computer verfügen, können bösartige Programme möglicherweise Skripts in Ihrem Namen signieren, wodurch PowerShell die Ausführung dieser Skripts autorisiert.

Um die automatisierte Signierung in Ihrem Namen zu verhindern, verwenden Sie den Zertifikat-Manager Certmgr.exe , um Ihren Signaturschlüssel und Ihr Zertifikat in eine .pfx Datei zu exportieren. Der Zertifikat-Manager ist im Microsoft .NET SDK, im Microsoft Windows SDK und im Internet Explorer enthalten.

So exportieren Sie das Zertifikat:

  1. Starten Sie den Zertifikat-Manager.
  2. Wählen Sie das zertifikat aus, das vom lokalen Zertifikatstamm von PowerShell ausgestellt wurde.
  3. Klicken Sie auf Exportieren , um den Zertifikatexport-Assistenten zu starten.
  4. Wählen Sie Ja, privaten Schlüssel exportieren aus, und klicken Sie dann auf Weiter.
  5. Wählen Sie Starken Schutz aktivieren aus.
  6. Geben Sie ein Kennwort ein, und geben Sie es zur Bestätigung erneut ein.
  7. Geben Sie einen Dateinamen mit der .pfx Dateinamenerweiterung ein.
  8. Klicken Sie auf Fertig stellen.

So importieren Sie das Zertifikat erneut:

  1. Starten Sie den Zertifikat-Manager.
  2. Klicken Sie auf Importieren , um den Zertifikatimport-Assistenten zu starten.
  3. Öffnen Sie den Speicherort der .pfx Datei, die Sie während des Exportvorgangs erstellt haben.
  4. Wählen Sie auf der Seite Kennwort die Option Schutz für starken privaten Schlüssel aktivieren aus, und geben Sie dann das Kennwort ein, das Sie während des Exportvorgangs zugewiesen haben.
  5. Wählen Sie den Zertifikatspeicher Persönlich aus.
  6. Klicken Sie auf Fertig stellen.

Verhindern, dass die Signatur abläuft

Die digitale Signatur in einem Skript ist gültig, bis das Signaturzertifikat abläuft oder ein Zeitstempelserver überprüfen kann, ob das Skript signiert wurde, während das Signaturzertifikat gültig war.

Da die meisten Signaturzertifikate nur für ein Jahr gültig sind, stellt die Verwendung eines Zeitstempelservers sicher, dass Benutzer Ihr Skript für die kommenden Jahre verwenden können.

Weitere Informationen