Problemas conocidos y solución de problemas para SignTool

Los tipos de errores más comunes al usar SignTool son internos y suelen tener 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 con 0x8008, como 0x80080206 (APPX_E_CORRUPT_CONTENT), el paquete que se firma no es válido. Si recibe este tipo de error, debe recompilar 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 opción /debug directamente después de sign, seguida del comando SignTool completo.

SignTool sign /debug [options]

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

Para buscar más información en el registro de eventos, haga lo siguiente:

  • Ejecute Eventvwr.msc.
  • Abra el registro de eventos: Visor de eventos (local) -> Registros de aplicaciones y servicios -> Microsoft -> Windows -> AppxPackagingOM -> Microsoft-Windows-AppxPackaging/Operational.
  • Busque el evento de error más reciente.

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

Id. 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 el hashAlgorithm que coincida con la asignación de bloques del paquete de la aplicación (que se usa para crear el paquete de la aplicación).
152 error 0x8007000B: el contenido del paquete de la aplicación debe validarse en su asignación 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 la aplicación, vea Creación de un paquete de la aplicación con la herramienta MakeAppx.exe.

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 más. Al intentar firmarlo, recibirá un mensaje de error "parámetro no válido (0x80080057)".

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

    Nota:

    Esto sucede en particular con 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 descendente, como Vista y versiones anteriores). Esta limitación de diseño existe 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 se pueden realizar portabilidades con versiones anteriores ni correcciones permanentes. Pero 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 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?

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

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

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

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

R: No, la versión de 64 bits de SignTool usa los mismos valores que la de 32 bits. Por lo tanto, el problema sigue existiendo en 64 bits.

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

R. No. Pero las limitaciones permanecerán, independientemente de la versión de SignTool que se use.

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

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