Freigeben über


SignTool

SignTool ist ein Befehlszeilentool, das Dateien digital signiert, die Signaturen in Dateien überprüft, die Signaturen aus Dateien entfernt und Zeitstempeldateien. Informationen dazu, warum das Signieren von Dateien wichtig ist, finden Sie unter Einführung in die Codesignatur.

SignTool ist als Teil des Windows Software Development Kit (SDK) verfügbar. Das Tool wird im \Bin Ordner des Windows SDK-Installationspfads installiert, z. B.: C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x64\signtool.exe.

Hinweis

Für das Windows SDK, das Windows Hardware Lab Kit (HLK), das Windows Driver Kit (WDK) und das Windows Assessment and Deployment Kit (ADK) 20236 und höher müssen Sie den Digestalgorithmus angeben. Der SignTool-Befehl sign erfordert die Angabe der Option für den Digestalgorithmus für Dateien (/fd) und den Digestalgorithmus für Zeitstempel (/td) während der Erstellung von Signaturen bzw. Zeitstempeln.

Falls /fd beim Erstellen der Signatur und /td beim Erstellen des Zeitstempels nicht angegeben wird, wird anfänglich eine Warnung mit Fehlercode 0 ausgelöst. In späteren Versionen von SignTool wird aus dieser Warnung ein Fehler. Wir empfehlen SHA256. Es gilt in der Branche als sicherer als SHA1.

Syntax

signtool [command] [options] [file_name | ...]

Parameter

Argument Beschreibung
command Einer von vier Befehlen, der einen für eine Datei auszuführenden Vorgang angibt: catdb, sign, timestamp oder verify. In der folgenden Tabelle finden Sie eine Beschreibung der einzelnen Befehle.
options Eine Option, die einen Befehl ändert. Neben der globalen /q-Option und /v-Option wird von jedem Befehl ein eindeutiger Satz von Optionen unterstützt.
file_name Der Pfad zu der zu signierenden Datei.

SignTool unterstützt die folgenden Befehle:

Befehl Beschreibung
catdb Fügt einer Katalogdatenbank eine Katalogdatei hinzu oder entfernt sie daraus. Katalogdatenbanken werden für die automatische Suche von Katalogdateien verwendet und mit einer GUID gekennzeichnet. Eine Liste der vom catdb-Befehl unterstützten Optionen finden Sie unter catdb-Befehlsoptionen.
remove Entfernt eine Signatur aus einer Datei. Eine Liste der optionen, die vom remove Befehl unterstützt werden, finden Sie unter Entfernen von Befehlsoptionen.
sign Signiert Dateien digital. Digitale Signaturen schützen Dateien vor Manipulationen und ermöglichen es Benutzern, den Signaturgeber anhand eines Signaturzertifikats zu überprüfen. Eine Liste der vom sign-Befehl unterstützten Optionen finden Sie unter sign-Befehlsoptionen.
timestamp Fügt Dateien Timestamps hinzu. Eine Liste der vom timestamp-Befehl unterstützten Optionen finden Sie unter TimeStamp-Befehlsoptionen.
verify Überprüft die digitale Signatur von Dateien. Ermittelt, ob das Signaturzertifikat von einer vertrauenswürdigen Zertifizierungsstelle ausgestellt wurde, ob das Signaturzertifikat widerrufen wurde, und (optional) ob das Signaturzertifikat für eine bestimmte Richtlinie gültig ist. Eine Liste der vom verify-Befehl unterstützten Optionen finden Sie unter Verify-Befehlsoptionen.

Die folgenden Optionen gelten für alle SignTool-Befehle:

Globale Option Beschreibung
/q Bei erfolgreicher Ausführung des Befehls erfolgt keine Ausgabe, bei einen Fehler werden minimale Daten ausgegeben
/v Zeigt unabhängig von der erfolgreichen Ausführung des Befehls eine ausführliche Ausgabe und Warnmeldungen an.
/debug Zeigt Debuginformationen an.

Catdb-Befehlsoptionen

In der folgenden Tabelle werden die Optionen aufgeführt, die mit dem catdb-Befehl verwendet werden können:

