aethercert
Dokumentation
Werkzeuge

Code signieren - exe, dll, msi und PowerShell-Skripte per Authenticode

Eine exe, dll, msi oder ein PowerShell-Skript per Authenticode mit RFC-3161-Zeitstempel signieren - mit einem Code-Signing-Zertifikat aus dem Windows-Speicher, einem USB-Token oder einer PFX.

Code signieren signiert Programme, Installer und Skripte per Authenticode, versieht die Signatur mit einem Zeitstempel und prüft sie - ohne signtool.exe und ohne das Windows SDK zu installieren. Es nutzt die Authenticode-Funktionen von Windows (Set-AuthenticodeSignature in der PowerShell, die jedes Windows mitbringt). Damit signiert es jedes Format, das Windows signieren kann, und funktioniert mit Zertifikaten, deren Schlüssel auf einem USB-Token oder HSM liegt.

Die Seite gibt es nur unter Windows. Auf der Kommandozeile sind es actk sign und actk verify.

Was sich signieren lässt

ArtEndungen
Programme und Bibliothekenexe, dll, sys, ocx, efi
Installer und Paketemsi, msp, cab, cat
PowerShellps1, psm1, psd1, ps1xml
Windows Scriptvbs, js, wsf

Dateien anderer Typen werden nicht übernommen; ein Hinweis nennt den Grund.

Eine EXE oder ein Skript signieren

„Code signieren“ ist ein geführter Ablauf: Dateien, Zertifikat, Signaturoptionen, Prüfen und signieren und Ergebnis.

  1. Dateien - Dateien auf das Fenster ziehen oder Dateien auswählen …. Mehrere Dateien werden in einem Durchgang signiert. Vorhandene Signaturen prüfen zeigt die Signatur, die jede Datei bereits hat.
  2. Zertifikat - Windows-Zertifikatspeicher oder PFX-Datei.
    • Die Liste zeigt jedes Zertifikat, mit dem Windows signieren kann: Zweck „Codesignatur“ und ein privater Schlüssel, aus dem Speicher des Benutzers und des Computers. Zertifikate eines USB-Tokens erscheinen, sobald dessen Treiber installiert ist. Abgelaufene Zertifikate sind nicht wählbar - eine damit erstellte Signatur ist ungültig.
    • Eine PFX-Datei braucht ihr Passwort. Es wird beim Weiter geprüft und geht nur an die Signaturkomponente von Windows auf diesem Rechner.
  3. Signaturoptionen - die Voreinstellungen passen für fast jeden Fall:
    • Zeitstempel hinzufügen (empfohlen) mit DigiCert (http://timestamp.digicert.com), Sectigo (http://timestamp.sectigo.com), GlobalSign (http://timestamp.globalsign.com/tsa/r6advanced1) oder Andere URL.
    • Erweitert > Hash-Verfahren: SHA-256 (Standard), SHA-384 oder SHA-512. SHA-256 erwarten Windows und jede CA; nur ändern, wenn eine Richtlinie mehr verlangt.
    • Die Kette wird in die Signatur aufgenommen, ohne Stammzertifikat.
  4. Prüfen und signieren - Dateien signieren. Ein Token oder HSM fragt ggf. in einem Windows-Dialog nach der PIN.
  5. Ergebnis - Windows prüft jede Datei nach dem Signieren; die Liste zeigt pro Datei den Signatur- und Zeitstempelstatus. Erfolg meldet die Seite erst, wenn Windows jede Signatur bestätigt hat.

Dateien werden direkt signiert

Warum der Zeitstempel zählt

Ein Zeitstempel eines RFC-3161-Dienstes belegt, wann die Datei signiert wurde. Mit ihm bleibt die Signatur auch nach Ablauf des Code-Signing-Zertifikats gültig. Ohne ihn wird sie an dem Tag ungültig, an dem das Zertifikat abläuft. An den Zeitstempeldienst geht nur ein Hash der Signatur, nie die Datei.

Signaturstatus

StatusBedeutung
gültigSigniert, seitdem unverändert, und die Kette ist auf diesem Computer vertrauenswürdig.
signiert · Stamm nicht vertrautDie Signatur ist intakt, aber dieser Computer vertraut der ausstellenden Stammzertifizierungsstelle nicht - üblich bei einer hier nicht verteilten internen CA.
nicht signiertDie Datei hat keine Authenticode-Signatur.
nach dem Signieren verändertDie Datei wurde nach dem Signieren geändert; die Signatur passt nicht mehr.
FehlerWindows meldet einen Fehler für die Signatur.
ungültigWindows akzeptiert die Signatur nicht, und es ließ sich kein Signierer auslesen.

Ein Code-Signing-Zertifikat erstellen

Sie brauchen ein Zertifikat mit dem Zweck „Codesignatur“ und dessen privaten Schlüssel.

  • Für den internen Einsatz (Skripte und Werkzeuge, die nur in Ihrer Organisation laufen): in CSR erstellen einen Antrag vom Typ Code Signing erzeugen, bei Ihrer internen CA einreichen - zum Beispiel über die Vorlage Codesignatur der Active Directory-Zertifikatdienste - und das ausgestellte Zertifikat importieren. Der Schlüssel bleibt im Windows-Schlüsselspeicher.
  • Zum Testen: in „CSR erstellen“ ein selbstsigniertes Code-Signing-Zertifikat erzeugen. Auf den Rechnern, die die Signatur akzeptieren sollen, seine .crt in Vertrauenswürdige Stammzertifizierungsstellen und Vertrauenswürdige Herausgeber importieren, zum Beispiel per Gruppenrichtlinie.
  • Für Software, die Sie öffentlich verteilen: ein OV- oder EV-Code-Signing-Zertifikat bei einer öffentlichen CA kaufen. Siehe nächster Abschnitt.

Öffentliche Code-Signing-Zertifikate brauchen einen Hardware-Schlüssel

Seit Juni 2023 verlangt das CA/Browser Forum, dass öffentliche CAs Code-Signing-Zertifikate nur für Schlüssel ausstellen, die auf einem Hardware-Token oder HSM erzeugt und verwahrt werden. Ein in Software erzeugter Schlüssel - von diesem Toolkit, von OpenSSL oder certreq

  • eignet sich daher nur für eine interne CA und zum Testen; „CSR erstellen“ weist bei jedem Code-Signing-Antrag darauf hin. Öffentliche CAs liefern das Token aus oder erzeugen den Schlüssel selbst auf Ihrem HSM. Ist der Treiber installiert, erscheint das Zertifikat des Tokens in der Liste von „Code signieren“ wie jedes andere.

Öffentliche CAs verlangen für Code Signing außerdem mindestens RSA 3072 oder ECDSA P-256, und ein OV- oder EV-Zertifikat nennt Organisation, Ort und Land wie im Register eingetragen.

Auf dieser Seite