{"copy":"Copiar","expand":"Desplegar","collapse":"Empacar","copy_success":"\u00a1Copiado!","copy_error":"\u00a1La copia fall\u00f3!"}

Cómo firmar aplicaciones en Windows (SDK)

Vamos a explorar juntos cómo firmar una aplicación en Windows usando el Windows SDK (herramienta signtool) y un certificado de firma de código. La guía asume que tienes preparado un certificado de firma de código en PFX y un entorno de desarrollo de Windows SDK instalado en el sistema operativo Windows. Descarga el SDK de la web de Microsoft para la versión correspondiente a tu Windows, por ejemplo, Kit de Desarrollo de Software de Windows (SDK) para Windows 10.

Uso de Signtool

Signtool.exe es un programa que firma aplicaciones con un certificado de firma de código. Después de instalar el Windows SDK, úsalo a través de la línea de comandos. Para firmar aplicaciones, necesitas conocer los parámetros básicos para poder invocar correctamente la firma de la aplicación con el certificado y la configuración correctos.

La firma realmente se realiza a través de la línea de comandos y el certificado solo necesita estar disponible en la computadora (no se instala en ningún lugar).

Ejemplo de firma con signtool.exe
Ejemplo de firma con signtool.exe

Los parámetros básicos (comandos) para la firma son los siguientes:

signtool comando /parámetro

Usarás los comandos Sign para firmar y Verify para verificar la firma de un archivo. Timestamp es un comando para agregar una marca de tiempo, pero puedes hacerlo directamente al firmar el archivo.

Parámetros útiles:

  • /f SignCertFile – si usas un archivo PFX para la firma, este comando se refiere a su ubicación. Ya no es posible obtener un certificado de firma de código en PFX.
  • /s StoreName – si usas un almacén de certificados (por ejemplo, en un token), especifica cuál debe usarse. El predeterminado es My.
  • /t URL – agrega una marca de tiempo y un enlace a ella. Las URL de los servidores de marca de tiempo las encuentras a continuación.
  • /td - algoritmo de huella (digest) en la marca de tiempo. Elige al menos el parámetro sha256 o superior.
  • /fd - algoritmo de huella (digest). Elige al menos el parámetro sha256 o superior.

Puedes encontrar la documentación completa en el sitio web de Microsoft o ingresando el comando “signtool sign /?”.

El comando completo para firmar un archivo podría verse como el siguiente:

SignTool sign /n "My Company Certificate" /td sha256 /fd sha256 /t http://timestamp.digicert.com C:\test.exe

Siempre utiliza una marca de tiempo, lo que significa una marca de tiempo. Garantiza a la aplicación firmada la confianza aun después de la expiración del certificado que se utilizó para la firma. Esto es muy importante porque no tendrás que volver a firmar retrospectivamente las aplicaciones más antiguas (típicamente después de dos años de expirar el certificado de firma de código), para que no sean de confianza. Si usas una marca de tiempo en el momento de la firma y el certificado es válido, la aplicación también será válida en el futuro.

Hay más servidores que proporcionan marcas de tiempo; te recomiendo usar el servidor de marcas de tiempo de DigiCert: http://timestamp.digicert.com/

Este servidor no tiene ningún sitio web en el puerto 80, por lo que es inútil visitarlo con un navegador (no verás nada).

Almacén de certificados

El certificado puede almacenarse en varios lugares (en diferentes almacenes) y puedes "invocarlo" de varias maneras. Anteriormente, se podía almacenar el certificado como un archivo PFX, pero eso ya no es posible. Cualquiera puede robar un archivo PFX y, aunque el PFX está protegido por contraseña, representa un gran riesgo de seguridad (además, las contraseñas suelen ser muy débiles). El PFX es especialmente útil para respaldos de certificados S/MIME o para la web.

La manera común de almacenamiento de certificados de firma de código es en un token y luego invocarlo de acuerdo con el sujeto en el certificado. Este método es seguro y prácticamente el mismo que la firma anterior con PFX. Sin la clave privada, que no se puede exportar del token, el certificado no tiene ningún valor y no puede ser utilizado; después de cinco intentos fallidos al ingresar la contraseña, el token se bloquea.

La firma utilizando el almacén requiere el parámetro /n SubjectName:

signtool sign /n "My Company Certificate" /td sha256 /fd sha256 /t http://timestamp.digicert.com C:\test.exe

O puedes elegir el almacén predeterminado My y el software de firma encontrará automáticamente el certificado:

signtool sign /s My /td sha256 /fd sha256 /t http://timestamp.digicert.com C:\test.exe

Automatización de la firma de código usando HSM en la nube

La automatización de la firma de código es muy deseada, con un certificado en un token no puedes firmar automáticamente; tampoco puedes usarlo en un servidor. Afortunadamente, conocemos servicios que son adecuados para la automatización de firmas. DigiCert ofrece el servicio KeyLocker, o Software Trust Manager. También puedes tener las claves de firma en HSM en la nube en Azure o Google Cloud.

Encuentra más información sobre las opciones de automatización de firma de código en el artículo Centro de Firma de Código.

Verificación de la firma

Ahora ya sabes cómo firmar y has dotado a tu aplicación de tu primera firma confiable. Seguramente ahora te interesa saber cómo verificar la firma.
La verificación es posible utilizando la herramienta signtool:

signtool verify C:\test.exe

Es más sencillo realizar la verificación mostrando las propiedades del archivo en el Explorador de Windows. Puedes "desglosar" el detalle de la firma hasta el detalle mismo del certificado usado.

Detalle de la firma de la aplicación en el explorador de Windows
Detalle de la firma de la aplicación en el explorador de Windows
¿Le resultó útil este artículo?