Catdb-Option Beschreibung
/d Gibt an, dass die Standardkatalogdatenbank aktualisiert wird. Falls Sie weder /d noch /g verwenden, aktualisiert SignTool die Systemkomponenten- und die Treiberdatenbank.
/g GUID Gibt an, dass die durch die GUID identifizierte Katalogdatenbank aktualisiert wird.
/r Entfernt den angegebenen Katalog aus der Katalogdatenbank. Wenn diese Option nicht angegeben wird, fügt SignTool der Katalogdatenbank den angegebenen Katalog hinzu.
/u Gibt an, dass automatisch ein eindeutiger Name für die hinzugefügten Katalogdateien generiert wird. Ggf. werden die Katalogdateien umbenannt, um Namenskonflikte mit vorhandenen Katalogdateien zu verhindern. Wenn diese Option nicht angegeben wird, werden vorhandene Kataloge mit demselben Namen wie der angegebene Katalog von SignTool überschrieben.

Hinweis

Katalogdatenbanken werden für die automatische Suche nach Katalogdateien verwendet.

Befehlsoptionen entfernen

In der folgenden Tabelle werden die Optionen aufgeführt, die mit dem remove-Befehl verwendet werden können:

Option "Entfernen" Beschreibung
/c Entfernen Sie alle Zertifikate, mit Ausnahme des Signiererzertifikats aus der Signatur.
/q Keine Ausgabe bei Erfolg und minimale Ausgabe bei Fehlern. Wie immer gibt 0 SignTool bei Erfolg und 1 Fehler zurück.
/s Entfernen Sie die Signatur vollständig.
/u Entfernen Sie die nicht authentifizierten Attribute aus der Signatur, z. B. duale Signaturen und Zeitstempel.
/v Drucken ausführlicher Erfolgs- und Statusmeldungen. Dies kann auch etwas mehr Informationen zu Fehlern liefern.

Sign-Befehlsoptionen

In der folgenden Tabelle werden die Optionen aufgeführt, die mit dem sign-Befehl verwendet werden können:

