SignTool (SignTool)

SignTool est un outil en ligne de commande qui signe numériquement les fichiers, vérifie les signatures dans les fichiers et les fichiers d’horodatage. Pour plus d’informations sur l’importance de la signature de fichiers, consultez Présentation de la signature de code.

L’outil est installé dans le dossier \Bin du chemin d’installation du Kit de développement logiciel (SDK) Microsoft Windows, par exemple : C:\Program Files (x86)\Windows Kits\10\bin\10.0.19041.0\x64\signtool.exe.

SignTool est disponible dans le cadre du Kit de développement logiciel (SDK) Windows, que vous pouvez télécharger à partir du Kit de développement logiciel (SDK) Windows.

Notes

Le Kit de développement logiciel (SDK) Windows 10, Windows 10 HLK, Windows 10 WDK et Windows 10 ADK builds 20236 et versions ultérieures nécessitent que vous spécifiiez l’algorithme digest. La commande SignTool sign nécessite l’option d’algorithme de synthèse de fichier (/fd) et l’option d’algorithme d’horodatage (/td) pendant la signature et l’horodatage, respectivement.

Si /fd n’est pas spécifié lors de la signature et si /td n’est pas spécifié pendant l’horodatage, la commande lève un avertissement, le code d’erreur 0, initialement. Dans les versions ultérieures de SignTool, l’avertissement devient une erreur. Nous recommandons 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 à effectuer sur un fichier : catdb, sign, timestampou 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 Le chemin d’accès à un 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 catdb commande, consultez Options de commande catdb.
sign Signe numériquement les fichiers. Les signatures numériques protègent les fichiers contre toute falsification et permettent aux utilisateurs de vérifier le signataire en fonction d’un certificat de signature. Pour obtenir la liste des options prises en charge par la sign commande, consultez Options de commande de signature.
timestamp Fichiers d’horodatage. Pour obtenir la liste des options prises en charge par la timestamp commande, consultez Options de commande timestamp.
verify Vérifie la signature numérique des fichiers. Détermine si le certificat de signature a été émis 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 verify commande, consultez Vérifier les options de commande.

Les options suivantes s’appliquent à toutes les commandes 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 /d pas ou /g, SignTool met à jour le composant système et la base de données de pilotes.
/gGUID 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 du catalogue. Si cette option n’est pas spécifiée, SignTool ajoute le catalogue spécifié à la base de données du 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 portant le même nom que le catalogue spécifié.

Notes

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

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 le plus longtemps. Si cette option n’est pas présente, SignTool s’attend à trouver un seul certificat de signature valide.
/acfile Ajoute un autre certificat du fichier au bloc de signature.
/as Ajoute cette signature. Si aucune signature principale n’existe, cette signature est plutôt la signature principale.
/cCertTemplateName Spécifie le nom du modèle de certificat (une extension Microsoft) pour le certificat de signature.
/cspCSPName Spécifie le fournisseur de services de chiffrement (CSP) qui contient le conteneur de clés privées.
/dDesc Spécifie une description du contenu signé.
/dgChemin Génère le résumé à signer et les fichiers PKCS7 non signés. Les fichiers de synthèse de sortie et PKCS7 sont <Path>\<FileName.dig> et <Path>\<FileName.p7u>. Pour générer un fichier XML supplémentaire, utilisez /dxml.
/diChemin Crée la signature en ingérant le digest signé dans le fichier PKCS7 non signé. Le digest signé d’entrée et les fichiers PKCS7 non signés doivent être <Path>\<FileName.dig.signed> et <Path>\<FileName.p7u>.
/dlibDLL Spécifie la DLL qui implémente la AuthenticodeDigestSign fonction avec laquelle signer le digest. Cette option équivaut à utiliser SignTool séparément avec les /dgoptions , /dset /di . Cette option appelle les trois en tant qu’opération atomique unique.
/dmdfFichier Lorsqu’elle est utilisée avec l’option /dg , transmet le contenu du fichier à la AuthenticodeDigestSign fonction sans modification.
/ds Signe le digest uniquement. Le fichier d’entrée doit être le digest généré par l’option /dg . Le fichier de sortie est : <File.signed>.
/duURL Spécifie une URL pour la description développée du contenu signé.
/dxml Lorsqu’elle est utilisée avec l’option /dg , génère un fichier XML. Le fichier de sortie est : <Path>\<FileName>.dig.xml.
/fSignCertFile 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 pas de clés privées, utilisez les /csp options et /kc pour spécifier le nom du conteneur csp et de la clé privée.
/fdalg 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 Si vous spécifiez la chaîne « certHash », la commande utilise 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.
/iIssuerName Spécifie le nom de l'émetteur du certificat de signature. Cette valeur peut être une sous-chaîne du nom d'émetteur entier.
/kcPrivKeyContainerName Spécifie le nom du conteneur de clés privées.
/nSubjectName 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 wintrust.dll . Cette option est ignorée pour les fichiers non PE.
/pPassword 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.
/p7Chemin 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>.
/p7ceValue Spécifie des options pour le contenu PKCS #7 signé. Définissez ValueEmbedded sur pour incorporer le contenu signé dans le fichier PKCS #7 ou pour DetachedSignedData produire la partie des données signé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.
/rRootSubjectName 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.
/sStoreName Spécifie le magasin à ouvrir lorsque la commande recherche le certificat. Si cette option n’est pas spécifiée, la commande ouvre le My magasin.
/sha1Hash Spécifie le hachage SHA1 du certificat de signature. Le hachage SHA1 est couramment 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’ordinateurs au lieu d’un magasin d’utilisateurs.
/tURL 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 .
/tdalg 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é lors de l’horodatage, la commande génère une erreur.
/trURL 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 .
/uUsage 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.
/tURL 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.
/tdalg 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é lors de l’horodatage, la commande génère un avertissement.
/tpindex Horodate la signature à l’index.
/trURL 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 de vérification

