signtool sign Befehlsreferenz
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-Element | Parameter | Umgebungsvariable | Beschreibung |
|---|---|---|---|
| Access Key | --access-key / -k | ACCESS_KEY | Wenn der Parameter leer ist, wird automatisch die Umgebungsvariable gelesen |
| Access Secret | --access-secret / -s | ACCESS_SECRET | Wenn 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:
| Parameterwert | Tatsächliche Dienstadresse |
|---|---|
nicsrs | https://ssl.face.nicsrs.com |
Leerer Wert, racent oder ein beliebiger anderer Wert | 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 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
| Parameter | Kurzform | Standardwert | Beschreibung |
|---|---|---|---|
--address | -a | leer | Kennung der Remote-Dienstadresse, 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 | Pflichtfeld. Zertifikatsnummer. |
--file | -f | Leer | Pflichtfeld. Pfad der zu signierenden Datei, darf kein Verzeichnis sein. |
--out | -o | Leer | Pfad der Ausgabedatei; wenn leer und Überschreiben nicht aktiviert, wird automatisch ein Standarddateiname generiert. |
--override | — | false | Ausgabedatei überschreibt die Originaldatei. |
--sha1 | -1 | false | SHA1-Signatur aktivieren. |
--sha2 | -2 | true | SHA2-Signatur aktivieren. |
--timestamp | — | auto | SHA1 Authenticode-Zeitstempeladresse. auto verwendet die Standardadresse, eine leere Zeichenfolge deaktiviert sie. |
--timestamp-rfc3161 | — | auto | SHA2 RFC3161-Zeitstempeladresse. auto verwendet die Standardadresse, eine leere Zeichenfolge deaktiviert sie. |
--desc | -n | Leer | Beschreibungstext des Programms, der in die Signatur geschrieben wird. |
--url | -u | Leer | URL der Programminformationen, die in die Signatur geschrieben wird. |
--nest | — | true | Vorhandene Signatur beibehalten und verschachtelte Signatur anhängen; bei false wird die vorhandene Signatur gelöscht. |
--verify | — | false | Beim Anhängen der Signatur wird ein Fehler zurückgegeben, wenn das Zertifikat nicht vertrauenswürdig ist. |
--dry-run | — | false | Verwendet ein lokales Testzertifikat zum Erzeugen der Signatur, ohne die Remote-Signaturschnittstelle aufzurufen. |
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-keyoderACCESS_KEYmuss vorhanden sein.--access-secretoderACCESS_SECRETmuss vorhanden sein.--cert-codemuss vorhanden sein.--filemuss vorhanden sein und darf kein Verzeichnis sein.--sha1und--sha2müssen mindestens 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 | Eingabedatei direkt überschreiben |
Beispiel:
app.exe → app.signed.20260611.153000.exe
driver.sys → driver.signed.20260611.153000.sys
--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
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:
| 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=
Alle Zeitstempel schließen:
signtool sign -c CERT_CODE -f app.exe --timestamp= --timestamp-rfc3161=
- Nur Zeitstempel-Adressen, die mit
httpbeginnen, werden verwendet. - SHA1 verwendet bevorzugt
--timestamp; ist dies keine HTTP-Adresse, wird versucht,--timestamp-rfc3161zu 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
--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
| Fehlermeldung | Mögliche Ursache | Lö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 erstellt | Zeitstempeldienst nicht verfügbar oder Zertifikatskettenprüfung fehlgeschlagen. | Überprüfen Sie die Zeitstempel-URL und ändern Sie gegebenenfalls --timestamp-rfc3161. |