Sign-Befehlsoption Beschreibung
/a Wählt automatisch das beste Signaturzertifikat aus. SignTool findet alle gültigen Zertifikate, die sämtliche angegebenen Bedingungen erfüllen, und wählt das Zertifikat mit der längsten Gültigkeitsdauer aus. Wenn diese Option nicht vorhanden ist, wird von SignTool nur ein bestehendes gültiges Signaturzertifikat erwartet.
/ac file Fügt dem Signaturblock ein weiteres Zertifikat aus file hinzu.
/as Fügt diese Signatur an. Wenn keine Primärsignatur vorhanden ist, wird diese Signatur stattdessen zur Primärsignatur.
/c CertTemplateName Gibt den Zertifikatsvorlagennamen (eine Microsoft-Erweiterung) für das Signaturzertifikat an.
/csp CSPName Gibt den Kryptografiedienstanbieter (CSP) an, der den privaten Schlüsselcontainer enthält.
/d Desc Gibt eine Beschreibung des signierten Inhalts an.
/dg Pfad Generiert den zu signierenden Digest und die unsignierten PKCS7-Dateien. Die Ausgabedigest- und PKCS7-Dateien sind <Path>\<FileName>.dig und <Path>\<FileName>.p7u. Verwenden Sie /dxml zum Ausgeben einer zusätzlichen XML-Datei.
/di Pfad Erstellt die Signatur durch Aufnahme des signierten Digest in die unsignierte PKCS7-Datei. Die signierten Eingabedigestdateien und unsignierte PKCS7-Dateien müssen <Path>\<FileName>.dig.signed und <Path>\<FileName>.p7u sein.
/dlib DLL Gibt die DLL an, die die AuthenticodeDigestSign-Funktion zum Signieren des Digest implementiert. Diese Option entspricht der getrennten Verwendung von SignTool mit den Optionen /dg, /ds und /di. Diese Option ruft alle drei als einen unteilbaren Vorgang auf.
/dmdf Filename Bei Verwendung mit der /dg-Option wird der Inhalt der Datei ohne Änderung an die AuthenticodeDigestSign-Funktion weitergeleitet.
/ds Signiert nur den Digest. Die Eingabedatei muss der von der /dg-Option generierte Digest sein. Die Ausgabedatei: <File>.signed.
/du URL Gibt eine URL (Uniform Resource Locator) für die erweiterte Beschreibung des signierten Inhalts an.
/dxml Bei Verwendung mit der /dg-Option wird eine XML-Datei erzeugt. Die Ausgabedatei: <Path>\<FileName>.dig.xml.
/f SignCertFile Gibt das Signaturzertifikat in einer Datei an. Wenn die Datei im PFX-Format (Personal Information Exchange) vorliegt und mit einem Kennwort gesichert ist, verwenden Sie zur Angabe des Kennworts die /p-Option. Wenn die Datei keine privaten Schlüssel aufweist, verwenden Sie die /csp-Option und /kc-Option, um den CSP-Namen und den Namen des privaten Schlüsselcontainers anzugeben.
/fd alg Gibt den Dateihashwertalgorithmus zum Erstellen von Dateisignaturen an. Hinweis: Wenn die /fd-Option beim Signieren nicht angegeben wird, generiert der Befehl einen Fehler.
/fd certHash Wenn Sie die Zeichenfolge „certHash“ angeben, verwendet der Befehl den Algorithmus, der auf dem Signaturzertifikat angegeben ist. Hinweis: Wenn die /fd-Option beim Signieren nicht angegeben wird, generiert der Befehl einen Fehler.
/i IssuerName Gibt den Namen des Ausstellers des Signaturzertifikats an. Dieser Wert kann eine Teilzeichenfolge des gesamten Ausstellernamens sein.
/kc PrivKeyContainerName Gibt den Namen des privaten Schlüsselcontainers an.
/n SubjectName Gibt den Namen des Antragstellers des Signaturzertifikats an. Dieser Wert kann eine Teilzeichenfolge des gesamten Antragstellernamens sein.
/nph Wenn unterstützt, werden Seitenhashes für ausführbare Dateien unterdrückt. Die Standardeinstellung wird von der SIGNTOOL_PAGE_HASHES-Umgebungsvariablen und der wintrust.dll-Version bestimmt. Für nicht portable ausführbare Dateien wird diese Option ignoriert.
/p Password Gibt das Kennwort zum Öffnen einer PFX-Datei an. Verwenden Sie die /f-Option, um eine PFX-Datei anzugeben.
/p7 Pfad Gibt an, dass für jede ausgewählte Inhaltsdatei eine PKCS #7-Datei (Public Key Cryptography Standards) erstellt wird. PKCS #7-Dateien erhalten die Bezeichnung <path>\<filename>.p7.
/p7ce Value Gibt Optionen für den signierten PKCS #7-Inhalt an. Legen Sie Wert auf Embedded fest, um den signierten Inhalt in die PKCS #7-Datei einzubetten, oder auf DetachedSignedData, um den signierten Datenabschnitt einer getrennten PKCS #7-Datei zu erstellen. Ohne Verwendung der /p7ce-Option wird der signierte Inhalt standardmäßig eingebettet.
/p7co <OID> Gibt den Objektbezeichner (OID) zur Identifizierung des signierten PKCS #7-Inhalts an.
/ph Wenn unterstützt, werden Seitenhashes für ausführbare Dateien generiert.
/r RootSubjectName Gibt den Antragstellernamen des Stammzertifikats an, mit dem das Signaturzertifikat verkettet werden muss. Dieser Wert kann eine Teilzeichenfolge des gesamten Antragstellernamens des Stammzertifikats sein.
/s StoreName Gibt den zu öffnenden Speicher beim Suchen des Zertifikats mithilfe des Befehls an. Wenn diese Option nicht angegeben ist, öffnet der Befehl den My-Speicher.
/sha1 Hash Gibt den SHA1-Hash des Signaturzertifikats an. In der Regel wird der SHA1-Hash verwendet, wenn die von den verbleibenden Optionen festgelegten Kriterien von mehreren Zertifikaten erfüllt werden.
/sm Gibt an, dass der Befehl anstelle eines Benutzerspeichers einen Computerspeicher verwendet.
/t URL Gibt die URL des Zeitstempelservers an. Wenn diese Option oder /tr nicht angegeben ist, wird die signierte Datei nicht mit Zeitstempel versehen. Wenn beim Versehen mit Zeitstempel ein Fehler auftritt, generiert der Befehl eine Warnung. Diese Option kann nicht mit der /tr-Option verwendet werden.
/td alg Wird mit der /tr-Option zum Anfordern eines vom RFC 3161-Zeitstempelserver verwendeten Digestalgorithmus genutzt. Hinweis: Wenn /td im Zeitstempel nicht angegeben ist, generiert der Befehl einen Fehler.
/tr URL Gibt die URL des RFC 3161-Zeitstempelservers an. Wenn diese Option oder /t nicht angegeben ist, wird die signierte Datei nicht mit Zeitstempel versehen. Wenn beim Versehen mit Zeitstempel ein Fehler auftritt, generiert der Befehl eine Warnung. Diese Option kann nicht mit der /t-Option verwendet werden.
/u Usage Gibt die verbesserte Schlüsselverwendung (EKU) an, die im Signaturzertifikat vorhanden sein muss. Der Verwendungswert kann durch einen OID oder eine Zeichenfolge angegeben werden. Die Standardnutzung ist Code Signing oder 1.3.6.1.5.5.7.3.3.
/uw Legt die Nutzung von Windows System Component Verification oder 1.3.6.1.4.1.311.10.3.6 fest.