Option Verify Description
/a Spécifie que toutes les méthodes peuvent être utilisées pour vérifier le fichier. Tout d’abord, SignTool recherche les bases de données de catalogue pour déterminer si le fichier est connecté dans un catalogue. Si le fichier n’est connecté dans aucun catalogue, SignTool tente de vérifier la signature incorporée du fichier. Nous vous recommandons cette option lors de la vérification des fichiers qui peuvent ou non être connectés dans un catalogue. Parmi les exemples de fichiers qui peuvent être signés ou non, citons les fichiers ou pilotes Windows.
/ad Recherche le catalogue à l'aide de la base de données de catalogue par défaut.
/all Vérifie toutes les signatures d’un fichier avec plusieurs signatures.
/as Recherche le catalogue à l'aide de la base de données de catalogue du composant système (pilote).
/agCatDBGUID Recherche le catalogue dans la base de données de catalogue identifiée par le GUID.
/cCatFile 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.
/dsIndex Vérifie la signature à une certaine position.
/hash{SHA1|SHA256} Spécifie un algorithme de hachage facultatif à utiliser lors de la recherche d'un fichier dans un catalogue.
/kp Effectue la vérification à l’aide de la stratégie de signature du pilote en mode noyau x64.
/ms Utilise plusieurs sémantiques de vérification. Ce comportement est la valeur par défaut d’un appel WinVerifyTrust .
/oVersion Vérifie le fichier par version du système d'exploitation. Le paramètre de version est de la forme : <PlatformID>:<VerMajor>.< VerMinor>.< BuildNumber>. Nous vous recommandons d’utiliser l’option /o . Si /o n’est pas spécifié, SignTool peut retourner des résultats inattendus. Par exemple, si vous n’incluez /opas , les catalogues système qui se valident correctement sur un système d’exploitation plus ancien risquent de ne pas être validés 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 d’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 catdb options.
/pgPolicyGUID Spécifie une stratégie de vérification par GUID. Le GUID correspond au ActionID de la stratégie de vérification. Cette option ne peut pas être utilisée avec les catdb options.
/ph Imprimez et vérifiez les valeurs de hachage de page. Windows Vista et versions antérieures : cette option n’est pas prise en charge.
/rRootSubjectName 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é émis par une autorité de confiance, 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 la signature incorporée status sauf si une option est spécifiée pour rechercher un catalogue, telle que /a, /ad, /as, /agou /c.

Valeur retournée

SignTool retourne l’un des codes de sortie suivants lorsqu’il se termine.

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 à la base de données du composant système et du pilote. L’option /u génère un nom unique si nécessaire pour empêcher le remplacement d’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 et horodaille numériquement 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 s’affichent dans 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 horodaille un fichier qui a déjà été signé numériquement.

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

La commande suivante horodaille 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 connecté 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