Référence de la commande signtool sign
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’identifiant | Paramètre | Variable d’environnement | Description |
|---|---|---|---|
| Access Key | --access-key / -k | ACCESS_KEY | Lit automatiquement la variable d’environnement si le paramètre est vide |
| Access Secret | --access-secret / -s | ACCESS_SECRET | Lit 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ètre | Adresse réelle du service |
|---|---|
nicsrs | https://ssl.face.nicsrs.com |
Valeur vide, racent ou toute autre valeur | https://ssl.face.racent.com |
ACCESS_KEYetACCESS_SECRETsont les noms de variables d'environnement réellement lus ;SIGNTOOL_ACCESS_KEY/SIGNTOOL_ACCESS_SECRETne 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ètre | Abréviation | Valeur par défaut | Description |
|---|---|---|---|
--address | -a | Vide | Identifiant de l'adresse du service distant, pas un paramètre de transmission directe d'URL. |
--access-key | -k | Vide | Si vide, lire ACCESS_KEY. |
--access-secret | -s | Vide | Si vide, lire ACCESS_SECRET. |
--cert-code | -c | Vide | Obligatoire. Numéro du certificat. |
--file | -f | Vide | Obligatoire. Chemin du fichier à signer, ne peut pas être un répertoire. |
--out | -o | Vide | Chemin 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 | — | false | Le fichier de sortie écrase le fichier d'origine. |
--sha1 | -1 | false | Activer la signature SHA1. |
--sha2 | -2 | true | Activer la signature SHA2. |
--timestamp | — | auto | Adresse d’horodatage Authenticode SHA1. auto utilise l’adresse par défaut ; une chaîne vide désactive. |
--timestamp-rfc3161 | — | auto | Adresse d’horodatage RFC3161 SHA2. auto utilise l’adresse par défaut ; une chaîne vide désactive. |
--desc | -n | Vide | Texte descriptif du programme inscrit dans la signature. |
--url | -u | vide | URL vers les informations du programme pour l’écriture de la signature. |
--nest | — | true | Conserve la signature existante et ajoute une signature imbriquée ; false efface la signature existante. |
--verify | — | false | Renvoie une erreur si le certificat n’est pas approuvé lors de l’ajout de la signature. |
--dry-run | — | false | Générez la signature à l’aide d’un certificat de test local, sans appeler l’interface de signature distante. |
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-keyouACCESS_KEYdoit exister.--access-secretouACCESS_SECRETdoivent exister.--cert-codedoit exister.--filedoit exister et ne doit pas être un répertoire.--sha1et--sha2doivent avoir au moins un activé.
Règles du fichier de sortie
Lorsque --out n'est pas spécifié :
--override | Comportement 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
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ètre | Valeur réelle de auto | Utilisation |
|---|---|---|
--timestamp | http://timestamp.sectigo.com | Horodatage Authenticode SHA1 |
--timestamp-rfc3161 | http://timestamp.sectigo.com | Horodatage 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
httpseront utilisées. - Pour SHA1,
--timestampest 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
--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’erreur | Cause possible | Suggestion 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. |