Verwendungsbeispiele finden Sie unter Using SignTool to Sign a File (Signieren einer Datei mit SignTool).

Timestamp-Befehlsoptionen

In der folgenden Tabelle werden die Optionen aufgeführt, die mit dem timestamp-Befehl verwendet werden können:

Timestamp-Option Beschreibung
/p7 Fügt PKCS #7-Dateien Zeitstempel hinzu.
/t URL Gibt die URL des Zeitstempelservers an. Vor dem Hinzufügen eines Zeitstempels muss die jeweilige Datei signiert werden. Entweder die /t-Option oder die /tr-Option ist erforderlich.
/td alg Wird mit der /tr-Option zum Anfordern eines vom RFC 3161-Zeitstempelserver verwendeten Digestalgorithmus genutzt. Hinweis: Wenn /td im Zeitstempel nicht angegeben ist, generiert der Befehl eine Warnung.
/tp index Fügt der Signatur bei Index einen Zeitstempel hinzu
/tr URL Gibt die URL des RFC 3161-Zeitstempelservers an. Vor dem Hinzufügen eines Zeitstempels muss die jeweilige Datei signiert werden. Entweder die /tr-Option oder die /t-Option ist erforderlich.

Verify-Befehlsoptionen

In der folgenden Tabelle werden die Optionen aufgeführt, die mit dem verify-Befehl verwendet werden können:

"Verify"-Option Beschreibung
/a Gibt an, dass alle Methoden zum Überprüfen der Datei verwendet werden können. Zuerst durchsucht SignTool die Katalogdatenbanken, um zu ermitteln, ob die Datei in einem Katalog signiert ist. Wenn die Datei nicht in einem Katalog signiert ist, versucht SignTool, die eingebettete Signatur der Datei zu überprüfen. Wir empfehlen diese Option zum Überprüfen von Dateien, die möglicherweise, jedoch nicht unbedingt in einem Katalog signiert sind. Beispiele für Dateien, die möglicherweise, jedoch nicht unbedingt signiert sind, beinhalten Windows-Dateien oder -Treiber.
/ad Sucht den Katalog in der Standardkatalogdatenbank.
/all Überprüft alle Signaturen in einer Datei mit mehreren Signaturen.
/as Sucht den Katalog in der Katalogdatenbank der Systemkomponenten (Treiber).
/ag CatDBGUID Sucht den Katalog in der durch GUID angegebenen Katalogdatenbank.
/c CatFile Gibt die Katalogdatei anhand des Namens an.
/d Druckt die Beschreibung und die Beschreibungs-URL. Windows Vista und frühere Versionen: Diese Option wird nicht unterstützt.
/ds Index Überprüft die Signatur an einer bestimmten Position.
/hash{SHA1|SHA256} Gibt einen optionalen Hashalgorithmus zum Suchen einer Datei in einem Katalog an.
/kp Führt die Überprüfung mithilfe der Signaturrichtlinie für x64-Kernelmodustreiber aus.
/ms Verwendet mehrere Überprüfungssemantiken. Bei diesem Verhalten handelt es sich um das Standardverhalten eines WinVerifyTrust-Aufrufs.
/o Version Überprüft die Datei anhand der Betriebssystemversion. Der Versionsparameter weist folgende Form auf: <PlatformID>:<VerMajor>.<VerMinor>.<BuildNumber>. Wir empfehlen die Verwendung der /o-Option. Ohne Angabe von /o werden von SignTool möglicherweise unerwartete Ergebnisse zurückgegeben. Beispiel: Wenn Sie /o nicht einbeziehen, werden unter älteren Betriebssystemen erfolgreich überprüfte Systemkataloge bei einem neueren Betriebssystem möglicherweise nicht ordnungsgemäß überprüft.
/p7 Überprüft PKCS #7-Dateien. Bei der PKCS #7-Überprüfung werden keine vorhandenen Richtlinien verwendet. SignTool überprüft die Signatur und erstellt eine Kette für das Signaturzertifikat.
/pa Gibt an, dass die standardmäßige Überprüfungsrichtlinie für die Authentifizierung verwendet wird. Ohne Angabe der /pa-Option wird von SignTool die Windows-Treiberüberprüfungsrichtlinie verwendet. Diese Option kann nicht mit der catdb-Option verwendet werden.
/pg PolicyGUID Gibt eine Überprüfungsrichtlinie nach GUID an. Die GUID entspricht der ActionID der Überprüfungsrichtlinie. Diese Option kann nicht mit der catdb-Option verwendet werden.
/ph Drucken und überprüfen Sie Seitenhashwerte. Windows Vista und frühere Versionen: Diese Option wird nicht unterstützt.
/r RootSubjectName Gibt den Antragstellernamen des Stammzertifikats an, mit dem das Signaturzertifikat verkettet werden muss. Dieser Wert kann eine Teilzeichenfolge des gesamten Antragstellernamens des Stammzertifikats sein.
/tw Gibt an, dass der Befehl eine Warnung generiert, wenn die Signatur über keinen Zeitstempel verfügt.

