Aller au contenu principal

Référence de la commande signtool sign

Remarque

Dans cet article, signtool désigne le client CLI de signature de code à distance de sslTrus, et non le signtool.exe fourni avec le SDK Microsoft Windows. Lorsque l’outil du SDK Windows est utilisé, il est explicitement désigné sous le nom de Microsoft signtool.exe.

signtool sign exécute directement la signature à distance sur un fichier local. Le CLI extrait localement les données à signer, appelle le service distant pour effectuer la signature avec la clé privée, puis réécrit la signature, l’horodatage et les informations du certificat dans le fichier de sortie.

signtool sign [flags]

Consultez l'aide et la version :

signtool --help
signtool --version

Configuration des identifiants​

La commande sign lit les identifiants d’accès de la manière suivante :

Élément d’identifiantParamètreVariable d’environnementDescription
Access Key--access-key / -kACCESS_KEYLit automatiquement la variable d’environnement si le paramètre est vide
Access Secret--access-secret / -sACCESS_SECRETLit automatiquement la variable d’environnement si le paramètre est vide
export ACCESS_KEY="your-access-key"
export ACCESS_SECRET="your-access-secret"

Adresse du service distant est contrôlée par le paramètre --address, qui prend en charge les valeurs suivantes :

Valeur du paramètreAdresse réelle du service
nicsrshttps://ssl.face.nicsrs.com
Valeur vide, racent ou toute autre valeurhttps://ssl.face.racent.com
Attention
  • ACCESS_KEY et ACCESS_SECRET sont les noms de variables d'environnement réellement lus ; SIGNTOOL_ACCESS_KEY / SIGNTOOL_ACCESS_SECRET ne sont pas lus automatiquement par la CLI actuelle.
  • Il est déconseillé d'écrire le Access Secret dans l'historique du shell ou dans le dépôt de scripts ; privilégiez les variables d'environnement injectées à l'exécution ou les variables CI sécurisées.

Description des paramètres​

ParamètreAbréviationValeur par défautDescription
--address-aVideIdentifiant de l'adresse du service distant, pas un paramètre de transmission directe d'URL.
--access-key-kVideSi vide, lire ACCESS_KEY.
--access-secret-sVideSi vide, lire ACCESS_SECRET.
--cert-code-cVideObligatoire. Numéro du certificat.
--file-fVideObligatoire. Chemin du fichier à signer, ne peut pas être un répertoire.
--out-oVideChemin du fichier de sortie ; s'il est vide et que l'écrasement n'est pas activé, un nom de fichier par défaut est généré automatiquement.
--override—falseLe fichier de sortie écrase le fichier d'origine.
--sha1-1falseActiver la signature SHA1.
--sha2-2trueActiver la signature SHA2.
--timestamp—autoAdresse d’horodatage Authenticode SHA1. auto utilise l’adresse par défaut ; une chaîne vide désactive.
--timestamp-rfc3161—autoAdresse d’horodatage RFC3161 SHA2. auto utilise l’adresse par défaut ; une chaîne vide désactive.
--desc-nVideTexte descriptif du programme inscrit dans la signature.
--url-uvideURL vers les informations du programme pour l’écriture de la signature.
--nest—trueConserve la signature existante et ajoute une signature imbriquée ; false efface la signature existante.
--verify—falseRenvoie une erreur si le certificat n’est pas approuvé lors de l’ajout de la signature.
--dry-run—falseGénérez la signature à l’aide d’un certificat de test local, sans appeler l’interface de signature distante.
Format des paramètres booléens

Les paramètres booléens doivent utiliser le format 参数=值 et ne prennent pas en charge la séparation par espaces :

  • Correct : --sha1=true --sha2=false
  • Incorrect : --sha1 true --sha2 false

Règles obligatoires​

Avant l’exécution, les conditions suivantes sont vérifiées ; si l’une d’elles n’est pas satisfaite, une erreur est générée et le processus se termine :

  • --access-key ou ACCESS_KEY doit exister.
  • --access-secret ou ACCESS_SECRET doivent exister.
  • --cert-code doit exister.
  • --file doit exister et ne doit pas être un répertoire.
  • --sha1 et --sha2 doivent avoir au moins un activé.

Règles du fichier de sortie​

Lorsque --out n'est pas spécifié :

--overrideComportement de sortie
false(par défaut)Sortie dans le même répertoire que le fichier d’entrée, avec le nom de fichier ${name}.signed.${yyyyMMdd.HHmmss}${ext}
trueÉcrase directement le fichier d’entrée

Exemple :

