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)