Zum Hauptinhalt springen

signtool sign Befehlsreferenz

Hinweis

signtool in diesem Dokument bezieht sich auf das sslTrus Remote-Codesignatur-Client-CLI und nicht auf das in Microsoft Windows SDK enthaltene signtool.exe. Bei Verwendung des Windows SDK-Tools wird dies ausdrücklich als Microsoft signtool.exe angegeben.

signtool sign führt die Remote-Signatur direkt für lokale Dateien aus. Das CLI extrahiert lokal die zu signierenden Daten, ruft den Remote-Dienst zum Signieren mit dem privaten Schlüssel auf und schreibt anschließend Signatur, Zeitstempel und Zertifikatsinformationen in die Ausgabedatei zurück.

signtool sign [flags]

Hilfe und Version anzeigen:

signtool --help
signtool --version

Anmeldedaten-Konfiguration

Der Befehl sign liest die Zugangsdaten auf folgende Weise:

Anmeldedaten-ElementParameterUmgebungsvariableBeschreibung
Access Key--access-key / -kACCESS_KEYWenn der Parameter leer ist, wird automatisch die Umgebungsvariable gelesen
Access Secret--access-secret / -sACCESS_SECRETWenn der Parameter leer ist, wird automatisch die Umgebungsvariable gelesen
export ACCESS_KEY="your-access-key"
export ACCESS_SECRET="your-access-secret"

Remote-Dienstadresse wird durch den Parameter --address gesteuert und unterstützt die folgenden Werte:

ParameterwertTatsächliche Dienstadresse
nicsrshttps://ssl.face.nicsrs.com
Leerer Wert, racent oder ein beliebiger anderer Werthttps://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 nicht empfohlen, den Access Secret in den Shell-Verlauf oder in Skript-Repositories zu schreiben. Bevorzugen Sie zur Laufzeit injizierte Umgebungsvariablen oder sichere CI-Variablen.

Parameterbeschreibung

ParameterKurzformStandardwertBeschreibung
--address-aleerKennung der Remote-Dienstadresse, kein URL-Durchreichparameter.
--access-key-kleerWenn leer, wird ACCESS_KEY gelesen.
--access-secret-sleerWenn leer, wird ACCESS_SECRET gelesen.
--cert-code-cleerPflichtfeld. Zertifikatsnummer.
--file-fLeerPflichtfeld. Pfad der zu signierenden Datei, darf kein Verzeichnis sein.
--out-oLeerPfad der Ausgabedatei; wenn leer und Überschreiben nicht aktiviert, wird automatisch ein Standarddateiname generiert.
--overridefalseAusgabedatei überschreibt die Originaldatei.
--sha1-1falseSHA1-Signatur aktivieren.
--sha2-2trueSHA2-Signatur aktivieren.
--timestampautoSHA1 Authenticode-Zeitstempeladresse. auto verwendet die Standardadresse, eine leere Zeichenfolge deaktiviert sie.
--timestamp-rfc3161autoSHA2 RFC3161-Zeitstempeladresse. auto verwendet die Standardadresse, eine leere Zeichenfolge deaktiviert sie.
--desc-nLeerBeschreibungstext des Programms, der in die Signatur geschrieben wird.
--url-uLeerURL der Programminformationen, die in die Signatur geschrieben wird.
--nesttrueVorhandene Signatur beibehalten und verschachtelte Signatur anhängen; bei false wird die vorhandene Signatur gelöscht.
--verifyfalseBeim Anhängen der Signatur wird ein Fehler zurückgegeben, wenn das Zertifikat nicht vertrauenswürdig ist.
--dry-runfalseVerwendet ein lokales Testzertifikat zum Erzeugen der Signatur, ohne die Remote-Signaturschnittstelle aufzurufen.
Format boolescher Parameter

Boolesche Parameter müssen das Format 参数=值 verwenden; eine Trennung durch Leerzeichen wird nicht unterstützt:

  • Richtig: --sha1=true --sha2=false
  • Falsch: --sha1 true --sha2 false

Pflichtregeln

Vor der Ausführung werden die folgenden Bedingungen geprüft; ist eine davon nicht erfüllt, wird mit einem Fehler abgebrochen:

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

Beispiel:

app.exe    → app.signed.20260611.153000.exe
driver.sys → driver.signed.20260611.153000.sys
Hinweis

--override=true überschreibt die Originaldatei. Stellen Sie vor der Ausführung sicher, dass ein Backup vorhanden ist. Bei Signaturfehlern versucht die CLI, unvollständige Ausgabedateien zu löschen.


Algorithmusauswahl

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

Gleichzeitiges Signieren von SHA1 und SHA2:

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 anschließend SHA2. SHA1 wird derzeit noch unterstützt, bei neuen Signaturszenarien sollte jedoch bevorzugt SHA2 verwendet werden.


Zeitstempelkonfiguration

Die Werte von --timestamp und --timestamp-rfc3161 in auto werden in 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=

Alle Zeitstempel schließen:

signtool sign -c CERT_CODE -f app.exe --timestamp= --timestamp-rfc3161=
Hinweise
  • Nur Zeitstempel-Adressen, die mit http beginnen, werden verwendet.
  • SHA1 verwendet bevorzugt --timestamp; ist dies keine HTTP-Adresse, wird versucht, --timestamp-rfc3161 zu verwenden.
  • SHA2 verwendet --timestamp-rfc3161.
  • Schlägt das Hinzufügen des Zeitstempels bei SHA2 fehl, wird automatisch einmal zwischen den Standardadressen von Microsoft und Sectigo wiederholt.
  • Ein Fehlschlagen des Zeitstempels führt nicht zwangsläufig zu einem Signaturfehler; die CLI protokolliert den Fehler und behält das Signaturergebnis ohne Zeitstempel bei.

Häufige Beispiele

Anmeldedaten über Umgebungsvariablen bereitstellen, standardmäßige SHA2-Signatur:

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

Anmeldeinformationen 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 und offizielle Website-URL eingeben:

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

Originaldatei überschreiben:

signtool sign -c CERT_CODE -f app.exe --override=true

Dry-Run lokale Test-Signierung (ohne Aufruf der Remote-Schnittstelle):

signtool sign \
-k dummy \
-s dummy \
-c CERT_CODE \
-f app.exe \
--dry-run=true
Hinweis

--dry-run ruft die Remote-Signaturschnittstelle nicht auf, liest und schreibt jedoch weiterhin lokale Dateien und verwendet ein lokal selbstsigniertes Zertifikat. Derzeit werden weiterhin Nicht-Leer-Prüfungen für Anmeldeinformationen und Zertifikatsnummern durchlaufen, daher werden im Beispiel Platzhalter-Anmeldeinformationen verwendet.


Referenz zur Fehlerbehebung

FehlermeldungMögliche UrsacheLösungsvorschlag
access key is required...--access-key wurde nicht übergeben, und ACCESS_KEY wurde ebenfalls nicht gesetzt.Umgebungsvariable setzen oder -k verwenden.
access secret is required...--access-secret wurde nicht übergeben, und ACCESS_SECRET wurde ebenfalls nicht gesetzt.Umgebungsvariable setzen oder -s verwenden.
cert code is required...Zertifikatsnummer wurde 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 zeigt auf ein Verzeichnis statt auf eine Datei.Ändern Sie den Pfad auf die zu signierende Datei.
Zeitstempel fehlgeschlagen, aber Signaturdatei wurde erstelltZeitstempeldienst nicht verfügbar oder Zertifikatskettenprüfung fehlgeschlagen.Überprüfen Sie die Zeitstempel-URL und ändern Sie gegebenenfalls --timestamp-rfc3161.