Partager via


SignTool (SignTool)

SignTool est un outil en ligne de commande qui signe numériquement des fichiers, vérifie les signatures dans les fichiers, supprime les signatures des fichiers et horodatage. Pour plus d’informations sur la raison pour laquelle les signatures de fichier sont importantes, consultez Introduction to code signing (Introduction à la signature de code).

SignTool est disponible dans le cadre du kit de développement logiciel (SDK) de Windows. L'outil est installé dans le dossier \Bin du chemin d'installation du SDK Windows, par exemple : C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x64\signtool.exe.

Remarque

Les versions 20236 et ultérieures de Windows SDK, Windows Hardware Lab Kit (HLK), Windows Driver Kit (WDK) et Windows Assessment and Deployment Kit (ADK) exigent que vous spécifiiez l'algorithme d'analyse. La commande SignTool sign exige l’option d'algorithme de condensat de fichiers (/fd) et l’option d'algorithme de condensat d’horodatage (/td) pendant la signature et la génération de l'horodatage, respectivement.

Si /fd n’est pas spécifié lors de la signature et si /td n’est pas spécifié pendant la génération de l’horodatage, la commande émet initialement un avertissement, code d’erreur 0. Dans les versions ultérieures de SignTool, l’avertissement devient une erreur. Nous recommandons l’utilisation de l’authentification SHA256. Il est considéré comme plus sécurisé que SHA1 par le secteur.

Syntaxe

signtool [command] [options] [file_name | ...]

Paramètres

Argument Description
command L’une des quatre commandes qui spécifie une opération à exécuter sur un fichier : catdb, sign, timestamp, ou verify. Pour obtenir une description de chaque commande, consultez le tableau suivant.
options Une option qui modifie une commande. En plus des options globales /q et /v, chaque commande prend en charge un seul ensemble d'options.
file_name Chemin d'accès au fichier à signer.

SignTool prend en charge les commandes suivantes :

Commande Description
catdb Ajoute ou supprime un fichier catalogue dans une base de données de catalogue. Les bases de données de catalogue sont utilisées pour la récupération automatique des fichiers catalogue et sont identifiées par un GUID. Pour obtenir la liste des options prises en charge par la commande catdb, consultez Options de commande catdb.
remove Supprime une signature d’un fichier. Pour obtenir la liste des options prises en charge par la remove commande, consultez supprimer les options de commande.
sign Signe numériquement les fichiers. Les signatures numériques protègent les fichiers contre la falsification et permettent aux utilisateurs de vérifier le signataire selon un certificat de signature. Pour obtenir la liste des options prises en charge par la commande sign, consultez Options de commande sign.
timestamp Horodate les fichiers. Pour obtenir la liste des options prises en charge par la commande timestamp, consultez Options de commande TimeStamp.
verify Vérifie la signature numérique des fichiers. Détermine si le certificat de signature a été publié par une autorité approuvée, si le certificat de signature a été révoqué et, éventuellement, si le certificat de signature est valide pour une stratégie spécifique. Pour obtenir la liste des options prises en charge par la commande verify, consultez Options de commande Verify.

Les options suivantes s'appliquent à toutes les commandes de SignTool :

Option globale Description
/q N'affiche aucune sortie si la commande fonctionne correctement, et affiche la sortie minimale si la commande échoue.
/v Affiche la sortie des commentaires que la commande s'exécute correctement ou échoue, et affiche des messages d'avertissement.
/debug Affiche les informations de débogage.

Options de commande Catdb

Le tableau suivant répertorie les options qui peuvent être utilisées avec la commande catdb :

Option Catdb Description
/d Spécifie que la base de données de catalogue par défaut est mise à jour. Si vous n’utilisez ni /d ni /g, SignTool met à jour le composant système et la base de données des pilotes.
/g GUID Spécifie que la base de données de catalogue identifiée par le GUID est mise à jour.
/r Supprime le catalogue spécifié de la base de données de catalogue. Si cette option n’est pas spécifiée, SignTool ajoute le catalogue spécifié à la base de données de catalogue.
/u Spécifie qu'un nom unique est généré automatiquement pour les fichiers catalogue ajoutés. Si nécessaire, les fichiers catalogue seront renommés pour empêcher des conflits entre les noms des fichiers catalogue existants. Si cette option n’est pas spécifiée, SignTool remplace tout catalogue existant dont le nom est le même que celui du catalogue spécifié.

Remarque

Les bases de données de catalogue sont utilisées pour la recherche automatique des fichiers catalogue.

Supprimer les options de commande

Le tableau suivant répertorie les options qui peuvent être utilisées avec la commande remove :

