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.
Kurzbeschreibung
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 Richtlinie für die eingeschränkte Ausführung lässt die Ausführung von Skripts nicht zu. Die AllSigned- und RemoteSigned- Ausführungsrichtlinien verhindern, dass PowerShell Skripts ausführt, die keine digitale Signatur besitzen.
In diesem Thema wird erläutert, wie ausgewählte Skripts ausgeführt werden, die nicht signiert sind, selbst wenn die Ausführungsrichtlinie auf RemoteSignedgesetzt ist, und wie Sie Skripts für Ihren eigenen Gebrauch signieren können.
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 die Eingeschränkte Ausführungsrichtlinie, die der Standardwert ist, wahrscheinlich 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 mithilfe der RemoteSigned-Ausführungsrichtlinie
Wenn Ihre PowerShell-Ausführungsrichtlinie RemoteSigned-ist, 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 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 das folgende Verfahren.
- Speichern Sie die Skriptdatei auf Ihrem Computer.
- Klicken Sie auf Start-, klicken Sie auf "Mein Computer", und suchen Sie die gespeicherte Skriptdatei.
- Klicken Sie mit der rechten Maustaste auf die Skriptdatei, und klicken Sie dann auf Eigenschaften.
- 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. Wenn Sie dem Herausgeber nicht vertrauen, wählen Sie entweder Niemals ausführen oder Nicht ausführen. Wenn Sie Niemals ausführen oder Immer ausführen wählen, wird PowerShell Sie nicht erneut nach diesem Herausgeber fragen.
Methoden des Signierens von Skripts
Sie können die skripts signieren, die Sie schreiben, und die Skripts, die Sie aus anderen Quellen erhalten. Bevor Sie ein Skript signieren, überprüfen Sie jeden Befehl, um zu überprüfen, ob es 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 im PKI-Modul in PowerShell 3.0 eingeführte cmdlet New-SelfSignedCertificate erstellt ein selbstsigniertes Zertifikat, das zum Testen 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 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 Cmdlet New-SelfSignedCertificate.
$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 Zertifikaterstellungstool MakeCert.exe. Dieses Tool ist im Microsoft .NET SDK (Version 1.1 und höher) und im Microsoft Windows SDK enthalten.
Weitere Informationen zur Syntax und den Parameterbeschreibungen des MakeCert.exe Tools finden Sie unter Zertifikaterstellungstool (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
Der erste Befehl erstellt eine lokale Zertifizierungsstelle für Ihren Computer. Der zweite Befehl generiert ein persönliches Zertifikat von der Zertifizierungsstelle. Sie können die Befehle genauso 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 mit privatem 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 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 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 AllSigned Ausführungsrichtlinie verwenden, können Sie mit dem 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.
Von Bedeutung
Vor PowerShell 7.2 muss das Skript in der Codierung ASCII oder UTF8NoBOM gespeichert werden. PowerShell 7.2 und höher unterstützt signierte Skripte für jedes Kodierungsformat.
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
Um die skriptdatei Add-Signature.ps1 zu signieren, geben Sie an der PowerShell-Eingabeaufforderung die folgenden Befehle 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 eines 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 Auftrag signieren, wodurch PowerShell zum Ausführen autorisiert wird.
Um die automatisierte Anmeldung in Ihrem Auftrag zu verhindern, verwenden Sie den Zertifikat-Manager Certmgr.exe, um Den Signaturschlüssel und das Zertifikat in eine .pfx Datei zu exportieren.
Der Zertifikat-Manager ist im Microsoft .NET SDK, im Microsoft Windows SDK und in Internet Explorer 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 Assistenten für den Zertifikatexport zu starten.
- Wählen Sie Ja aus, exportieren Sie den privaten Schlüssel, 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
.pfxein. - Klicken Sie auf Fertig stellen.
So importieren Sie das Zertifikat erneut:
- Starten Sie den Zertifikat-Manager.
- Klicken Sie auf Import, um den Zertifikatimport-Assistenten zu starten.
- Öffnen Sie den Speicherort der
.pfxDatei, die Sie während des Exportvorgangs erstellt haben. - Wählen Sie auf der Seite "Kennwort" "Schutz sicherer privater Schlüssel aktivieren"aus, und geben Sie dann das Kennwort ein, das Sie während des Exportvorgangs zugewiesen haben.
- Wählen Sie den Zertifikatspeicher Persönlich 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.