Comment signer un package d’application à l’aide de SignTool

Notes

pour signer un package d’application Windows, consultez signer un package d’application à l’aide de SignTool.

découvrez comment utiliser SignTool pour signer vos packages d’application Windows pour qu’ils puissent être déployés. SignTool fait partie du kit de développement logiciel (SDK) Windows.

tous les packages d’application Windows doivent être signés numériquement avant de pouvoir être déployés. alors que Microsoft Visual Studio 2012 et versions ultérieures peuvent signer un package d’application lors de sa création, les packages que vous créez à l’aide de l’outil app packager (MakeAppx.exe) de la SDK Windows ne sont pas signés.

Notes

vous pouvez utiliser uniquement SignTool pour signer vos packages d’application Windows sur Windows 8 et versions ultérieures, ou Windows Server 2012 et versions ultérieures. vous ne pouvez pas utiliser SignTool pour signer des packages d’application sur des systèmes d’exploitation de niveau supérieur tels que Windows 7 ou Windows Server 2008 R2.

Bon à savoir

Technologies

Prérequis

Considérations supplémentaires

Le certificat que vous utilisez pour signer le package d’application doit respecter les critères suivants :

  • le nom du sujet du certificat doit correspondre à l’attribut Publisher qui est contenu dans l’élément identity du fichier AppxManifest.xml stocké dans le package. le nom de l’éditeur fait partie de l’identité d’une application Windows empaquetée. vous devez donc faire en sorte que le nom du sujet du certificat corresponde au nom de l’éditeur de l’application. Cela permet de vérifier l’identité des packages signés par rapport à la signature numérique. Pour plus d’informations sur la signature des erreurs susceptibles de se produire lors de la signature d’un package d’application à l’aide de SignTool, consultez la section Notes de la rubrique comment créer un certificat de signature de package d’application.

  • Le certificat doit être valide pour la signature de code. Cela signifie que ces deux éléments doivent être vrais :

    • Le champ utilisation améliorée de la clé du certificat doit être désactivé ou contenir la valeur EKU pour la signature de code (1.3.6.1.5.5.7.3.3).
    • Le champ utilisation de la clé (KU) du certificat doit être désactivé ou contenir le bit d’utilisation pour la signature numérique (0x80).
  • Le certificat contient une clé privée.

  • Le certificat est valide. Il est actif, n’a pas expiré et n’a pas été révoqué.

Instructions

Étape 1 : déterminer l’algorithme de hachage à utiliser

Lorsque vous signez le package d’application, vous devez utiliser le même algorithme de hachage que celui que vous avez utilisé lors de la création du package d’application. Si vous avez utilisé les paramètres par défaut pour créer le package d’application, l’algorithme de hachage utilisé est SHA256.

Si vous avez utilisé App Packager avec un algorithme de hachage spécifique pour créer le package d’application, utilisez le même algorithme pour signer le package. Pour déterminer l’algorithme de hachage à utiliser pour la signature d’un package, vous pouvez extraire le contenu du package et inspecter le fichier AppxBlockMap.xml. L’attribut HashMethod de l’élément blockmap indique l’algorithme de hachage qui a été utilisé lors de la création du package d’application. Par exemple :

<BlockMap xmlns="http://schemas.microsoft.com/appx/2010/blockmap" 
HashMethod="https://www.w3.org/2001/04/xmlenc#sha256">

L’élément blockmap précédent indique que l’algorithme SHA256 a été utilisé. Ce tableau répertorie le mappage des algorithmes actuellement disponibles :

Valeur HashMethod HashAlgorithm à utiliser
https://www.w3.org/2001/04/xmlenc#sha256 SHA256 (valeur par défaut. AppX)
https://www.w3.org/2001/04/xmldsig-more#sha384 SHA384
https://www.w3.org/2001/04/xmlenc#sha512 SHA512

Étape 2 : exécuter SignTool.exe pour signer le package

Pour signer le package avec un certificat de signature à partir d’un fichier. pfx

  • SignTool sign /fd hashAlgorithm /a /f signingCert.pfx /p password filepath.appx
    

SignTool utilise par défaut le paramètre/FD HashAlgorithm sur SHA1 s’il n’est pas spécifié, et SHA1 n’est pas valide pour la signature des packages d’application. Vous devez donc spécifier ce paramètre lorsque vous signez un package d’application. Pour signer un package d’application créé avec le hachage SHA256 par défaut, vous devez spécifier le paramètre/FD HashAlgorithm en tant que SHA256 :

SignTool sign /fd SHA256 /a /f signingCert.pfx /p password filepath.appx

Vous pouvez omettre le paramètre de mot de passe /p Si vous utilisez un fichier. pfx qui n’est pas protégé par un mot de passe. Vous pouvez également utiliser d’autres options de sélection de certificat qui sont prises en charge par SignTool pour signer des packages d’application. Pour plus d’informations sur ces options, consultez SignTool.