Der SignTool-Befehl verify bestimmt, ob das Signaturzertifikat von einer vertrauenswürdigen Zertifizierungsstelle ausgestellt wurde, ob das Signaturzertifikat widerrufen wurde, und (optional) ob das Signaturzertifikat für eine bestimmte Richtlinie gültig ist.

Der SignTool-Befehl verify gibt den Status der eingebetteten Signatur aus, es sei denn, eine Option wird angegeben, dass einen Katalog durchsucht werden soll, wie etwa /a, /ad, /as, /ag oder /c.

Rückgabewert

Beim Beenden wird von SignTool einer der folgenden Exitcodes zurückgegeben:

Exitcode Beschreibung
0 Ausführung war erfolgreich.
1 Ausführung ist fehlgeschlagen.
2 Ausführung wurde mit Warnungen abgeschlossen.

Beispiele

Durch den folgenden Befehl wird der Systemkomponenten- und Treiberdatenbank die Katalogdatei MyCatalogFileName.cat hinzugefügt. Mit der /u-Option wird ggf. ein eindeutiger Name generiert, um das Ersetzen einer möglicherweise vorhandenen Katalogdatei mit dem Namen MyCatalogFileName.cat zu verhindern.

signtool catdb /v /u MyCatalogFileName.cat

Durch den folgenden Befehl wird eine Datei automatisch mit dem besten Zertifikat signiert.

signtool sign /a /fd SHA256 MyFile.exe 

Durch den folgenden Befehl wird eine Datei mit einem in einer kennwortgeschützten PFX-Datei gespeicherten Zertifikat digital signiert.

signtool sign /f MyCert.pfx /p MyPassword /fd SHA256 MyFile.exe 

Durch den folgenden Befehl wird eine Datei digital signiert und mit einem Zeitstempel versehen. Das zum Signieren der Datei verwendete Zertifikat ist in einer PFX-Datei gespeichert.

signtool sign /f MyCert.pfx /t http://timestamp.digicert.com /fd SHA256 MyFile.exe 

Durch den folgenden Befehl wird eine Datei mit einem Zertifikat aus dem My-Speicher signiert, das den Antragstellernamen My Company Certificate aufweist.

signtool sign /n "My Company Certificate" /fd SHA256 MyFile.exe 

Der folgende Befehl signiert ein ActiveX-Steuerelement und stellt Informationen bereit, die dem Benutzer in einem Browser bei der Aufforderung zum Installieren des Steuerelements angezeigt werden.

signtool sign /f MyCert.pfx /d: "MyControl" /du http://www.example.com/MyControl/info.html /fd SHA256 MyControl.exe 

Durch den folgenden Befehl wird einer bereits digital signierten Datei ein Zeitstempel hinzugefügt.

signtool timestamp /t http://timestamp.digicert.com MyFile.exe

Der folgende Befehl versieht eine Datei unter Verwendung eines RFC 3161-Zeitstempelservers mit einem Zeitstempel.

signtool timestamp /tr http://timestamp.digicert.com /td SHA256 MyFile.exe

Durch den folgenden Befehl wird überprüft, ob eine Datei signiert wurde.

signtool verify MyFile.exe

Durch den folgenden Befehl wird eine möglicherweise in einem Katalog signierte Systemdatei überprüft.

signtool verify /a SystemFile.dll

Durch den folgenden Befehl wird eine Systemdatei überprüft, die in einem Katalog mit dem Namen MyCatalog.cat signiert ist.

signtool verify /c MyCatalog.cat SystemFile.dll

Mit dem folgenden Befehl wird die Signatur vollständig aus einer Datei entfernt.

signtool remove /s MyFile.exe

Siehe auch

Verwenden von SignTool zum Signieren einer Datei

Einführung in die Codesignatur