Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
KURZE BESCHREIBUNG
Erläutert, wie Skripts signiert werden, damit sie den PowerShell-Ausführungsrichtlinien entsprechen.
LANGE BESCHREIBUNG
Die Richtlinie für die eingeschränkte Ausführung lässt das Ausführen von Skripts nicht zu. Die Ausführungsrichtlinien AllSigned und RemoteSigned verhindern, dass PowerShell Skripts ausführt, die nicht über eine digitale Signatur verfügen.
In diesem Thema wird erläutert, wie Sie ausgewählte Skripts ausführen, die nicht signiert sind, auch wenn die Ausführungsrichtlinie RemoteSigned ist, 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 (Standardeinstellung) wirksam.
Die Richtlinie "Eingeschränkt" lässt das Ausführen von Skripts nicht zu.
Um die effektive Ausführungsrichtlinie auf Ihrem Computer zu finden, geben Sie Folgendes ein:
Get-ExecutionPolicy
Um nicht signierte Skripts, die Sie auf Ihrem lokalen Computer schreiben, und signierte Skripts von anderen Benutzern auszuführen, 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 Cmdlet Set-ExecutionPolicy.
AUSFÜHREN VON NICHT SIGNIERTEN SKRIPTS (REMOTESIGNED EXECUTION POLICY)
Wenn Ihre PowerShell-Ausführungsrichtlinie RemoteSigned ist, führt Windows PowerShell keine nicht signierten Skripts aus, die aus dem Internet heruntergeladen werden, einschließlich nicht signierter Skripts, die Sie über E-Mail- und Instant Messaging-Programme 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 es vertrauen. Skripts haben dieselbe Wirkung wie jedes ausführbare Programm.
Verwenden Sie zum Ausführen eines nicht signierten Skripts das Cmdlet Unblock-File, oder verwenden Sie das folgende Verfahren.
- Speichern Sie die Skriptdatei auf Ihrem Computer.
- Klicken Sie auf Start, klicken Sie auf Arbeitsplatz, und suchen Sie die gespeicherte Skriptdatei.
- Klicken Sie mit der rechten Maustaste auf die Skriptdatei, und klicken Sie dann auf Eigenschaften.
- Klicken Sie auf Blockierung aufheben.
Wenn ein Skript, das aus dem Internet heruntergeladen wurde, digital signiert ist, Sie sich aber noch nicht 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". Wenn Sie dem Publisher nicht vertrauen, wählen Sie entweder "Nie ausführen" oder "Nicht ausführen". 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 SKRIPTEN
Sie können die Skripts, die Sie schreiben, und die Skripts, die Sie aus anderen Quellen beziehen, signieren. Bevor Sie ein Skript signieren, überprüfen Sie jeden Befehl, um sicherzustellen, dass er sicher ausgeführt werden kann.
Bewährte Methoden für die Codesignierung finden Sie unter Code-Signing Best Practices.
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 Cmdlet New-SelfSignedCertificate.
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: Für eine Gebühr überprüft eine öffentliche Zertifizierungsstelle Ihre Identität und gibt 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 Ihren eigenen Gebrauch schreiben, und zum Signieren von Skripts, die Sie aus anderen Quellen erhalten, die Sie als sicher überprüft haben. Es ist nicht geeignet für Skripts, die freigegeben werden, auch nicht innerhalb eines Unternehmens.
Wenn Sie ein selbstsigniertes Zertifikat erstellen, müssen Sie unbedingt einen starken privaten Schlüsselschutz für Ihr Zertifikat aktivieren. Dadurch wird verhindert, dass bösartige Programme Skripts in Ihrem Auftrag signieren. Die Anweisungen sind am Ende dieses Themas enthalten.
ERSTELLEN EINES SELF-SIGNED ZERTIFIKATS
Um ein selbstsigniertes Zertifikat zu erstellen, verwenden Sie das Cmdlet New-SelfSignedCertificate im PKI-Modul. Dieses Modul wurde in PowerShell 3.0 eingeführt und ist in Windows 8 und Windows Server 2012 enthalten. Weitere Informationen finden Sie im Hilfethema zum Cmdlet New-SelfSignedCertificate.
Um ein selbstsigniertes Zertifikat in früheren Versionen von Windows zu erstellen, verwenden Sie das Tool zum Erstellen von Zertifikaten (MakeCert.exe). Dieses Tool ist im Microsoft .NET Framework 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 Tool MakeCert.exe 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.
Hinweis: 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 sha1 `
-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 sha1 `
-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 Passworts für den privaten Schlüssel auf. Das Kennwort stellt sicher, dass niemand das Zertifikat ohne Ihre Zustimmung verwenden oder darauf zugreifen kann. Erstellen Sie ein Kennwort, das Sie sich merken können, und geben Sie es ein. Sie werden dieses Kennwort später verwenden, 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 werden keine Zertifikatsdatei im Dateisystemverzeichnis finden.)
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 zur Identifizierung des Zertifikats in einer Anzeige an, die in etwa wie folgt aussieht:
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 durch Signieren eines Skripts das Skript auf Ihrem Computer ausführen.
Das folgende Beispielskript, Add-Signature.ps1, signiert ein Skript. Wenn Sie jedoch die AllSigned-Ausführungsrichtlinie verwenden, müssen Sie das Add-Signature.ps1 Skript signieren, bevor Sie es ausführen.
Um dieses Skript zu verwenden, kopieren Sie den folgenden Text in eine Textdatei, und nennen Sie ihn Add-Signature.ps1.
## Signs a file
param([string] $file=$(throw "Please specify a filename."))
$cert = @(Get-ChildItem cert:\CurrentUser\My -codesigning)[0]
Set-AuthenticodeSignature $file $cert
Um die Add-Signature.ps1 Skriptdatei zu signieren, geben Sie die folgenden Befehle an der PowerShell-Eingabeaufforderung ein:
$cert = @(Get-ChildItem cert:\CurrentUser\My -codesigning)[0]
Set-AuthenticodeSignature add-signature.ps1 $cert
Nachdem das Skript signiert wurde, 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 Zertifizierungsstelle 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 andere nicht signierte Skript. Überprüfen Sie den Code, um zu ermitteln, ob Sie dem Skript vertrauen können.
AKTIVIEREN EINES STARKEN SCHUTZES FÜR PRIVATE SCHLÜSSEL FÜR IHR ZERTIFIKAT
Wenn Sie über ein privates Zertifikat auf Ihrem Computer verfügen, können schädliche Programme möglicherweise Skripts in Ihrem Namen signieren, wodurch PowerShell zum Ausführen autorisiert wird.
Um die automatische Signierung in Ihrem Namen zu verhindern, verwenden Sie den Zertifikat-Manager (Certmgr.exe), um Ihr Signaturzertifikat in eine PFX-Datei zu exportieren. Der Zertifikat-Manager ist im Microsoft .NET Framework SDK, im Microsoft Windows SDK sowie in Internet Explorer 5.0 und höher enthalten.
So exportieren Sie das Zertifikat:
- Starten Sie den Zertifikat-Manager.
- Wählen Sie das Zertifikat aus, das vom lokalen PowerShell-Zertifikatstamm ausgestellt wurde.
- Klicken Sie auf Exportieren, um den Zertifikatexport-Assistenten zu starten.
- Wählen Sie "Ja, privaten Schlüssel exportieren" aus, und klicken Sie dann auf Weiter.
- Wählen Sie "Starken Schutz aktivieren".
- Geben Sie ein Kennwort ein, und geben Sie es erneut ein, um es zu bestätigen.
- Geben Sie einen Dateinamen mit der Dateinamenerweiterung PFX ein.
- Klicken Sie auf Fertig stellen.
So importieren Sie das Zertifikat erneut:
- Starten Sie den Zertifikat-Manager.
- Klicken Sie auf Importieren, um den Zertifikatimport-Assistenten zu starten.
- Öffnen Sie den Speicherort der PFX-Datei, die Sie während des Exportvorgangs erstellt haben.
- Wählen Sie auf der Seite "Kennwort" die Option "Starken Schutz des privaten Schlüssels aktivieren" aus, und geben Sie dann das Kennwort ein, das Sie während des Exportvorgangs zugewiesen haben.
- Wählen Sie den persönlichen Zertifikatspeicher aus.
- 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 solange ein Zeitstempelserver überprüfen kann, ob das Skript signiert wurde, während das Signaturzertifikat gültig war.
Da die meisten Signaturzertifikate nur ein Jahr gültig sind, stellt die Verwendung eines Zeitstempelservers sicher, dass Benutzer Ihr Skript für viele Jahre verwenden können.