Problemas conocidos y solución de problemas de SignTool

Los tipos de errores más comunes al usar SignTool son internos y normalmente tienen un aspecto parecido al siguiente:

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

Si el código de error comienza con 0x8008, como 0x80080206 (APPX_E_CORRUPT_CONTENT), el paquete que se firma no es válido. Si recibe este tipo de error, debe volver a generar el paquete y volver a ejecutar SignTool.

SignTool tiene una opción de depuración disponible para mostrar los errores de certificado y el filtrado. Para usar la característica de depuración, coloque la /debug opción directamente después de , seguido del comando sign SignTool completo.

SignTool sign /debug [options]

Un error más común es 0x8007000B. Para este tipo de error, puede encontrar más información en el registro de eventos.

Para encontrar más información en el registro de eventos:

  • Ejecución de Eventvwr.msc
  • Abra el registro de eventos: Visor de eventos (local) -> Applications and Services Logs -> Microsoft -> Windows -> AppxPackagingOM -> Microsoft-Windows-AppxPackaging/Operational
  • Buscar el evento de error más reciente

El error interno 0x8007000B corresponde normalmente a uno de estos valores:

Identificador del evento Cadena de evento de ejemplo Sugerencia
150 error 0x8007000B: el nombre del publicador del manifiesto de aplicación (CN=Contoso) debe coincidir con el nombre del sujeto del certificado de firma (CN=Contoso, C=US). El nombre del publicador del manifiesto de aplicación debe coincidir exactamente con el nombre del firmando.
151 error 0x8007000B: el método hash de firma especificado (SHA512) debe coincidir con el método hash usado en la asignación de bloques del paquete de aplicación (SHA256). El hashAlgorithm especificado en el parámetro /fd es incorrecto. Volver a ejecutar SignTool mediante hashAlgorithm que coincide con el mapa de bloques del paquete de aplicación (se usa para crear el paquete de aplicación)
152 error 0x8007000B: el contenido del paquete de aplicación debe validarse con su mapa de bloques. El paquete de la aplicación está dañado y debe volver a generarse para generar una nueva asignación de bloques. Para obtener más información sobre cómo crear un paquete de aplicación, consulte Creación de un paquete de aplicación con la MakeAppx.exe aplicación.

Otro error común es 0x80080057. Puede experimentar los siguientes problemas al intentar firmar un archivo portable ejecutable (PE) mediante la herramienta SignTool en Windows:

  • Error al firmar un archivo PE de 4 gigabytes (GB) o mayor. Al intentar firmar, recibe un mensaje de error "parámetro no válido (0x80080057)".

  • En el caso de los archivos de más de 4 GB, es posible que el hash generado no sea preciso aunque SignTool pueda firmar correctamente el archivo.

    Nota

    Esto es especialmente cierto en los archivos .cat.

Este problema se produce para los archivos PE, como .exe, .sys, y así sucesivamente. Este problema se produce debido a una variable ULONG en el encabezado PE que especifica el tamaño de la imagen. (El tamaño de la imagen es de 2 GB para sistemas operativos de nivel inferior, como Vista y versiones anteriores). Se trata de una limitación de diseño desde 1996. El límite máximo para este valor es de 4 GB para los archivos PE, como .exe y .sys. Aunque los archivos .cat suelen ser firmables, el hash interno que se genera puede no ser preciso.

Para evitar este problema, asegúrese de que cualquier archivo PE que intente firmar sea inferior a 4 GB. Debido a los riesgos de compatibilidad con versiones anteriores, actualmente no se pueden realizar retrocesos ni una corrección permanente. Sin embargo, este problema se está investigando.

Nota

Este problema no es específico de SignTool. El diseño del encabezado PE está limitado a 4 GB para Windows 7 y versiones posteriores Windows versiones posteriores, independientemente de la herramienta que se utilice.

Preguntas más frecuentes

P1: ¿Cuál es el límite de tamaño de archivo oficial actual para una firma digital (y la contra signatura de marca de tiempo) en Windows?

A1: Para los archivos PE, como .exe y .sys, el tamaño máximo de archivo para la firma es de 4 GB.

P2: ¿Hay una versión determinada de Windows, como Windows Server 2016, que tenga la mayor capacidad para firmar archivos grandes?

A2: No, el problema afecta a todas las versiones de Windows.

P3: ¿La versión de 64 bits de Signtool tiene mejor compatibilidad con esta funcionalidad que la versión de 32 bits?

A. No, la versión de 64 bits de SignTool usa los mismos valores que la versión de 32 bits. Por lo tanto, el problema permanece en 64 bits.

P4: ¿Podrían experimentar problemas los clientes que usan una versión de 32 bits de Windows si intentan usar archivos firmados mediante la versión de 64 bits de SignTool?

A. No. Sin embargo, las limitaciones permanecerán independientemente de la versión de SignTool que se utilice.

P5: ¿Deberíamos usar una herramienta o método de firma diferente por completo?

A. Actualmente no tenemos ningún método alternativo para la firma digital.