Notes

Vous ne pouvez pas utiliser l’opération d’horodatage SignTool sur un package d’application signé ; l’opération n’est pas prise en charge.

Si vous souhaitez horodater le package de l’application, vous devez le faire pendant l’opération de signature. Par exemple :

SignTool sign /fd hashAlgorithm /a /f signingCert.pfx /p password /tr timestampServerUrl 
filepath.appx

Définissez le paramètre/TR timestampServerUrl sur l’URL d’un serveur de datage RFC 3161.

Remarques

Cette section traite de la résolution des erreurs de signature des packages d’application.

Résolution des erreurs de signature des packages d’application

En plus des erreurs de signature que SignTool peut retourner, SignTool peut également retourner des erreurs spécifiques à la signature des packages d’application. Ces erreurs apparaissent généralement sous la forme d’erreurs internes :

SignTool Error: An unexpected internal error has occurred.
Error information: "Error: SignerSign() failed." (-2147024885 / 0x8007000B) 

Si le code d’erreur commence par 0x8008, tel que 0x80080206 _ AppX _ E _ contenu endommagé), cela indique que le package en cours de signature n’est pas valide. Dans ce cas, avant de pouvoir signer le package, vous devez régénérer le package. Pour obtenir la liste complète des * Erreurs 0x8008, consultez codes d’erreur com (sécurité et configuration).

Plus généralement, l’erreur est 0x8007000b (format erroné de l’erreur _ _ ). Dans ce cas, vous pouvez trouver des informations d’erreur plus spécifiques dans le journal des événements :

Pour rechercher dans le journal des événements

  1. Exécutez eventvwr. msc.
  2. ouvrez le journal des événements : observateur d’événements (Local) > les journaux des Applications et des Services > microsoft > Windows > AppxPackagingOM > microsoft-Windows-AppxPackaging/operational
  3. Recherchez l’événement d’erreur le plus récent.

L’erreur interne correspond généralement à l’un des éléments suivants :

ID de l’événement Exemple de chaîne d’événement Suggestion
150 erreur 0x8007000B : le nom de l’éditeur du manifeste de l’application (CN = contoso) doit correspondre au nom du sujet du certificat de signature (CN = contoso, C = US). Le nom de l’éditeur du manifeste de l’application doit correspondre exactement au nom du sujet de la signature.
[!Note]
Ces noms sont spécifiés entre guillemets et respectent tous deux la casse et l’espace blanc.

vous pouvez mettre à jour la chaîne d’attribut Publisher définie pour l’élément identity dans le fichier AppxManifest.xml pour qu’elle corresponde au nom d’objet du certificat de signature prévu. Ou sélectionnez un autre certificat de signature avec un nom d’objet qui correspond au nom de l’éditeur du manifeste de l’application. Le nom de l’éditeur du manifeste et le nom de l’objet du certificat sont répertoriés dans le message de l’événement.
151 erreur 0x8007000B : la méthode de hachage de signature spécifiée (SHA512) doit correspondre à la méthode de hachage utilisée dans le mappage de bloc de package d’application (SHA256). Le hashAlgorithm spécifié dans le paramètre/fd est incorrect (voir étape 1 : déterminer l’algorithme de hachage à utiliser). Exécutez à nouveau SignTool avec HashAlgorithm qui correspond au mappage de bloc de package d’application.
152 erreur 0x8007000B : le contenu du package d’application doit être validé par rapport à son mappage de bloc. Le package d’application est endommagé et doit être régénéré pour générer un nouveau mappage de bloc. pour plus d’informations sur la création d’un package d’application, consultez création d’un package d’application avec app packager ou création d’un package d’application avec Visual Studio 2012.

Considérations relatives à la sécurité

Une fois le package signé, le certificat que vous avez utilisé pour signer le package doit toujours être approuvé par l’ordinateur sur lequel le package doit être déployé. En ajoutant un certificat aux magasins de certificats de l’ordinateur local, vous affectez le certificat de confiance de tous les utilisateurs sur l’ordinateur. Nous vous recommandons d’installer les certificats de signature de code que vous souhaitez pour tester des packages d’application dans le magasin de certificats personnes autorisées, et de supprimer rapidement ces certificats quand vous n’en avez plus besoin. Si vous créez vos propres certificats de test pour la signature des packages d’application, nous vous recommandons également de limiter les privilèges associés au certificat de test. Pour plus d’informations sur la création de certificats de test pour la signature de packages d’application, consultez comment créer un certificat de signature de package d’application.

Exemples

Exemple de création de package d’application

Concepts

Meilleures pratiques pour la signature de code

signature d’un package dans Visual Studio 2012

SignTool

Package d’application (MakeAppx.exe)

Création d’un certificat de signature de package d’application