app.exe    → app.signed.20260611.153000.exe
driver.sys → driver.signed.20260611.153000.sys
注意

--override=true remplacera le fichier d’origine ; veuillez confirmer qu’une sauvegarde a été effectuée avant l’exécution. En cas d’échec de la signature, la CLI tentera de supprimer le fichier de sortie incomplet.


Choix de l’algorithme​

Par défaut, seul SHA2 est activé :

signtool sign -c CERT_CODE -f app.exe

Uniquement signer avec SHA1 :

signtool sign -c CERT_CODE -f app.exe --sha1=true --sha2=false

En signant simultanément SHA1 et SHA2 :

signtool sign -c CERT_CODE -f app.exe --sha1=true --sha2=true
Remarque

Lorsque SHA1 et SHA2 sont activés simultanément, le processus traite d'abord SHA1, puis SHA2. SHA1 est toujours pris en charge actuellement, mais SHA2 est privilégié pour les nouveaux scénarios de signature.


Configuration de l'horodatage​

Les valeurs auto de --timestamp et --timestamp-rfc3161 sont remplacées par les adresses par défaut lors de la phase de validation :

ParamètreValeur réelle de autoUtilisation
--timestamphttp://timestamp.sectigo.comHorodatage Authenticode SHA1
--timestamp-rfc3161http://timestamp.sectigo.comHorodatage RFC3161 SHA2

Service d'horodatage SHA2 personnalisé :

signtool sign \
-c CERT_CODE \
-f app.exe \
--timestamp-rfc3161=http://timestamp.acs.microsoft.com

Désactivation de l’horodatage SHA2 :

signtool sign -c CERT_CODE -f app.exe --timestamp-rfc3161=

Fermer tous les horodatages :

signtool sign -c CERT_CODE -f app.exe --timestamp= --timestamp-rfc3161=
说明
  • Seules les adresses de horodatage commençant par http seront utilisées.
  • Pour SHA1, --timestamp est prioritaire ; si ce n'est pas une adresse HTTP, on essaie --timestamp-rfc3161.
  • Pour SHA2, utiliser --timestamp-rfc3161.
  • En cas d'échec de l'ajout du horodatage pour SHA2, une nouvelle tentative automatique est effectuée entre les adresses par défaut de Microsoft et Sectigo.
  • Un échec de horodatage n'entraîne pas nécessairement un échec de signature ; le CLI consigne l'erreur et conserve le résultat de signature sans horodatage.

Exemples courants​

Utilisation de variables d'environnement pour fournir les identifiants, signature SHA2 par défaut :

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

Fournir les identifiants directement via les paramètres :

signtool sign \
--access-key "your-access-key" \
--access-secret "your-access-secret" \
--cert-code CERT_CODE \
--file app-unsigned.exe \
--out app-signed.exe

Utilisation de l'adresse NICSRS :

signtool sign \
--address nicsrs \
--cert-code CERT_CODE \
--file app-unsigned.exe \
--out app-signed.exe

Saisissez la description du programme et l’URL du site officiel :

signtool sign \
-c CERT_CODE \
-f app-unsigned.exe \
-o app-signed.exe \
--desc "Example Application" \
--url "https://example.com"

Ajout d’une signature imbriquée (conservation des signatures existantes) :

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

Écraser le fichier d'origine :

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

dry-run Essai de signature local (sans appel à l’interface distante) :

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

--dry-run n’appelle pas l’interface de signature à distance, mais il lit et écrit toujours des fichiers locaux et fait appel au certificat auto-signé local. Il passe encore par la validation de non-vacuité des informations d’identification et du numéro de certificat, c’est pourquoi un identifiant fictif est utilisé dans l’exemple.


Référence de dépannage​

Message d’erreurCause possibleSuggestion de traitement
access key is required...--access-key non fourni, et ACCESS_KEY non défini.Définir la variable d’environnement ou utiliser -k.
access secret is required...--access-secret non fourni, et ACCESS_SECRET non défini.Définir la variable d'environnement ou utiliser -s.
cert code is required...Numéro de certificat non fourni.Utiliser -c CERT_CODE.
sha1 or sha2 is required...SHA1 et SHA2 désactivés simultanément.Activer au moins un algorithme.
file <path> is a directory--file pointe vers un répertoire au lieu d'un fichier.Modifiez le chemin pour pointer vers le fichier à signer.
Échec de l'horodatage mais fichier de signature généréLe service d'horodatage est indisponible ou l'échec de validation de la chaîne de certificats.Vérifiez l'URL d'horodatage et changez --timestamp-rfc3161 si nécessaire.