Option Supprimer Description
/c Supprimez tous les certificats, à l’exception du certificat du signataire de la signature.
/q Aucune sortie en cas de réussite et de sortie minimale en cas d’échec. Comme toujours, SignTool retourne 0 la réussite et 1 l’échec.
/s Supprimez entièrement la signature.
/u Supprimez les attributs non authentifiés de la signature, par exemple les doubles signatures et les horodatages.
/v Imprimez les messages de réussite et d’état détaillés. Cela peut également fournir des informations légèrement plus sur l’erreur.

Options de la commande Sign

Le tableau suivant répertorie les options qui peuvent être utilisées avec la commande sign :

Options de la commande Sign Description
/a Sélectionne automatiquement le meilleur certificat de signature. SignTool recherche tous les certificats valides qui répondent à toutes les conditions spécifiées et sélectionne celui qui est valide depuis le plus longtemps. Si cette option n’est pas présente, SignTool s’attend à ne trouver qu’un seul certificat de signature valide.
/ac file Ajoute un certificat supplémentaire à partir de file au bloc de signature.
/as Ajoute cette signature. Si aucune signature principale n’existe, cette signature est effectuée à la place de la signature principale.
/c CertTemplateName Spécifie le nom du modèle de certificat (une extension Microsoft) pour le certificat de signature.
/csp CSPName Spécifie le fournisseur de services de chiffrement (CSP) qui contient le conteneur de clés privées.
/d Desc Spécifie une description du contenu signé.
/dg Chemin Génère le condensé à signer et les fichiers PKCS7 non signés. Le condensé et les fichiers PKCS7 obtenus sont les suivants : <Path>\<FileName>.dig et <Path>\<FileName>.p7u. Pour générer un fichier XML supplémentaire, utilisez /dxml.
/di Chemin Crée la signature en ingérant le condensé signé dans le fichier PKCS7 non signé. Le condensé signé et les fichiers PKCS7 non signés d’entrée doivent prendre la forme suivante : <Path>\<FileName>.dig.signed et <Path>\<FileName>.p7u.
/dlib DLL Spécifie la DLL qui implémente la fonction AuthenticodeDigestSign pour signer le condensé. Cette option équivaut à utiliser SignTool séparément avec les options /dg, /ds, et /di. Cette option appelle les trois options en une opération atomique unique.
/dmdf Filename Lorsqu’utilisé avec l’option /dg, transmet le contenu du fichier à la fonction AuthenticodeDigestSign sans modification.
/ds Signe le condensé uniquement. Le fichier d’entrée doit être le condensé généré par l’option /dg. Le fichier de sortie est : <File>.signed.
/du URL Spécifie une URL pour la description développée du contenu signé.
/dxml Lorsqu’utilisé avec l’option /dg, génère un fichier XML. Le fichier de sortie est : <Path>\<FileName>.dig.xml.
/f SignCertFile Spécifie le certificat de signature dans un fichier. Si le fichier est au format PFX (Personal Information Exchange) et protégé par un mot de passe, utilisez l'option /p pour spécifier le mot de passe. Si le fichier ne contient aucune clé privée, utilisez les options /csp et /kc pour spécifier le nom du CSP et du conteneur de clés privées.
/fd alg Spécifie l’algorithme de condensat de fichiers à utiliser pour créer des signatures de fichiers. Remarque : si l’option /fd n’est pas spécifiée lors de la signature, la commande génère une erreur.
/fd certHash La spécification de la chaîne « certHash » entraîne l’utilisation par la commande de l’algorithme spécifié sur le certificat de signature. Remarque : si l’option /fd n’est pas spécifiée lors de la signature, la commande génère une erreur.
/i IssuerName Spécifie le nom de l'émetteur du certificat de signature. Cette valeur peut être une sous-chaîne du nom d'émetteur entier.
/kc PrivKeyContainerName Spécifie le nom du conteneur de clés privées.
/n SubjectName Spécifie le nom de l'objet du certificat de signature. Cette valeur peut être une sous-chaîne du nom de l'objet entier.
/nph En cas de prise en charge, supprime les hachages de pages pour les fichiers exécutables. La valeur par défaut est déterminée par la variable d’environnement SIGNTOOL_PAGE_HASHES et par la version de wintrust.dll. Cette option est ignorée pour les fichiers non PE.
/p Password Spécifie le mot de passe à utiliser lors de l'ouverture d'un fichier PFX. Utilisez l’option /f pour spécifier un fichier PFX.
/p7 Chemin Spécifie qu'un fichier PKCS (Public Key Cryptography Standards) #7 est produit pour chaque fichier de contenu spécifié. Les fichiers PKCS #7 sont nommés <path>\<filename>.p7.
/p7ce Value Spécifie des options pour le contenu PKCS #7 signé. Remplacez Value par Embedded pour incorporer le contenu signé dans le fichier PKCS #7 ou par DetachedSignedData pour produire la partie signée des données d’un fichier PKCS #7 détaché. Si l’option /p7ce n’est pas spécifiée, le contenu signé est incorporé par défaut.
/p7co <OID> Spécifie l'identificateur d'objet (OID) qui identifie le contenu PKCS #7 signé.
/ph En cas de prise en charge, génère les hachages de pages pour les fichiers exécutables.
/r RootSubjectName Spécifie le nom de l'objet du certificat racine auquel le certificat de signature doit être lié. Cette valeur peut être une sous-chaîne du nom de l'objet entier du certificat racine.
/s StoreName Spécifie le magasin à ouvrir lorsque la commande recherche le certificat. Si cette option n’est pas spécifiée, la commande ouvre le magasin My.
/sha1 Hash Spécifie le hachage SHA1 du certificat de signature. Le hachage SHA1 est souvent utilisé lorsque plusieurs certificats répondent aux critères spécifiés par les options restantes.
/sm Spécifie que la commande utilise un magasin d’ordinateur au lieu d’un magasin d’utilisateur.
/t URL Spécifie l'URL du serveur d'horodatage. Si cette option ou /tr n’est pas spécifiée, le fichier signé n’est pas horodaté. Si l’horodatage échoue, la commande génère un avertissement. Cette option ne peut pas être utilisée avec l’option /tr.
/td alg Utilisé avec l'option /tr pour demander un algorithme Digest utilisé par le serveur d'horodatage RFC 3161. Remarque : si /td n’est pas spécifiée lors de l’horodatage, la commande génère une erreur.
/tr URL Spécifie l'URL du serveur d'horodatage RFC 3161. Si cette option ou /t n’est pas spécifiée, le fichier signé n’est pas horodaté. Si l’horodatage échoue, la commande génère un avertissement. Cette option ne peut pas être utilisée avec l’option /t.
/u Usage Spécifie l'utilisation améliorée de la clé (EKU) qui doit être présente dans le certificat de signature. La valeur de l'utilisation peut être spécifiée par un OID ou une chaîne. L’utilisation par défaut est Code Signing ou 1.3.6.1.5.5.7.3.3.
/uw Spécifie l’utilisation de Windows System Component Verification ou 1.3.6.1.4.1.311.10.3.6.

