about_Signing

Letzte Aktualisierung: Mai 2014

Betrifft: Windows PowerShell 2.0, Windows PowerShell 3.0, Windows PowerShell 4.0, Windows PowerShell 5.0

THEMA

about_Signing

KURZE BESCHREIBUNG

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

LANGE BESCHREIBUNG

Die Ausführungsrichtlinie „Restricted“ verhindert die Ausführung aller Skripts. Dagegen verhindern die Ausführungsrichtlinien „AllSigned“ und „RemoteSigned“, dass Windows PowerShell Skripts ausführt, die nicht über eine digitale Signatur verfügen.

In diesem Thema wird erläutert, wie selbst bei Verwendung der Ausführungsrichtlinie „RemoteSigned“ ausgewählte Skripts ausgeführt werden können, die nicht signiert sind, sowie wie Sie Skripts zur eigenen Verwendung signieren können.

Weitere Informationen zu den Windows PowerShell-Ausführungsrichtlinien finden Sie unter „about_Execution_Policy“.

ZULASSEN DER AUSFÜHRUNG SIGNIERTER SKRIPTS

Wenn Sie Windows PowerShell erstmalig auf einem Computer starten, wird wahrscheinlich die Ausführungsrichtlinie „Restricted“ (die Standardvorgabe) verwendet.

Die Richtlinie „Restricted“ verhindert die Ausführung aller Skripts.

Um die auf Ihrem Computer verwendete Ausführungsrichtlinie herauszufinden, geben Sie Folgendes ein:

        Get-ExecutionPolicy

Starten Sie zum Ausführen von unsignierten Skripts, die Sie auf Ihrem lokalen Computer schreiben, und von signierten Skripts, die Sie von anderen Benutzern erhalten, Windows PowerShell mit der Option „Als Administrator ausführen“, und verwenden Sie den folgenden Befehl, um die auf dem Computer verwendete Ausführungsrichtlinie in „RemoteSigned“ zu ändern:

        Set-ExecutionPolicy RemoteSigned

Weitere Informationen finden Sie im Hilfethema für das Set-ExecutionsPolicy-Cmdlet.

AUSFÜHREN VON UNSIGNIERTEN SKRIPTS (AUSFÜHRUNGSRICHTLINIE „REMOTESIGNED“)

Wenn Ihre Windows PowerShell-Ausführungsrichtlinie „RemoteSigned“ ist, führt Windows PowerShell keine unsignierten Skripts aus, die aus dem Internet heruntergeladen wurden, einschließlich der unsignierten Skripts, die Sie per E-Mail und Instant Messaging-Programme erhalten.

Wenn Sie versuchen, ein heruntergeladenes Skript ausführen, zeigt Windows 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, müssen Sie den Code überprüfen, um sicherzustellen, dass Sie diesem vertrauen. Skripts haben dieselbe Wirkung wie jedes ausführbare Programm.

  • 1. Speichern Sie die Skriptdatei auf Ihrem Computer.

  • 2. Klicken Sie auf „Start“, dann auf „Mein Computer“, und navigieren Sie zur gespeicherten Skriptdatei.

  • 3. Klicken Sie mit der rechten Maustaste auf die Skriptdatei, und klicken Sie dann auf „Eigenschaften“.

  • 4. Klicken Sie „Sperrung aufheben“.

