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.

Conseguir el archivo PFX

Para firmar aplicaciones necesita el archivo PFX arriba mencionado o un certificado en el dispositivo de almacenamiento de los certificados Windows. Incluso para importar el certificado al dispositivo es posible utilizar el formato PFX (recomendamos impedir que sea exportada la clave privada durante la importación). Si utilizara un certificado guardado en el dispositivo de almacenamiento de los certificados del sistema recomendamos guardar también su copia de seguridad precisamente en el formato PFX.

Seguro que pregunta cómo generar el archivo PFX. Hay más opciones.

    1. Puede utilizar IIS, que forma parte de Windows, y en IIS puede generar la solicitud del certificado y después de su emisión finalizar la solicitud y exportar el certificado a PFX.
    2. La segunda opción es generar claves y después el archivo PFX en OpenSSL. OpenSSL forma parte de todas las distribuciones de Linux pero también es posible utilizar el programa en Windows en la forma GnuWin nebo Win32OpenSSL, que es un OpenSSL compilado para Windows. Lo puede hacer mediante los siguientes comandos: openssl genrsa -out clave-privada.key 2048 openssl req -new -key clave-privada.key -out nombre.csr

      Introduzca la CSR en el pedido del certificado. Guárdelo después de su emisión y genere el archivo PFX de la clave privada, el certificado y el certificado de la AC.

      Antes de generar el PFX es necesario convertir el archivo P7B con los certificados de la AC en el formato de texto. Los certificados de la AC deben estar en el archivo PFX, ¡o la firma no será confiable!

      openssl pkcs7 -print_certs -in windows_intermediate.p7b -out CAcert.cer

      Después una todo en un archivo PFX en OpenSSL.

      openssl pkcs12 -export -in cert.crt -certfile CAcert.cer -inkey key.pem -out salida.pfx
    3. La tercera opción, la más agradable para el usuario, es usar el programa gráfico XCA. En él puede generar la solicitud del certificado, la clave privada, importar el certificado después de su emisión y exportar todas las claves al archivo PFX.

Si tiene problemas con generar el PFX puede contactar con el soporte de SSLmarket, que le generará el archivo PFX para el certificado solicitado.

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).

Ukázka podepisování se 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
  • /fd: especifica el algoritmo hash de la firma. El inicial es SHA-1, que sin embargo no será confiable, y por lo tanto es necesario utilizar el SHA256, es decir /fd SHA256.
  • /p Password: introducir una contraseña, si firma con PFX.
  • /s StoreName: si utiliza dispositivos de almacenamiento de los certificados especifica cuál de ellos debería utilizar. El incial 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.

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 /f MyCert.pfx /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ñosm 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).

Almacenamiento de los certificados

El certificado puede ser guardado en varios sitios (en diferentes almacenamientos) y lo puede "llamar" de diferentes formas. La forma más frecuente del uso es guardar el certificado PFX como un archivo en el ordenador y a continuación, redirigir a este archivo. Esta forma es práctica pero en absoluto es segura. El archivo PFX se lo puede robar cualquier persona y a pesar de que el PFX está protegido por una contraseña hay un gran riego 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. Un ejemplo de una firma con el archivo PFX lo hemos mencionado anteriormente.

La segunda forma es guardar el certificado en el almacenamiento del sistema y a continuación, llamar según el sujeto en el certificado. Este método es un poco más seguro si prohibe la exportación de la clave privada del certificado. Sin la clave privada el certificado no sirve y no es posible exportarlo del sistema. Firmar utilizando el almacenamiento requiere el parámetro /n:

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

La tercera forma, la más segura es guardar los certificados en un token o en un almacenamiento seguro. El token lo utilizan los certificados Code Signing EV, que le recomendamos mucho. El titular tiene guardado el certificado de forma segura en un token, desde donde no es posible exportarlo y después de que sea introducida varias veces una contraseña incorrecta, el certificado será borrado del token. El certificado Code Signing EV, además de un uso seguro anteriormente mencionado, tiene una ventaja importante desde el punto de vista de la credibilidad; puede leer más sobre el tema en el siguiente artículo especializado. Una firma con un certificado guardado en el token requiere el parámetro /s my:

signtool sign /s my /t http://timestamp.digicert.com C:test.exe

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.

Detail podpisu aplikace v průzkumníkovi windows
Detalle del firmar de la aplicación en el Explorador de Windows
¿Ha este artículo sido de provecho para Usted?