SignTool
SignTool ist ein Befehlszeilentool, das Dateien digital signiert, die Signaturen in Dateien und Zeitstempeldateien überprüft. Informationen dazu, warum das Signieren von Dateien wichtig ist, finden Sie unter Einführung in die Codesignatur. Das Tool wird im Ordner Bin des Installationspfads des \ Microsoft Windows Software Development Kit (SDK) installiert (Beispiel: C:\Programme (x86)\Windows Kits\10\bin\10.0.19041.0\x64\signtool.exe).
SignTool ist als Teil des Windows SDK verfügbar, das Sie unter herunterladen https://developer.microsoft.com/windows/downloads/windows-10-sdk/ können.
Hinweis
Das Windows 10 SDK, Windows 10 HLK, Windows 10 WDK und Windows 10 ADK ab Build 20236 erfordern die Angabe des Digestalgorithmus. 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. Eine Warnung (anfänglich Fehlercode 0) wird ausgelöst, wenn /fd beim Erstellen der Signatur und /td beim Erstellen des Zeitstempels nicht angegeben wird. In späteren Versionen von SignTool wird aus dieser Warnung ein Fehler. SHA256 wird empfohlen und gilt in der Branche als sicherer als SHA1.
Syntax
signtool [command] [options] [file_name | ...]
Parameter
| Argument | BESCHREIBUNG |
|---|---|
command |
Einer von vier Befehlen (catdb, sign, Timestamp oder Verify), der einen für eine Datei auszuführenden Vorgang angibt. 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 einer zu signierenden Datei. |
Die folgenden Befehle werden von SignTool unterstützt.
| 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. |
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, indem ermittelt wird, 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 Signierungstoolbefehle.
| 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 werden soll. Wenn weder die Option /d noch /g verwendet wird, aktualisiert SignTool die Systemkomponente und die Treiberdatenbank. |
| /g GUID | Gibt an, dass die durch die GUID identifizierte Katalogdatenbank aktualisiert werden soll. |
| /r | Entfernt den angegebenen Katalog aus der Katalogdatenbank. Wenn diese Option nicht angegeben ist, fügt SignTool der Katalogdatenbank den angegebenen Katalog hinzu. |
| /u | Gibt an, dass für die hinzugefügten Katalogdateien automatisch ein eindeutiger Name generiert wird. Ggf. werden die Katalogdateien umbenannt, um Namenskonflikte mit vorhandenen Katalogdateien zu verhindern. Wenn diese Option nicht angegeben ist, überschreibt SignTool alle vorhandenen Kataloge, die denselben Namen wie der hinzugefügte Katalog haben. |
Hinweis
Katalogdatenbanken werden für die automatische Suche nach Katalogdateien verwendet.
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. Das Signierungstool 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 vom Signierungstool nur ein bestehendes gültiges Signaturzertifikat erwartet. |
/ac file |
Fügt dem Signaturblock ein zusätzliches 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 signierten Digest und die nicht signierten PKCS7-Dateien. Die Ausgabeh digest- und PKCS7-Dateien sind: Path\FileName.dig und Path\FileName.p7u. Informationen zur Ausgabe einer zusätzlichen XML-Datei finden Sie unter /dxml. |
/di Pfad |
Erstellt die Signatur durch Erfassung des signierten Digests in der nicht signierten PKCS7-Datei. Der eingegebene signierte Digest und die nicht signierten PKCS7-Dateien sollten: Path\FileName.dig.signed und Path\FileName.p7u sein. |
/dlib DLL |
Gibt die DLL an, die die AuthenticodeDigestSign Funktion implementiert, mit der der Digest signiert werden soll. Diese Option entspricht der getrennten Verwendung von SignTool mit den Schaltern /dg, /dsund /di, außer dass diese Option alle drei als einen atomaren Vorgang aufruft. |
/dmdf Dateiname |
Bei Verwendung mit der Option /dg übergibt den Inhalt der Datei ohne AuthenticodeDigestSign Änderung an die Funktion. |
/ds |
Signiert nur den Digest. Die Eingabedatei sollte der Digest sein, der von der Option /dg generiert wird. Die Ausgabedatei ist: File.signed. |
/du URL |
Gibt eine URL (Uniform Resource Locator) für die erweiterte Beschreibung des signierten Inhalts an. |
/dxml |
Bei Verwendung mit der Option /dg erzeugt eine XML-Datei. Die Ausgabedatei ist: 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: Ein Fehler wird generiert, wenn der Schalter /fd beim Signieren nicht bereitgestellt wird. |
/fd certHash |
Durch Angabe der Zeichenfolge certHash wird standardmäßig der auf dem Signaturzertifikat verwendete Algorithmus verwendet. Hinweis: Ein Fehler wird generiert, wenn der Schalter /fd beim Signieren nicht bereitgestellt wird. |
/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 „Pfad\Dateiname.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 beim Suchen des Zertifikats zu öffnenden Speicher an. Ohne Angabe dieser Option wird der My-Speicher geöffnet. |
/sha1 Hash |
Gibt den SHA1-Hash des Signaturzertifikats an. In der Regel wird der SHA1-Hash angegeben, wenn die von den verbleibenden Schaltern festgelegten Kriterien von mehreren Zertifikaten erfüllt werden. |
/sm |
Gibt an, dass anstatt eines Benutzerspeichers ein Computerspeicher verwendet wird. |
/t URL |
Gibt die URL des Zeitstempelservers an. Wenn diese Option (oder /tr) nicht vorhanden ist, wird der signierten Datei kein Zeitstempel hinzugefügt. Im Fall eines Fehlers beim Hinzufügen des Zeitstempels wird eine Warnung generiert. 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: Ein Fehler wird generiert, wenn /td während des Zeitstempels nicht angegeben wird. |
/tr URL |
Gibt die URL des RFC 3161-Zeitstempelservers an. Wenn diese Option (oder /t) nicht vorhanden ist, wird der signierten Datei kein Zeitstempel hinzugefügt. Im Fall eines Fehlers beim Hinzufügen des Zeitstempels wird eine Warnung generiert. 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 Standardverwendung lautet "Codesignatur" (1.3.6.1.5.5.7.3.3). |
/uw |
Gibt die Verwendung von "Verifizierung von Windows-Systemkomponenten" (1.3.6.1.4.1.311.10.3.6) an. |
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: Ein Fehler wird generiert, wenn /td während des Zeitstempels nicht angegeben wird. |
/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. |
Überprüfen der Befehlsoptionen
| "Verify"-Option | Beschreibung |
|---|---|
| /a | Gibt an, dass alle Methoden zum Überprüfen der Datei verwendet werden können. Zuerst werden die Katalogdatenbanken durchsucht, um zu ermitteln, ob die Datei in einem Katalog signiert ist. Wenn die Datei in keinem Katalog signiert ist, versucht SignTool, die eingebettete Signatur der Datei zu überprüfen. Diese Option wird zum Überprüfen von Dateien empfohlen, die möglicherweise, jedoch nicht unbedingt in einem Katalog signiert sind. Beispiele für Dateien, die signiert werden können oder nicht, sind 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 Katalogdatenbank, die durch die GUID identifiziert wird. |
| /c CatFile | Gibt die Katalogdatei anhand des Namens an. |
| /d | Drucken Sie die Beschreibung und die Beschreibungs-URL. Windows Vista und früher: Dieses Flag 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 x64-Kernelmodus-Treibersignaturrichtlinie aus. |
| /ms | Verwendet mehrere Überprüfungssemantiken. Dies ist das Standardverhalten eines WinVerifyTrust-Aufrufs. |
| /o Version | Überprüft die Datei anhand der Betriebssystemversion. Der Versionsparameter hat die form: PlatformID**:**VerMajor*. VerMinor. * BuildNumber Die Verwendung des Schalters /o wird empfohlen. Wenn /o nicht angegeben ist, gibt SignTool möglicherweise unerwartete Ergebnisse zurück. Wenn Sie z. B. den Schalter /o nicht verwenden, werden Systemkataloge, die auf einem älteren Betriebssystem ordnungsgemäß überprüft werden, unter einem neueren Betriebssystem möglicherweise nicht ordnungsgemäß überprüft. |
| /p7 | Überprüfen Sie PKCS # 7-Dateien. Für die PKCS 7-Überprüfung werden # keine vorhandenen Richtlinien verwendet. Die Signatur wird überprüft, und für das Signaturzertifikat wird eine Kette erstellt. |
| /pa | Gibt an, dass die Standardauthentifizierungsüberprüfungsrichtlinie verwendet wird. Wenn die Option /pa nicht angegeben ist, verwendet SignTool die Windows-Treiberüberprüfungsrichtlinie. Diese Option kann nicht mit den catdb-Optionen verwendet werden. |
| /pg PolicyGUID | Gibt eine Überprüfungsrichtlinie nach GUID an. Die GUID entspricht der ActionID der Überprüfungsrichtlinie. Diese Option kann nicht mit den catdb-Optionen verwendet werden. |
| /ph | Seitenhashwerte drucken und überprüfen. Windows Vista und früher: Dieses Flag 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 eine Warnung generiert wird, wenn die Signatur nicht mit einem Zeitstempel versehen ist. |
Der Befehl SignTool verify bestimmt, ob das Signaturzertifikat von einer vertrauenswürdigen Autorität ausgestellt wurde, ob das Signaturzertifikat widerrufen wurde und ob das Signaturzertifikat optional für eine bestimmte Richtlinie gültig ist.
Der Befehl SignTool verify gibt den eingebetteten Signaturstatus aus, es sei denn, es wurde eine Option zum Durchsuchen eines Katalogs angegeben (/a, /ad, /as, /ag, /c).
Rückgabewert
Beim Beenden wird vom Signierungstool 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 Internet Explorer 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