Wenn ein aus dem Internet heruntergeladenes Skript digital signiert ist, aber Sie sich noch nicht entschieden haben, dessen Herausgeber zu vertrauen, zeigt Windows PowerShell die folgende Meldung an:

  • Möchten Sie die Software von diesem nicht vertrauenswürdigen Herausgeber ausführen? Die Datei <Dateiname> wurde von CN=<Herausgebername> veröffentlicht. Dieser Herausgeber ist auf Ihrem System nicht als vertrauenswürdig eingestuft. Führen Sie nur Skripts von vertrauenswürdigen Herausgebern aus.

  • [V] Niemals ausführen [D] Nicht ausführen [R] Einmal ausführen [A] Immer ausführen [?] Hilfe (Standardeinstellung ist „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 „Niemals ausführen“ oder „Nicht ausführen“. Wenn Sie die Option „Niemals ausführen“ oder „Immer ausführen“ auswählen, wird für diesen Herausgeber von Windows PowerShell keine erneute Aufforderung für diesen Verleger angezeigt.

METHODEN ZUM SIGNIEREN VON SKRIPTS

Sie können die Skripts signieren, die Sie schreiben, und auch die Skripts, die Sie aus anderen Quellen erhalten. Bevor Sie ein Skript signieren, müssen Sie jeden Befehl untersuchen, um sicherzustellen, dass seine Ausführung sicher ist.

Best Practices zum Signieren von Code finden Sie in „Code-Signing Best Practice“ unter https://go.microsoft.com/fwlink/?LinkId=119096.

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

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

Um einem Skript eine digitale Signatur hinzuzufügen, müssen Sie es mit einem Code-Signing-Zertifikat signieren. Zwei Typen von Zertifikaten eignen sich zum Signieren einer Skriptdatei:

  • – Zertifikate, die von einer Zertifizierungsstelle erstellt wurden:

    Eine öffentlichen Zertifizierungsstelle überprüft gegen eine Gebühr Ihre Identität und stellt Ihnen ein Code-Signing-Zertifikat zur Verfügung. Wenn Sie Ihr Zertifikat von einer vertrauenswürdigen Zertifizierungsstelle erworben haben, können Sie Ihr Skript mit Benutzern auf anderen Computern teilen, die Windows ausführen, weil diese anderen Computer der Zertifizierungsstelle vertrauen.

  • – Zertifikate, die Sie erstellen:

    Sie können ein selbst signiertes Zertifikat erstellen, für das Ihr Computer die Zertifizierungsstelle ist. Dieses Zertifikat ist kostenlos und ermöglicht es Ihnen, Skripts auf Ihrem Computer zu schreiben, zu signieren und auszuführen. Ein Skript, das mit einem selbst signierten Zertifikat signiert wurde, kann jedoch nicht auf anderen Computern ausgeführt werden.

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

Wenn Sie ein selbst signiertes Zertifikat erstellen, müssen Sie darauf achten, dass Sie für das Zertifikat die verstärkte Sicherheit für den privaten Schlüssel aktivieren. Dadurch wird verhindert, dass böswillige Programme Skripts in Ihrem Namen signieren. Die entsprechenden Anweisungen befinden sich am Ende dieses Themas.

ERSTELLEN EINES SELBST SIGNIERTEN ZERTIFIKATS

Um ein selbst signiertes Zertifikat zu erstellen, verwenden Sie das New-SelfSignedCertificate-Cmdlet im PKI-Modul. Dieses Modul wurde in Windows PowerShell 3.0 eingeführt und ist in Windows 8 und Windows Server 2012 enthalten. Weitere Informationen finden Sie im Hilfethema für das New-SelfSignedCertificate-Cmdlet.

Um ein selbst signiertes Zertifikat in früheren Versionen von Windows zu erstellen, verwenden Sie das Certificate Creation Tool (MakeCert.exe). Dieses Tool ist in Microsoft .NET Framework SDK (Version 1.1 und höher) und in Microsoft Windows SDK enthalten.

Weitere Informationen über die Syntax sowie die Beschreibung der Parameter des MakeCert.exe-Tools finden Sie unter „Certificate Creation Tool (MakeCert.exe)“ in der MSDN-Bibliothek (Microsoft Developer Network) unter https://go.microsoft.com/fwlink/?LinkId=119097.

Um mit dem MakeCert.exe-Tools ein Zertifikat zu erstellen, führen Sie die folgenden Befehle in einem SDK-Befehlszeilenfenster aus.

Hinweis: Der erste Befehl erstellt eine lokale Zertifizierungsstelle auf Ihrem Computer. Der zweite Befehl generiert ein persönliches Zertifikat von der Zertifizierungsstelle.

Hinweis: Sie können die Befehle genauso kopieren oder eingeben, wie sie hier angezeigt werden. Es sind keine Ersetzungen sind notwendig, obwohl Sie den Namen des Zertifikats ä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 Kennworts für den privaten Schlüssel auf. Durch das Kennwort wird sichergestellt, dass ohne Ihre Zustimmung niemand Zugriff auf das Zertifikat erhält oder es verwenden kann. Erstellen Sie ein Kennwort, das Sie sich gut merken können, und geben Sie dieses Kennwort ein. Dieses Kennwort benötigen Sie später, um das Zertifikat abzurufen.

Um sicherzustellen, dass das Zertifikat korrekt generiert wurde, verwenden Sie den folgenden Befehl, um das Zertifikat im Zertifikatspeicher auf dem Computer abzulegen. (Sie finden eine Zertifikatsdatei nicht im Dateisystemverzeichnis.)

Geben Sie an der Windows PowerShell-Befehlszeile Folgendes ein:

            get-childitem cert:\CurrentUser\my -codesigning

Dieser Befehl verwendet den Zertifikat-Anbieter von Windows PowerShell, um Informationen über das Zertifikat anzuzeigen.

Wenn das Zertifikat erstellt wurde, zeigt die Ausgabe den Fingerabdruck an, der das Zertifikat in der Anzeige identifiziert und dem Folgenden ähnelt:

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

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

SIGNIEREN EINES SKRIPTS

Nachdem Sie ein selbst signiertes Zertifikat erstellt haben, können Sie Skripts signieren. Wenn Sie die Ausführungsrichtlinie „AllSigned“ verwenden, ermöglicht Ihnen das Signieren eines Skripts die Ausführung des Skripts auf Ihrem Computer.

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

Um dieses Skript zu verwenden, kopieren Sie den folgenden Text in eine Textdatei, und geben Sie ihr den Namen „Add-Signature.ps1“.

Hinweis: Stellen Sie sicher, dass die Skriptdatei nicht die Dateinamenerweiterung „.txt“ hat. Wenn Ihr Texteditor „.txt“ anhängt, müssen Sie den Dateinamen in Anführungszeichen einschließen: "add-signature.ps1".

            ## 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 Skriptdatei „Add-Signature.ps1“ zu signieren, geben Sie die folgenden Befehle an der Windows PowerShell-Befehlszeile ein:

        $cert = @(Get-ChildItem cert:\CurrentUser\My -codesigning)[0]
    
        Set-AuthenticodeSignature add-signature.ps1 $cert

Nachdem das Skript signiert ist, können Sie es auf dem lokalen Computer ausführen. Das Skript wird jedoch nicht auf Computern ausgeführt, auf denen die Windows PowerShell-Ausführungsrichtlinie eine digitale Signatur von einer vertrauenswürdigen Zertifizierungsstelle erfordert. Wenn Sie es trotzdem versuchen, zeigt Windows 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 Windows PowerShell diese Meldung anzeigt, wenn Sie ein Skript ausführen, das Sie nicht selbst geschrieben haben, müssen Sie die Datei so behandeln, wie Sie unsignierte Skripts behandeln würden. Überprüfen Sie den Code, um zu ermitteln, ob Sie dem Skript vertrauen können.

AKTIVIEREN DER VERSTÄRKTEN SICHERHEIT FÜR DEN PRIVATEN SCHLÜSSEL FÜR IHR ZERTIFIKAT

Wenn auf Ihrem Computer ein privates Zertifikat vorhanden ist, könnten bösartige Programme in der Lage sein, Skripts in Ihrem Namen zu signieren, wodurch Windows PowerShell autorisiert wird, es auszuführen.

Um zu verhindern, dass in Ihrem Namen eine automatische Signierung erfolgt, müssen Sie den Zertifikatmanager (Certmgr.exe) verwenden, um Ihr Signaturzertifikat in eine PFX-Datei zu exportieren. Der Zertifikatmanager ist Bestandteil von Microsoft .NET Framework SDK, von Microsoft Windows SDK und von Internet Explorer 5.0 und höheren Versionen.

So exportieren Sie das Zertifikat:

  • 1. Starten Sie den Zertifikatmanager.

  • 2. Wählen Sie das von PowerShell Local Certificate Root herausgegebene Zertifikat aus.

  • 3. Klicken Sie auf „Exportieren“, um den Zertifikatexport-Assistenten zu starten.

  • 4. Wählen Sie „Ja, privaten Schlüssel exportieren“, und klicken Sie dann auf „Weiter“.

  • 5. Wählen Sie „Verstärkte Sicherheit aktivieren“.

  • 6. Geben Sie ein Kennwort ein, und geben Sie es zur Bestätigung erneut ein.

  • 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 Zertifikatmanager.

  • 2. Klicken Sie auf „Importieren“, um den Zertifikatimport-Assistenten zu starten.

  • 3. Navigieren Sie zum Speicherort der PFX-Datei, die Sie während des Exportvorgangs erstellt haben.

  • 4. Wählen Sie auf der Seite „Kennwort“ die Option „Verstärkte Sicherheit für den privaten Schlüssel aktivieren“, und geben Sie dann das Kennwort ein, das Sie während des Exportvorgangs zugewiesen haben.

  • 5. Wählen Sie den persönlichen Zertifikatspeicher aus.

  • 6. Klicken Sie auf „Fertig stellen“.

VERHINDERN DES ABLAUFENS DER SIGNATUR

Die digitale Signatur in einem Skript ist gültig, bis das Signaturzertifikat abgelaufen ist oder solange ein Zeitstempelserver verifizieren kann, dass das Skript signiert wurde, während das Signaturzertifikat gültig war.

Da die meisten Signaturzertifikate ein Jahr lang gültig sind, stellt ein Zeitstempelserver sicher, dass Benutzer Ihr Skript für über viele Jahre hinweg verwenden können.

SIEHE AUCH

about_Execution_Policies

about_Profiles

Get-ExecutionPolicy

New-SelfSignedCertificate

Set-ExecutionPolicy

Set-AuthenticodeSignature

„Introduction to Code Signing“ (https://go.microsoft.com/fwlink/?LinkId=106296)