Pour obtenir des exemples, consultez Utilisation de SignTool pour signer un fichier.

Options de commande Timestamp

Le tableau suivant répertorie les options qui peuvent être utilisées avec la commande timestamp :

Option Timestamp Description
/p7 Horodate les fichiers PKCS #7.
/t URL Spécifie l'URL du serveur d'horodatage. Le fichier en cours d'horodatage doit avoir été signé au préalable. L'option /t ou /tr est obligatoire.
/td alg Utilisé avec l'option /tr pour demander un algorithme Digest utilisé par le serveur d'horodatage RFC 3161. Remarque : si /td n’est pas spécifiée lors de l’horodatage, la commande génère un avertissement.
/tp index Horodate la signature à l’index.
/tr URL Spécifie l'URL du serveur d'horodatage RFC 3161. Le fichier en cours d'horodatage doit avoir été signé au préalable. L'option /tr ou /t est obligatoire.

Options de commande Verify

Le tableau suivant répertorie les options qui peuvent être utilisées avec la commande verify :

Option Verify Description
/a Spécifie que toutes les méthodes peuvent être utilisées pour vérifier le fichier. En premier lieu, SignTool effectue une recherche dans les bases de données de catalogue pour déterminer si le fichier est signé dans un catalogue. Si le fichier n’est signé dans aucun catalogue, SignTool tente de vérifier la signature incorporée du fichier. Nous vous recommandons d’utiliser cette option lorsque vous vérifiez des fichiers qui peuvent ou non être signés dans un catalogue. Les fichiers ou les pilotes Windows sont des exemples de fichiers susceptibles d’être signés ou non.
/ad Recherche le catalogue à l'aide de la base de données de catalogue par défaut.
/all Vérifie toutes les signatures dans un fichier contenant plusieurs signatures.
/as Recherche le catalogue à l'aide de la base de données de catalogue du composant système (pilote).
/ag CatDBGUID Recherche le catalogue dans la base de données de catalogue qui est identifiée par le GUID.
/c CatFile Spécifie le fichier catalogue par nom.
/d Imprime la description et l’URL de description. Windows Vista et versions antérieures : cette option n’est pas prise en charge.
/ds Index Vérifie la signature à un emplacement donné.
/hash{SHA1|SHA256} Spécifie un algorithme de hachage facultatif à utiliser lors de la recherche d'un fichier dans un catalogue.
/kp Procède à la vérification à l’aide de la stratégie de signature de pilotes en mode noyau x64.
/ms Utilise plusieurs sémantiques de vérification. Il s’agit du comportement par défaut d’un appel WinVerifyTrust.
/o Version Vérifie le fichier par version du système d'exploitation. Le paramètre de version se présente sous la forme suivante : <PlatformID>:<VerMajor>.<VerMinor>.<BuildNumber>. Nous vous recommandons d’utiliser l’option /o. Si /o n’est pas spécifié, SignTool peut renvoyer des résultats inattendus. Par exemple, si vous n’incluez pas /o, alors les catalogues système qui valident correctement sur un système d’exploitation plus ancien peuvent ne pas valider correctement sur un système d’exploitation plus récent.
/p7 Vérifie les fichiers PKCS #7. Aucune stratégie existante n'est utilisée pour la validation PKCS #7. SignTool vérifie la signature et génère une chaîne pour le certificat de signature.
/pa Spécifie que la stratégie de vérification de l’authentification par défaut est utilisée. Si l’option /pa n’est pas spécifiée, SignTool utilise la stratégie de vérification des pilotes Windows. Cette option ne peut pas être utilisée avec les options catdb.
/pg PolicyGUID Spécifie une stratégie de vérification par GUID. Le GUID correspond à la valeur ActionID de la stratégie de vérification. Cette option ne peut pas être utilisée avec les options catdb.
/ph Imprime et vérifie les valeurs de hachage des pages. Windows Vista et versions antérieures : cette option n’est pas prise en charge.
/r RootSubjectName Spécifie le nom de l'objet du certificat racine auquel le certificat de signature doit être lié. Cette valeur peut être une sous-chaîne du nom de l'objet entier du certificat racine.
/tw Spécifie que la commande génère un avertissement si la signature n’est pas horodatée.

