Zum Hauptinhalt springen

signtool sign-Befehlsreferenz

Hinweis

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:

AnmeldedatenParameterUmgebungsvariableBeschreibung
Access Key--access-key / -kACCESS_KEYWenn der Parameter leer ist, wird die Umgebungsvariable automatisch gelesen
Access Secret--access-secret / -sACCESS_SECRETWenn 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:

ParameterwertTatsächliche Dienstadresse
nicsrshttps://ssl.face.nicsrs.com
Leerer Wert, racent oder andere beliebige Wertehttps://ssl.face.racent.com
Hinweis
  • ACCESS_KEY und ACCESS_SECRET sind die tatsächlich gelesenen Umgebungsvariablennamen, SIGNTOOL_ACCESS_KEY / SIGNTOOL_ACCESS_SECRET werden 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​

ParameterKurzformStandardwertBeschreibung
--address-aLeerKennung der Remote-Service-Adresse, kein URL-Durchreichparameter.
--access-key-kLeerWenn leer, wird ACCESS_KEY gelesen.
--access-secret-sLeerWenn leer, wird ACCESS_SECRET gelesen.
--cert-code-cLeerErforderlich. Zertifikatsnummer.
--file-fleerErforderlich. Pfad zur zu signierenden Datei, darf kein Verzeichnis sein.
--out-oleerPfad zur Ausgabedatei; wenn leer und Überschreiben nicht aktiviert, wird automatisch ein Standarddateiname erzeugt.
--override—falseÜberschreibt die Ausgabedatei mit der Originaldatei.
--sha1-1falseSHA1-Signatur aktivieren.
--sha2-2trueSHA2-Signatur aktivieren.
--timestamp—autoSHA1 Authenticode Zeitstempeladresse. auto verwendet die Standardadresse, leere Zeichenfolge deaktiviert.
--timestamp-rfc3161—autoSHA2 RFC3161 Zeitstempeladresse. auto verwendet die Standardadresse, leere Zeichenfolge deaktiviert.
--desc-nleerText der Programm Beschreibung, der in die Signatur geschrieben wird.
--url-uleerURL des Programm-Informations-URI des zu schreibenden Signatur.
--nest—trueVorhandene Signatur beibehalten und verschachtelte Signatur anhängen; bei false wird die vorhandene Signatur gelöscht.
--verify—falseGibt einen Fehler zurück, wenn das Zertifikat beim Anhängen der Signatur nicht vertrauenswürdig ist.
--dry-run—falseErzeugt eine Signatur mit einem lokalen Testzertifikat, ohne die Remote-Signaturschnittstelle aufzurufen.
Format für boolesche Parameter

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-key oder ACCESS_KEY muss vorhanden sein.
  • --access-secret oder ACCESS_SECRET müssen vorhanden sein.
  • --cert-code muss vorhanden sein.
  • --file muss vorhanden sein und darf kein Verzeichnis sein.
  • --sha1 und --sha2 müssen mindestens eines aktiviert sein.

Regeln für Ausgabedateien​

Wenn --out nicht angegeben ist:

--overrideAusgabeverhalten
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
Hinweis

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:

ParameterTatsächlicher Wert von autoVerwendung
--timestamphttp://timestamp.sectigo.comSHA1 Authenticode-Zeitstempel
--timestamp-rfc3161http://timestamp.sectigo.comSHA2 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
Hinweis

--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​

FehlermeldungMögliche UrsacheLö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 erstelltZeitstempeldienst nicht verfügbar oder Zertifikatskettenvalidierung fehlgeschlagen.Überprüfen Sie die Zeitstempel-URL, ersetzen Sie bei Bedarf --timestamp-rfc3161.