Problemas conhecidos e solução de problemas para SignTool

Os tipos mais comuns de erros ao usar o SignTool são internos e normalmente têm esta aparência:

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

Se o código de erro começar com 0x8008, como 0x80080206 (APPX_E_CORRUPT_CONTENT), o pacote assinado será inválido. Se você receber esse tipo de erro, deverá recompilar o pacote e executar o SignTool novamente.

O SignTool tem uma opção de depuração disponível para mostrar erros de certificado e filtragem. Para usar o recurso de depuração, coloque a opção /debug diretamente depois sign, seguido pelo comando SignTool completo.

SignTool sign /debug [options]

Um erro mais comum é 0x8007000B. Para esse tipo de erro, você pode encontrar mais informações no log de eventos.

Para encontrar mais informações no log de eventos:

  • Executar Eventvwr.msc
  • Abra o log de eventos: Visualizador de Eventos (Local) -> Applications and Services Logs -> Microsoft -> Windows -> AppxPackagingOM -> Microsoft-Windows-AppxPackaging/Operational
  • Localizar o evento de erro mais recente

O erro interno 0x8007000B geralmente corresponde a um destes valores:

ID do evento Exemplo de cadeia de caracteres de evento Sugestão
150 erro 0x8007000B: o nome do editor do manifesto do aplicativo (CN=Contoso) deve corresponder ao nome da entidade do certificado de assinatura (CN=Contoso, C=US). O nome do editor do manifesto do aplicativo precisa corresponder exatamente ao nome da entidade da assinatura.
151 erro 0x8007000B: o método de hash de assinatura especificado (SHA512) deve corresponder ao método de hash usado no mapa de blocos do pacote do aplicativo (SHA256). O hashAlgorithm especificado no parâmetro /fd está incorreto. Reexecutar SignTool usando algoritmo de hash que corresponde ao mapa de blocos do pacote do aplicativo (usado para criar o pacote do aplicativo)
152 Erro 0x8007000B: O conteúdo do pacote do aplicativo deve ser validado contra seu mapa de blocos. O pacote do aplicativo está corrompido e precisa ser recriado para gerar um novo mapa de blocos. Para obter mais informações sobre como criar um pacote de aplicativos, consulte Criar um pacote de aplicativo com a ferramenta MakeAppx.exe

Outro erro comum é 0x80080057. Você pode enfrentar os seguintes problemas ao tentar assinar um arquivo PE (Executável Portátil) usando a ferramenta SignTool no Windows:

  • Falha ao assinar um arquivo PE com 4 GB (gigabytes) ou maior. Ao tentar assinar, você recebe uma mensagem de erro "parâmetro inválido (0x80080057)".

  • Para arquivos maiores que 4 GB, o hash gerado pode não ser preciso, embora SignTool possa assinar o arquivo com êxito.

    Observação

    Isso é especialmente verdadeiro para arquivos .cat.

Esse problema ocorre para arquivos PE, como .exe, .syse assim por diante. Esse problema ocorre devido a uma variável ULONG no cabeçalho PE que especifica o tamanho da imagem. (O tamanho da imagem é de 2 GB para sistemas operacionais de nível inferior, como Vista e versões anteriores.) Essa é uma limitação de design desde 1996. O limite máximo para esse valor é de 4 GB para arquivos PE, como .exe e .sys. Embora os arquivos .cat geralmente sejam assináveis, o hash interno gerado pode não ser preciso.

Para contornar esse problema, verifique se qualquer arquivo PE que você tentar assinar tenha menos de 4 GB. Essa é uma limitação de design conhecida do formato PE sem correção planejada devido a restrições de compatibilidade com versões anteriores.

Observação

Esse problema não é específico do SignTool. O design do cabeçalho PE é limitado a 4 GB para versões Windows 7 e posteriores Windows, independentemente de qual ferramenta é usada.

Perguntas frequentes (FAQ)

P1: Qual é o limite de tamanho de arquivo oficial atual para uma assinatura digital (e assinatura de carimbo de data/hora) em Windows?

A1: Para arquivos PE, como .exe e .sys, o tamanho máximo do arquivo para assinatura é de 4 GB.

P2: Existe uma versão específica de Windows, como Windows Server 2016, que tem a maior capacidade de assinar arquivos grandes?

A2: Não, o problema afeta todas as versões do Windows.

Q3: A versão de 64 bits do Signtool tem melhor suporte para essa funcionalidade do que a versão de 32 bits?

R: Não, a versão de 64 bits do SignTool usa os mesmos valores da versão de 32 bits. Portanto, o problema permanece em 64 bits.

Q4: Os clientes que estão usando uma versão de 32 bits do Windows potencialmente enfrentarão problemas se tentarem usar arquivos assinados usando a versão de 64 bits do SignTool?

R: Não. No entanto, as limitações permanecerão independentemente de qual versão do SignTool é usada.

P5: Devemos usar uma ferramenta ou método de assinatura diferente completamente?

A: Sim. Assinatura Confiável do Azure é o serviço de assinatura de código gerenciado do Microsoft e é a alternativa moderna recomendada para gerenciar seus próprios certificados. Ele lida com o gerenciamento do ciclo de vida do certificado e integra-se com pipelines de CI/CD. Azure Key Vault é outra opção para assinar com certificados armazenados na nuvem. Para cenários offline ou de autoatendimento, SignTool continua sendo a ferramenta padrão.