La commande SignTool verify détermine si le certificat de signature a été publié par une autorité approuvée, si le certificat de signature a été révoqué et, éventuellement, si le certificat de signature est valide pour une stratégie spécifique.

La commande SignTool verify génère l’état de la signature incorporée, sauf si une option est spécifiée pour rechercher un catalogue, tel que /a, , /ad, /as, /ag ou /c.

Valeur retournée

SignTool renvoie l'un des codes de sortie suivants une fois l'opération terminée :

Code de sortie Description
0 L'exécution a été correctement effectuée.
1 L'exécution a échoué.
2 L'exécution a été effectuée avec des avertissements.

Exemples

La commande suivante ajoute le fichier catalogue MyCatalogFileName.cat au composant système et à la base de données des pilotes. L’option /u génère un nom unique si nécessaire pour éviter de remplacer un fichier catalogue existant nommé MyCatalogFileName.cat.

signtool catdb /v /u MyCatalogFileName.cat

La commande suivante signe un fichier automatiquement à l'aide du meilleur certificat.

signtool sign /a /fd SHA256 MyFile.exe 

La commande suivante signe numériquement un fichier à l'aide d'un certificat stocké dans un fichier PFX protégé par un mot de passe.

signtool sign /f MyCert.pfx /p MyPassword /fd SHA256 MyFile.exe 

La commande suivante signe numériquement et horodate un fichier. Le certificat utilisé pour signer le fichier est stocké dans un fichier PFX.

signtool sign /f MyCert.pfx /t http://timestamp.digicert.com /fd SHA256 MyFile.exe 

La commande suivante signe un fichier à l'aide d'un certificat situé dans le magasin My qui a un nom d'objet My Company Certificate.

signtool sign /n "My Company Certificate" /fd SHA256 MyFile.exe 

La commande suivante signe un contrôle ActiveX et fournit des informations qui sont affichées par un navigateur lorsque l'utilisateur est invité à installer le contrôle.

signtool sign /f MyCert.pfx /d: "MyControl" /du http://www.example.com/MyControl/info.html /fd SHA256 MyControl.exe 

La commande suivante horodate un fichier qui a déjà été signé numériquement.

signtool timestamp /t http://timestamp.digicert.com MyFile.exe

La commande suivante horodate un fichier à l’aide d’un serveur d’horodatage RFC 3161.

signtool timestamp /tr http://timestamp.digicert.com /td SHA256 MyFile.exe

La commande suivante vérifie qu'un fichier a été signé.

signtool verify MyFile.exe

La commande suivante vérifie un fichier système qui peut être signé dans un catalogue.

signtool verify /a SystemFile.dll

La commande suivante vérifie un fichier système qui est signé dans un catalogue nommé MyCatalog.cat.

signtool verify /c MyCatalog.cat SystemFile.dll

La commande suivante supprime complètement la signature d’un fichier.

signtool remove /s MyFile.exe

Voir aussi

Utilisation de SignTool pour signer un fichier

Présentation de la signature de code