SignTool
SignTool est un outil en ligne de commande qui signe numériquement les fichiers, vérifie les signatures dans les fichiers et horodate les fichiers. 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. |
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 récupération 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 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