signtool sign-Befehlsreferenz
signtool in diesem Dokument bezieht sich auf das sslTrus CLI für Remote-Code-Signierung, nicht auf das signtool.exe, das im Microsoft Windows SDK enthalten ist. Bei Verwendung des Windows-SDK-Tools wird dies ausdrücklich als Microsoft signtool.exe angegeben.
signtool sign führt die Remote-Signierung direkt an lokalen Dateien aus. Die CLI extrahiert die zu signierenden Daten lokal, ruft den Remote-Dienst zur Durchführung der Signatur mit dem privaten Schlüssel auf und schreibt die Signatur, den Zeitstempel und die Zertifikatinformationen zurück in die Ausgabedatei.
signtool sign [flags]
查看 Hilfe und Version:
signtool --help
signtool --version
Anmeldedaten-Konfiguration
Der Befehl sign liest die Zugangsdaten auf folgende Weise:
| Anmeldedaten | Parameter | Umgebungsvariable | Beschreibung |
|---|---|---|---|
| Access Key | --access-key / -k | ACCESS_KEY | Wenn der Parameter leer ist, wird die Umgebungsvariable automatisch gelesen |
| Access Secret | --access-secret / -s | ACCESS_SECRET | Wenn der Parameter leer ist, wird die Umgebungsvariable automatisch gelesen |
export ACCESS_KEY="your-access-key"
export ACCESS_SECRET="your-access-secret"
Adresse des Remotedienstes wird durch den Parameter --address gesteuert und unterstützt die folgenden Werte:
| Parameterwert | Tatsächliche Dienstadresse |
|---|---|
nicsrs | https://ssl.face.nicsrs.com |
Leerer Wert, racent oder andere beliebige Werte | https://ssl.face.racent.com |
ACCESS_KEYundACCESS_SECRETsind die tatsächlich gelesenen Umgebungsvariablennamen,SIGNTOOL_ACCESS_KEY/SIGNTOOL_ACCESS_SECRETwerden von der aktuellen CLI nicht automatisch gelesen.- Es wird davon abgeraten, den Access Secret in die Shell-Historie oder Skript-Repositories zu schreiben. Bevorzugt sollten zur Laufzeit injizierte Umgebungsvariablen oder sichere CI-Variablen verwendet werden.
Parameterbeschreibung
| Parameter | Kurzform | Standardwert | Beschreibung |
|---|---|---|---|
--address | -a | Leer | Kennung der Remote-Service-Adresse, kein URL-Durchreichparameter. |
--access-key | -k | Leer | Wenn leer, wird ACCESS_KEY gelesen. |
--access-secret | -s | Leer | Wenn leer, wird ACCESS_SECRET gelesen. |
--cert-code | -c | Leer | Erforderlich. Zertifikatsnummer. |
--file | -f | leer | Erforderlich. Pfad zur zu signierenden Datei, darf kein Verzeichnis sein. |
--out | -o | leer | Pfad zur Ausgabedatei; wenn leer und Überschreiben nicht aktiviert, wird automatisch ein Standarddateiname erzeugt. |
--override | — | false | Überschreibt die Ausgabedatei mit der Originaldatei. |
--sha1 | -1 | false | SHA1-Signatur aktivieren. |
--sha2 | -2 | true | SHA2-Signatur aktivieren. |
--timestamp | — | auto | SHA1 Authenticode Zeitstempeladresse. auto verwendet die Standardadresse, leere Zeichenfolge deaktiviert. |
--timestamp-rfc3161 | — | auto | SHA2 RFC3161 Zeitstempeladresse. auto verwendet die Standardadresse, leere Zeichenfolge deaktiviert. |
--desc | -n | leer | Text der Programm Beschreibung, der in die Signatur geschrieben wird. |
--url | -u | leer | URL des Programm-Informations-URI des zu schreibenden Signatur. |
--nest | — | true | Vorhandene Signatur beibehalten und verschachtelte Signatur anhängen; bei false wird die vorhandene Signatur gelöscht. |
--verify | — | false | Gibt einen Fehler zurück, wenn das Zertifikat beim Anhängen der Signatur nicht vertrauenswürdig ist. |
--dry-run | — | false | Erzeugt eine Signatur mit einem lokalen Testzertifikat, ohne die Remote-Signaturschnittstelle aufzurufen. |
Boolesche Parameter müssen das Format 参数=值 verwenden; Leerzeichen als Trennzeichen werden nicht unterstützt:
- Korrekt:
--sha1=true --sha2=false - Falsch:
--sha1 true --sha2 false
Pflichtfelder-Regeln
Vor der Ausführung werden die folgenden Bedingungen überprüft; wenn auch nur eine nicht erfüllt ist, wird ein Fehler gemeldet und der Vorgang abgebrochen:
--access-keyoderACCESS_KEYmuss vorhanden sein.--access-secretoderACCESS_SECRETmüssen vorhanden sein.--cert-codemuss vorhanden sein.--filemuss vorhanden sein und darf kein Verzeichnis sein.--sha1und--sha2müssen mindestens eines aktiviert sein.
Regeln für Ausgabedateien
Wenn --out nicht angegeben ist:
--override | Ausgabeverhalten |
|---|---|
false(Standard) | Ausgabe in dasselbe Verzeichnis wie die Eingabedatei, Dateiname: ${name}.signed.${yyyyMMdd.HHmmss}${ext} |
true | Überschreibt die Eingabedatei direkt |
Beispiel:
app.exe → app.signed.20260611.153000.exe
driver.sys → driver.signed.20260611.153000.sys
--override=true überschreibt die Originaldatei. Vergewissern Sie sich vor der Ausführung, dass ein Backup vorhanden ist. Bei einem Signaturfehler versucht die CLI, unvollständige Ausgabedateien zu löschen.
Algorithmus-Auswahl
Standardmäßig ist nur SHA2 aktiviert:
signtool sign -c CERT_CODE -f app.exe
Nur SHA1 signieren:
signtool sign -c CERT_CODE -f app.exe --sha1=true --sha2=false
Gleichzeitig SHA1 und SHA2 signieren:
signtool sign -c CERT_CODE -f app.exe --sha1=true --sha2=true
Wenn SHA1 und SHA2 gleichzeitig aktiviert sind, verarbeitet der Ablauf zuerst SHA1 und dann SHA2. SHA1 wird weiterhin unterstützt, aber für neue Signaturszenarien wird SHA2 bevorzugt.
Zeitstempelkonfiguration
Die auto-Werte von --timestamp und --timestamp-rfc3161 werden während der Validierungsphase durch die Standardadressen ersetzt:
| Parameter | Tatsächlicher Wert von auto | Verwendung |
|---|---|---|
--timestamp | http://timestamp.sectigo.com | SHA1 Authenticode-Zeitstempel |
--timestamp-rfc3161 | http://timestamp.sectigo.com | SHA2 RFC3161-Zeitstempel |
Benutzerdefinierter SHA2-Zeitstempeldienst:
signtool sign \
-c CERT_CODE \
-f app.exe \
--timestamp-rfc3161=http://timestamp.acs.microsoft.com
SHA2-Zeitstempel deaktivieren:
signtool sign -c CERT_CODE -f app.exe --timestamp-rfc3161=
关闭全部时间戳:
signtool sign -c CERT_CODE -f app.exe --timestamp= --timestamp-rfc3161=
- 只有以
http开头的时间戳地址才会被使用。 - SHA1 优先使用
--timestamp;若它不是 HTTP 地址,则尝试使用--timestamp-rfc3161。 - SHA2 使用
--timestamp-rfc3161。 - SHA2 添加时间戳失败时,会在 Microsoft 和 Sectigo 默认地址之间自动重试一次。
- 时间戳失败不会必然导致签名失败,CLI 会记录错误并保留未加时间戳的签名结果。
Häufige Beispiele
Bereitstellung von Anmeldedaten über Umgebungsvariablen, Standard-SHA2-Signierung:
export ACCESS_KEY="your-access-key"
export ACCESS_SECRET="your-access-secret"
signtool sign \
--cert-code CERT_CODE \
--file app-unsigned.exe \
--out app-signed.exe
Anmeldedaten direkt über Parameter bereitstellen:
signtool sign \
--access-key "your-access-key" \
--access-secret "your-access-secret" \
--cert-code CERT_CODE \
--file app-unsigned.exe \
--out app-signed.exe
Verwendung der NICSRS-Adresse:
signtool sign \
--address nicsrs \
--cert-code CERT_CODE \
--file app-unsigned.exe \
--out app-signed.exe
Programmbeschreibung schreiben und offizielle Website-URL angeben:
signtool sign \
-c CERT_CODE \
-f app-unsigned.exe \
-o app-signed.exe \
--desc "Example Application" \
--url "https://example.com"
Verschachtelte Signatur anhängen (bestehende Signatur beibehalten):
signtool sign -c CERT_CODE -f app.exe --nest=true
Vorhandene Datei überschreiben:
signtool sign -c CERT_CODE -f app.exe --override=true
Dry-Run lokale Testsignatur (ohne Aufruf der Remote-Schnittstelle):
signtool sign \
-k dummy \
-s dummy \
-c CERT_CODE \
-f app.exe \
--dry-run=true
--dry-run ruft keine Remote-Signaturschnittstelle auf, liest/schreibt jedoch weiterhin lokale Dateien und ruft ein lokal selbst signiertes Zertifikat auf. Dabei werden weiterhin die Nicht-Leer-Validierungen für Anmeldedaten und Zertifikatsnummer durchgeführt, weshalb im Beispiel Platzhalter-Anmeldedaten verwendet werden.
Fehlerbehebungs-Referenz
| Fehlermeldung | Mögliche Ursache | Lösungsvorschlag |
|---|---|---|
access key is required... | --access-key wurde nicht übergeben, und auch ACCESS_KEY wurde nicht gesetzt. | Umgebungsvariable setzen oder -k verwenden. |
access secret is required... | --access-secret nicht übergeben und ACCESS_SECRET nicht gesetzt. | Umgebungsvariable setzen oder -s verwenden. |
cert code is required... | Zertifikatsnummer nicht übergeben. | -c CERT_CODE verwenden. |
sha1 or sha2 is required... | SHA1 und SHA2 wurden gleichzeitig deaktiviert. | Mindestens einen Algorithmus aktivieren. |
file <path> is a directory | --file verweist auf ein Verzeichnis statt auf eine Datei. | Ändern Sie den Pfad zur zu signierenden Datei. |
| Zeitstempelfehler, aber Signaturdatei wurde erstellt | Zeitstempeldienst nicht verfügbar oder Zertifikatskettenvalidierung fehlgeschlagen. | Überprüfen Sie die Zeitstempel-URL, ersetzen Sie bei Bedarf --timestamp-rfc3161. |