Problèmes connus et résolution des problèmes pour SignTool

Les types d’erreurs les plus courants lors de l’utilisation de SignTool sont internes et ressemblent généralement à ceci :

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

Si le code d’erreur commence par 0x8008, par exemple 0x80080206 (APPX_E_CORRUPT_CONTENT), le package en cours de signature n’est pas valide. Si vous obtenez ce type d’erreur, vous devez reconstruire le package et réexécuter SignTool .

SignTool dispose d’une option de débogage permettant d’afficher les erreurs de certificat et le filtrage. Pour utiliser la fonctionnalité de débogage, placez l’option /debug directement après sign, suivie de la commande SignTool complète.

SignTool sign /debug [options]

Une erreur plus courante est 0x8007000B. Pour ce type d’erreur, vous trouverez plus d’informations dans le journal des événements.

Pour trouver plus d’informations dans le journal des événements :

  • Exécuter Eventvwr.msc
  • Ouvrez le journal des événements : observateur d'événements (local) -> Applications et journaux des services -> Microsoft -> Windows -> AppxPackagingOM -> Microsoft-Windows-AppxPackaging/Operational
  • Rechercher l’événement d’erreur le plus récent

L’erreur interne 0x8007000B correspond généralement à l’une des valeurs suivantes :

ID d'événement Exemple de chaîne d’événement Suggestion
150 erreur 0x8007000B : le nom de l’éditeur du manifeste d’application (CN=Contoso) doit correspondre au nom du sujet du certificat de signature (CN=Contoso, C=US). Le nom de l’éditeur de manifeste de l’application doit correspondre exactement au nom de l’objet de la signature.
151 erreur 0x8007000B : la méthode de hachage de signature spécifiée (SHA512) doit correspondre à la méthode de hachage utilisée dans la carte de blocs de package d’application (SHA256). Le hashAlgorithm spécifié dans le paramètre /fd est incorrect. Réexécutez SignTool en utilisant un algorithme de hachage qui correspond à la carte des blocs du package de l'application (utilisé pour créer le package de l'application).
152 erreur 0x8007000B : le contenu du package d’application doit être validé par rapport à son mappage de blocs. Le package d’application est endommagé et doit être reconstruit pour générer une nouvelle carte de blocs. Pour plus d’informations sur la création d’un package d’application, consultez Créer un package d’application avec l’outil MakeAppx.exe

Une autre erreur courante est 0x80080057. Vous pouvez rencontrer les problèmes suivants lorsque vous essayez de signer un fichier exécutable portable (PE) à l’aide de l’outil SignTool sur Windows :

  • Échec de la signature d'un fichier PE de 4 gigaoctets (Go) ou plus. Lorsque vous essayez de signer, vous recevez un message d’erreur « paramètre non valide (0x80080057) ».

  • Pour les fichiers dont la taille est supérieure à 4 Go, le hachage généré peut ne pas être précis même si SignTool peut signer le fichier.

    Remarque

    Cela est particulièrement vrai pour les fichiers .cat.

Ce problème se produit pour les fichiers PE tels que .exe, .sys, etc. Ce problème se produit en raison d’une variable ULONG dans l’en-tête PE qui spécifie la taille de l’image. (La taille de l’image est de 2 Go pour les systèmes d’exploitation de bas niveau, tels que Vista et versions antérieures.) Il s’agit d’une limitation de conception depuis 1996. La limite maximale pour cette valeur est de 4 Go pour les fichiers PE, tels que .exe et .sys. Bien que les fichiers .cat soient généralement signables, le hachage interne généré peut ne pas être exact.

Pour contourner ce problème, assurez-vous que tout fichier PE que vous essayez de signer est inférieur à 4 Go. Il s’agit d’une limitation de conception connue du format PE sans correctif planifié, en raison de contraintes de compatibilité descendante.

Remarque

Ce problème n’est pas spécifique à SignTool. La conception de l’en-tête PE est limitée à 4 Go pour Windows 7 et versions ultérieures Windows, quel que soit l’outil utilisé.

Questions fréquemment posées (FAQ)

Q1 : Quelle est la limite actuelle de taille de fichier officielle pour une signature numérique (et la contre-signature de horodatage) sur Windows ?

A1 : Pour les fichiers PE tels que .exe et .sys, la taille maximale de fichier pour la signature est de 4 Go.

Q2 : Existe-t-il une version particulière de Windows, telle que Windows Server 2016, qui a la capacité la plus élevée de signer des fichiers volumineux ?

A2 : Non, le problème affecte toutes les versions de Windows.

Q3 : La version 64 bits de Signtool prend-elle mieux en charge cette fonctionnalité que la version 32 bits ?

R : Non, la version 64 bits de SignTool utilise les mêmes valeurs que la version 32 bits. Par conséquent, le problème reste en 64 bits.

Q4 : Les clients qui utilisent une version 32 bits de Windows peuvent-ils rencontrer des problèmes potentiels s’ils essaient d’utiliser des fichiers signés à l’aide de la version 64 bits de SignTool ?

R : Non. Toutefois, les limitations restent quelle que soit la version de SignTool utilisée.

Q5 : Devrions-nous utiliser un autre outil ou méthode de signature ?

R : Oui. Signatures de confiance Azure est le service de signature de code managé de Microsoft et est l'alternative moderne recommandée à la gestion de vos propres certificats. Il gère la gestion du cycle de vie des certificats et s’intègre aux pipelines CI/CD. Azure Key Vault est une autre option pour la signature avec des certificats stockés dans le cloud. Pour les scénarios hors connexion ou libre-service, SignTool reste l’outil standard.