Přeskočit na obsah

Cómo firmar aplicaciones en Windows (SDK)

Vamos a ver cómo firmar una aplicación en Windows mediante Windows SDK (herramientas signtool) y el certificado Code Signing. La guía presupone un certificado Code Signing en PFX preparado y un entorno de desarrollo Windows SDK instalado en el sistema operativo Windows. Descargue SDK del sitio web de Microsoft para la versión correspondiente de sus Windows, por ejemplo Windows Software Development Kit (SDK) for Windows 10.

Los certificados Code Signing (tanto OV como EV) ya no se pueden emitir de otra forma que almacenados en el token. ¡Ya no puede obtener un certificado Code Signing como archivo PFX!

Uso de Signtool

Signtool.exe es un programa que firma aplicaciones utilizando PFX con el certificado Code Signing. Utilícelo después de instalar Windows SDK a través de la interfaz de línea de comandos. Para firmar aplicaciones necesita saber parámetros básicos, para que pueda llamar correctamente el firmar de la aplicación con un certificado y configuración correctos.

El firmar se realiza de hecho a través de la interfaz de línea de comandos y basta con que el certificado esté guardado en un archivo en el correspondiente ordenador (no se instala).

Ejemplo del firmar con signtool.exe
Ejemplo del firmar con signtool.exe

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

comando/ parámetro signtool

De los comandos utilice Sign para firmar y Verify para verificar la firma del archivo. Timestamp es un comando para introducir el sello de tiempo, pero lo puede hacer en el mismo momento en que firma el archivo.

Parámetros útiles:

  • /f SignCertFile: si utiliza un archivo PFX para firmar este comando lleva a su colocación. Ya no es posible obtener un certificado Code Signing en PFX.
  • /s StoreName: si utiliza dispositivos de almacenamiento de los certificados (por ejemplo en un token) especifica cuál de ellos debería utilizar. El inicial es My.
  • /t URL: añade el sello de tiempo y un enlace para él. Más abajo puede encontrar URL timestamp de los servidores.
  • /td - algoritmo del hash (digest) en el sello de tiempo. Elija al menos sha256 o superior.
  • /fd - algoritmo del hash (digest). Elija al menos sha256 o superior.

La documentación completa la puede encontrar en el sitio web de Microsoft o después de introducir el comando „signtool sign /?“.

El comando completo del firmar del archivo luego puede tener por ejemplo esta forma:

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

Siempre utilice timestamp, es decir el sello de tiempo. El mismo le proporcionará a la aplicación firmada una credibilidad incluso después de la expiración del certificado, que fue utilizado para firmar. Es muy importante porque no tendrá que volver a firmar aplicaciones anteriores (típicamente después de dos años de expiración del certificado Code Signing), para que no sean no seguras. Si en el momento de firmar utiliza timestamp y el certificado es válido también la aplicación será válida en el futuro.

Hay diferentes servidores que proporcionan los sellos de tiempo; recomiendo utilizar timestamp server de DigiCert: http://timestamp.digicert.com/

Este servidor no tiene ningún sitio web en el puerto de red 80, con lo cual es inútil visitarlo con el navegador (no verá nada).

Transición del Code Signing (PFX) a la firma con token: No tiene que cambiar nada al firmar. Solo si está acostumbrado a firmar con un archivo PFX, empiece a utilizar el enlace al almacenamiento de certificados (parámetro /s My). La aplicación Safenet se encarga de todo.

Almacenamiento de los certificados

El certificado puede ser guardado en varios sitios (en diferentes almacenamientos) y lo puede "llamar" de diferentes formas. Antes era posible guardar el certificado como un archivo PFX, pero ya no es posible. Cualquier persona puede robar el archivo PFX y aunque el PFX esté protegido por una contraseña, es un gran riesgo de seguridad (además, las contraseñas a menudo son muy débiles). Un PFX es apropiado sobre todo para copias de seguridad del certificado S/MIME o para la web.

La forma habitual de almacenar un certificado Code Signing es guardarlo en un token y a continuación llamarlo según el sujeto en el certificado. Este método es seguro y prácticamente idéntico a la anterior firma con PFX. Sin la clave privada, que no se puede exportar del token, el certificado es inútil y por lo tanto no es posible su uso indebido; si se introduce mal la contraseña cinco veces, el token se bloquea.

El almacenamiento recomendado y moderno del certificado está en la nube. Le recomendamos abandonar el token y utilizar HSM en la nube, que son más seguros y el modo de firma no cambiará para usted. Vea el artículo Code Signing Centrum.

La firma utilizando el almacenamiento 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 puede elegir el almacenamiento predeterminado My y el SW de firma encontrará el certificado automáticamente:

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

Automatización del Code Signing mediante HSM en la nube

La automatización de la firma de código es muy demandada, pero con un certificado en el token no es posible firmar automáticamente; tampoco puede utilizarse en un servidor. Afortunadamente, conocemos servicios adecuados para la automatización de la firma. DigiCert ofrece el servicio KeyLocker, o bien Software Trust Manager. Las claves de firma también pueden estar en un HSM en la nube en Azure o Google Cloud.

Encontrará más información sobre las opciones de automatización de la firma de código en el artículo Code Signing Centrum.

Comprobar la firma

Ahora ya sabe firmar y ha añadido la primera firma confiable a su aplicación. Seguro que ahora le gustaría saber cómo comprobar la firma.

Puede hacerlo mediante la herramienta signtool:

signtool verify C:pracetest.exe

Más fácil es comprobar visualizando los parámetros del archivo en el Explorador de Windows. Puede "descomponer" el detalle de la firma hasta el propio detalle del certificado utilizado.

Detalle del firmar de la aplicación en el Explorador de Windows
Detalle del firmar de la aplicación en el Explorador de Windows

¿Tiene preguntas?

No dude en contactar con nuestro soporte al cliente, que le asesorará y le ayudará.

ZONER, S.A.

Avenida de Europa 26, EDIFICIO ÁTICA 5, 2ª planta
28224 Pozuelo de Alarcón, Madrid

N.º reg.: 49437381
NIF: CZ49437381