THEMA
about_signing
KURZBESCHREIBUNG
Erklärt, wie Skripts signiert werden, damit sie den Windows
PowerShell-Ausführungsrichtlinien entsprechen.
DETAILBESCHREIBUNG
Die Ausführungsrichtlinie "Restricted" lässt keine Ausführung von
Skripts zu.
Die Ausführungsrichtlinien "AllSigned" und "RemoteSigned"
verhindern, dass Windows PowerShell Skripts ohne digitale
Signatur ausführt.
In diesem Thema wird erläutert, wie ausgewählte nicht signierte
Skripts trotz der Ausführungsrichtlinie "RemoteSigned" ausgeführt
werden und wie Sie Skripts für die eigene Verwendung signieren können.
Weitere Informationen über Windows PowerShell-Ausführungsrichtlini
en finden Sie unter "about_Execution_Policy".
SO LASSEN SIE DAS AUSFÜHREN SIGNIERTER SKRIPTS ZU
-------------------------------
Wenn Sie Windows PowerShell erstmals auf einem Computer starten,
ist vermutlich die Ausführungsrichtlinie "Restricted"
(Standardeinstellung) gültig.
Die Richtlinie "Restricted" lässt keine Ausführung von Skripts zu.
Um die gültige Ausführungsrichtlinie auf dem Computer zu suchen,
geben Sie Folgendes ein:
get-executionpolicy
Um nicht signierte Skripts, die Sie auf dem lokalen Computer
schreiben, und signierte Skripts anderer Benutzer auszuführen,
verwenden Sie den folgenden Befehl, um die Ausführungsrichtlinie
auf dem Computer in "RemoteSigned" zu ändern:
set-executionpolicy remotesigned
Weitere Informationen finden Sie unter "Set-ExecutionPolicy".
AUSFÜHREN NICHT SIGNIERTER SKRIPTS (AUSFÜHRUNGSRICHTLINIE "REMOTESIGNED")
--------------------------------------------------------
Wenn Sie in Windows PowerShell die Ausführungsrichtli
nie "RemoteSigned" festgelegt haben, werden keine aus dem Internet
heruntergeladenen Skripts ohne Signatur ausgeführt (einschließlich
nicht signierter Skripts, die Sie über E-Mail- und Instant
Messaging-Programme empfangen).
Wenn Sie ein heruntergeladenes Skript ausführen möchten, wird
folgende Fehlermeldung von Windows PowerShell angezeigt:
Die Datei <Dateiname> kann nicht geladen werden. Die Datei
<Dateiname> ist nicht digital signiert. Das Skript
wird auf dem System nicht ausgeführt. Weitere Informationen
erhalten Sie mit "Get-Help about_signing".
Überprüfen Sie den Code auf Vertrauenswürdigkeit, bevor Sie das
Skript ausführen.
Skripts haben die gleichen Auswirkungen wie ausführbare Programme.
So führen Sie ein nicht signiertes Skript aus
1. Speichern Sie die Skriptdatei auf Ihrem Computer.
2. Klicken Sie auf "Start" und anschließend 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 "Zulassen".
Wenn Sie ein Skript mit einer digitalen Signatur aus dem Internet
heruntergeladen, aber noch nicht angegeben haben, ob Sie dem
Herausgeber vertrauen, zeigt Windows PowerShell folgende Meldung an:
Möchten Sie Software dieses nicht vertrauenswürdigen Herausgebers
ausführen? Die Datei <Dateiname> wurde von "CN=<Name des
Herausgebers>" veröffentlicht. Dieser Herausgeber gilt auf Ihrem
System als nicht vertrauenswürdig. Führen Sie ausschließlich Skripts
vertrauenswürdiger Herausgeber aus.
[E] Nie ausführen [N] Nicht ausführen [M] Einmal ausführen
[A] Immer ausführen [?] Hilfe ("N" ist die Standardeinstellung):
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, wird von Windows
PowerShell für diesen Herausgeber keine weitere Bestätigung
angefordert.
METHODEN ZUR SKRIPTSIGNIERUNG
--------------------------
Sie können selbst erstellte Skripts und Skripts, die Sie aus
anderen Quellen erhalten, signieren. Überprüfen Sie jeden Befehl
im Hinblick auf eine sichere Ausführung, bevor Sie ein Skript
signieren.
Best Practices zu Codesignaturen finden Sie in "Best Practices zu
Codesignaturen" unter "https://go.microsoft.com/fwlink/?LinkId=119096"
(möglicherweise auf Englisch).
Weitere Informationen über das Signieren einer Skriptdatei finden
Sie unter "Set-AuthenticodeSignature".
Um ein Skript digital zu signieren, müssen Sie es mit einem
Codesignaturzertifikat versehen. Dazu stehen zwei Arten von
Zertifikaten zur Verfügung:
-- Zertifikate von einer Zertifizierungsstelle:
Gegen eine Gebühr wird Ihre Identität von einer
öffentlichen Zertifizierungsstelle überprüft, und Sie
erhalten ein Codesignaturzertifikat. Wenn Sie ein
Zertifikat von einer renommierten Zertifizierungsstelle
erwerben, können Sie Ihr Skript mit anderen Benutzern
gemeinsam verwenden, auf deren Computern Windows
ausgeführt wird, da diese der Zertifizierungsstelle vertrauen.
-- Selbst erstellte Zertifikate:
Wenn Sie ein Zertifikat mit eigener Signatur erstellen,
stellt Ihr Computer die Zertifizierungsstelle dar.
Dieses Zertifikat ist gebührenfrei und ermöglicht es
Ihnen, Skripts auf Ihrem Computer zu schreiben, zu
signieren und auszuführen. Ein Skript mit einem selbst
signierten Zertifikat wird jedoch auf anderen Computern
nicht ausgeführt.
In der Regel verwenden Sie ein selbst signiertes Zertifikat nur
zum Signieren von Skripts für die eigene Verwendung und von
Skripts, die Sie aus anderen Quellen abrufen, deren Sicherheit
Sie überprüft haben. Dies ist nicht geeignet für Skripts, die
freigegeben werden, auch wenn dies nur innerhalb eines
Unternehmens erfolgt.
Wenn Sie ein Zertifikat mit eigener Signatur erstellen, müssen
Sie eine hohe Sicherheit für den privaten Schlüssel des
Zertifikats aktivieren. Dadurch wird verhindert, dass Skripts in
Ihrem Namen von bösartigen Programmen signiert werden.
Anweisungen hierzu erhalten Sie am Ende dieses Themas.
ERSTELLEN EINES EIGENEN ZERTIFIKATS
--------------------------------
Um ein Zertifikat mit eigener Signatur zu erstellen, verwenden Sie das
Zertifikaterstellungstool ("MakeCert.exe"). Dieses Tool ist im
Microsoft .NET Framework SDK (Version 1.1 und höher) und dem
Microsoft Windows SDK enthalten.
Weitere Informationen über die Syntax und die Parameterbeschreibun
gen des Tools "MakeCert.exe" finden Sie in der MSDN (Microsoft
Developer Network) Library im Thema "Certificate Creation-Tool
(Makecert.exe)" unter "https://go.microsoft.com/fwlink/?LinkId=1190
97" (möglicherweise auf Englisch).
Um mit dem Tool "MakeCert.exe" ein Zertifikat zu erstellen,
führen Sie die folgenden Befehle in einem Eingabeaufforderungsfens
ter des SDK aus.
Hinweis: Mit dem ersten Befehl wird eine lokale Zertifizierungsste
lle für den Computer erstellt. Mit dem zweiten Befehl wird ein
persönliches Zertifikat von der Zertifizierungsstelle generiert.
Hinweis: Sie können die Befehle genau so kopieren oder eingeben,
wie sie angezeigt werden.
Es sind keine Ersetzungen erforderlich, Sie können aber den
Zertifikatnamen ändern.
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
Sie werden vom Tool "MakeCert.exe" aufgefordert, ein Kennwort für den
privaten Schlüssel einzugeben. Mit dem Kennwort wird sichergestellt,
dass ohne Ihre Genehmigung kein anderer Benutzer das Zertifikat
verwenden oder darauf zugreifen kann. Erstellen Sie ein Kennwort, das
Sie sich leicht merken können, und geben Sie dieses ein. Sie rufen
später das Zertifikat mithilfe dieses Kennworts ab.
Um zu überprüfen, ob das Zertifikat ordnungsgemäß generiert
wurde, verwenden Sie den folgenden Befehl, um das Zertifikat im
Zertifikatspeicher auf dem Computer abzurufen. (Im Dateisystemverz
eichnis wird keine Zertifikatsdatei aufgeführt.)
Geben Sie an der Windows PowerShell-Eingabeaufforderung folgenden
Befehl ein:
get-childitem cert:\CurrentUser\my -codesigning
Durch diesen Befehl werden mit dem Windows PowerShell-Zertifikatan
bieter Informationen über das Zertifikat angezeigt.
Wenn das Zertifikat erstellt wurde, wird in der Ausgabe der
Fingerabdruck angezeigt, der das Zertifikat identifiziert. Diese
Anzeige sieht etwa folgendermaßen aus:
Verzeichnis: Microsoft.PowerShell.Security\Zertifikat::CurrentUser\My
Fingerabdruck Subject
---------- -------
4D4917CB140714BA5B81B96E0B18AAF2C4564FDF CN=PowerShell User ]
SIGNIEREN EINES SKRIPTS
-----------------------
Nachdem Sie ein Zertifikat mit eigener Signatur erstellt haben,
können Sie Skripts signieren. Wenn Sie die Ausführungsrichtlinie
"AllSigned" verwenden, ermöglicht das Signieren eines Skripts die
Ausführung desselben auf Ihrem Computer.
Mit dem folgenden Beispielskript "Add-Signature.ps1" wird ein
Skript signiert. Wenn Sie jedoch die Ausführungsrichtlinie
"AllSigned" verwenden, müssen Sie das Skript "Add-Signature.ps1"
vor seiner Ausführung signieren.
Kopieren Sie den folgenden Text in eine Textdatei und benennen
Sie diese mit "Add-Signature.ps1", um das Skript zu verwenden.
Hinweis: Die Skriptdatei darf nicht die Erweiterung ".txt"
aufweisen. Wenn der Text-Editor ".txt" anfügt, schließen Sie den
Dateinamen in Anführungszeichen ein: "add-signature.ps1".
## add-signature.ps1
## Signiert eine Datei
param([string] $file=$(throw "Geben Sie einen Dateinamen an."))
$cert = @(Get-ChildItem cert:\CurrentUser\My -codesigning)[0]
Set-AuthenticodeSignature $file $cert
Geben Sie folgende Befehle an der Windows PowerShell-Eingabeauffor
derung ein, um die Skriptdatei "Add-Signature.ps1" zu signieren:
$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 kann jedoch nicht auf Computern
ausgeführt werden, für die die Ausführungsrichtlinie von Windows
PowerShell eine digitale Signatur von einem vertrauenswürdigen
Herausgeber erfordert. Bei dem Versuch, das Skript auszuführen,
wird in diesem Fall die folgende Fehlermeldung von Windows PowerShell
angezeigt:
Die Datei "C:\remote_file.ps1" kann nicht geladen werden. Die
Signatur des Zertifikats konnte nicht bestätigt werden.
Bei Zeile:1 Zeichen:15
+ .\ remote_file.ps1 <<<<
Wenn diese Meldung von Windows PowerShell bei der Ausführung
eines Skripts angezeigt wird, das Sie nicht erstellt haben,
behandeln Sie diese Datei wie ein nicht signiertes Skript.
Überprüfen Sie den Code, um zu ermitteln, ob das Skript
vertrauenswürdig ist.
HOHE SICHERHEIT DURCH PRIVATEN SCHLÜSSEL FÜR DAS ZERTIFIKAT AKTIVIEREN
----------------------------------------------------------------------
Wenn Sie auf Ihrem Computer über ein privates Zertifikat
verfügen, können bösartige Programme möglicherweise Skripts in
Ihrem Namen signieren, die daraufhin von Windows PowerShell
ausgeführt werden können.
Mit dem Zertifikat-Manager ("Certmgr.exe") können Sie das
Signaturzertifikat in eine PFX-Datei exportieren und so das
automatische Signieren in Ihrem Namen verhindern. Der
Zertifikat-Manager ist im Microsoft .NET Framework SDK, im
Microsoft Windows SDK sowie in Internet Explorer 5.0 oder höher
enthalten.
So exportieren Sie das Zertifikat
1. Starten Sie den Zertifikat-Manager.
2. Wählen Sie das von "PowerShell Local Certificate Root"
ausgestellte Zertifikat aus.
3. Klicken Sie auf "Exportieren", um den Zertifikatexport-Assi
stenten zu starten.
4. Wählen Sie "Ja, privaten Schlüssel exportieren" aus, und
klicken Sie auf anschließend "Weiter".
5. Wählen Sie "Hohen Schutz aktivieren" aus.
6. Geben Sie ein Kennwort ein, und bestätigen Sie es durch
erneute Eingabe.
7. Geben Sie einen Dateinamen mit der Dateinamenerweiterung
".pfx" 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-Assi
stenten 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 "Hohe
Sicherheit für privaten Schlüssel aktivieren" aus, und geben
Sie das Kennwort ein, das Sie beim Export zugewiesen haben.
5. Wählen Sie den Zertifikatspeicher "Persönlich" aus.
6. Klicken Sie auf "Fertig stellen".
VERHINDERN DES ABLAUFENS DER SIGNATUR
-----------------------------------
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,
wird mit einem Zeitstempelserver sichergestellt, dass die
Benutzer Ihr Skript mehrere Jahre verwenden können.
SIEHE AUCH
about_Execution_Policies
about_Profiles
Get-ExecutionPolicy
Set-ExecutionPolicy
Set-AuthenticodeSignature
"Einführung in das Signieren von Code" ("https://go.microsoft.com/fwlink/?LinkId=106296",
(möglicherweise auf Englisch)