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 similar al siguiente:

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

Si el código de error comienza por 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 errores de certificado y filtrado. Para usar la característica de depuración, coloque la /debug opción directamente después signde , seguida del comando SignTool completo.

SignTool sign /debug [options]

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

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

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

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

Identificador del evento Cadena de evento de ejemplo Sugerencia
150 error 0x8007000B: el nombre del publicador del manifiesto de la aplicación (CN=Contoso) debe coincidir con el nombre del firmante del certificado de firma (CN=Contoso, C=US). El nombre del publicador del manifiesto de la aplicación debe coincidir exactamente con el nombre del firmante de la firma.
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 la aplicación (SHA256). El hashAlgorithm especificado en el parámetro /fd es incorrecto. Vuelva a ejecutar SignTool mediante hashAlgorithm que coincida con el mapa de bloques del paquete de la aplicación (se usa para crear el paquete de la aplicación).
152 error 0x8007000B: el contenido del paquete de la aplicación debe validarse con su asignación de bloques. El paquete de la aplicación está dañado y debe volver a generarse para generar un nuevo mapa 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 herramienta MakeAppx.exe

Otro error común es 0x80080057. Es posible que experimente 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 superior. Al intentar firmar, recibirá 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 archivos PE como .exe, .sys, etc. 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 de este valor es de 4 GB para archivos PE, como .exe y .sys. Aunque los archivos .cat suelen ser firmables, es posible que el hash interno generado no sea preciso.

Para solucionar 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 es posible realizar ninguna devolución 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 se limita a 4 GB para Windows 7 y versiones posteriores de Windows, independientemente de la herramienta que se use.

Preguntas más frecuentes

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

A1: Para 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 de firmar archivos grandes?

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

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

R: 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: ¿Los clientes que usan una versión de 32 bits de Windows pueden experimentar problemas si intentan usar archivos firmados mediante la versión de 64 bits de SignTool?

A. No. Sin embargo, las limitaciones seguirán siendo independientemente de la versión de SignTool que se use.

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

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