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
| Art | Endungen |
|---|---|
| Programme und Bibliotheken | exe, dll, sys, ocx, efi |
| Installer und Pakete | msi, msp, cab, cat |
| PowerShell | ps1, psm1, psd1, ps1xml |
| Windows Script | vbs, 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.
- 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.
- 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.
- 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.
- Zeitstempel hinzufügen (empfohlen) mit DigiCert (
- Prüfen und signieren - Dateien signieren. Ein Token oder HSM fragt ggf. in einem Windows-Dialog nach der PIN.
- 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
Windows schreibt die Signatur in die Datei selbst und ersetzt eine vorhandene Signatur. Es entstehen keine Kopien - eine Sicherung behalten, falls die unsignierte Fassung gebraucht wird.
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
| Status | Bedeutung |
|---|---|
| gültig | Signiert, seitdem unverändert, und die Kette ist auf diesem Computer vertrauenswürdig. |
| signiert · Stamm nicht vertraut | Die Signatur ist intakt, aber dieser Computer vertraut der ausstellenden Stammzertifizierungsstelle nicht - üblich bei einer hier nicht verteilten internen CA. |
| nicht signiert | Die Datei hat keine Authenticode-Signatur. |
| nach dem Signieren verändert | Die Datei wurde nach dem Signieren geändert; die Signatur passt nicht mehr. |
| Fehler | Windows meldet einen Fehler für die Signatur. |
| ungültig | Windows 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
.crtin 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.
Zertifikatsdateien umwandeln - CER, CRT, PEM und KEY in PFX und zurück
CER oder CRT plus KEY in PFX umwandeln oder eine PFX in .cer, .crt, vollständige Kette und .key zerlegen. Der Schlüssel wird vorher geprüft. 3DES für alte Windows Server.
Zertifikatscanner - TLS-Zertifikate im internen Netz finden
Private Netze, CIDR-Bereiche und Ports nach TLS-Zertifikaten durchsuchen - HTTPS, LDAPS, RDP, SMTP STARTTLS - und ein Ablauf-Inventar als CSV oder JSON exportieren. Läuft lokal.