Cómo firmar aplicaciones en Windows (SDK)
Vamos a ver juntos cómo firmar una aplicación en Windows utilizando el Windows SDK (herramienta signtool) y un certificado de Firma de Código. La guía asume que ya tienes un certificado de Firma de Código en PFX y el entorno de desarrollo de Windows SDK instalado en el sistema operativo Windows. Descarga el SDK desde el sitio web de Microsoft para la versión correspondiente de tu Windows, por ejemplo, Windows Software Development Kit (SDK) for 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 adecuados.
La firma se realiza realmente 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).
Los parámetros básicos (comandos) para la firma son los siguientes:
signtool comando /parámetro
De los comandos, usarás Sign para firmar y Verify para verificar la firma del archivo. Timestamp es un comando para añadir una marca de tiempo, pero esto se puede hacer al firmar el archivo.
Parámetros útiles:
- /f SignCertFile – si utilizas un archivo PFX para firmar, este comando hace referencia a su ubicación. Ya no es posible obtener un certificado de Firma de Código en PFX.
- /s StoreName – si utilizas un almacén de certificados (por ejemplo, en un token), especifica cuál utilizar. El valor predeterminado es My.
- /t URL – añade una marca de tiempo y un enlace a ella. Las URL de los servidores de marcas de tiempo se encuentran a continuación.
- /td - algoritmo de digestión en la marca de tiempo. Elige al menos el parámetro sha256 o superior.
- /fd - algoritmo de digestión. 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 de firma del archivo puede parecerse a este ejemplo:
SignTool sign /n "My Company Certificate" /td sha256 /fd sha256 /t http://timestamp.digicert.com C:\test.exe
Siempre utiliza una marca de tiempo. Asegura la credibilidad de la aplicación firmada incluso después de la expiración del certificado que se utilizó para la firma. Esto es muy importante, ya que no tendrás que volver a firmar aplicaciones antiguas (típicamente después de dos años de expiración del certificado de Firma de Código) para que no se consideren no confiables. 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 varios servidores que suministran marcas de tiempo; recomiendo usar el servidor de marcas de tiempo de DigiCert: http://timestamp.digicert.com/
Este servidor no tiene sitio web en el puerto 80, por lo que es innecesario visitarlo con un navegador (no verás nada).
Almacén de certificados
Un certificado puede almacenarse en varios lugares (en varios almacenes) y se puede "llamar" de varias maneras. Anteriormente, era posible almacenar un certificado como un archivo PFX, pero esto ya no es posible. Un archivo PFX puede ser robado por cualquiera y aunque esté protegido por una contraseña, representa un gran riesgo de seguridad (las contraseñas, además, suelen ser muy débiles). El PFX es útil principalmente para copias de seguridad de certificados S/MIME o para la web.
La forma común de almacenamiento de un certificado de Firma de Código es almacenarlo en un token y luego llamarlo por el sujeto en el certificado. Este método es seguro y prácticamente igual que la firma anterior con PFX. Sin la clave privada, que no se puede exportar desde el token, el certificado es inútil y no se puede abusar de él; si introduces la contraseña incorrectamente cinco veces, el token se bloqueará.
La firma usando un 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 Firma de Código utilizando HSM en la nube
La automatización de la firma de código es muy buscada, sin embargo, no se puede firmar automáticamente con un certificado en un token; tampoco lo puedes utilizar 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 claves de firma en la nube en Azure o Google Cloud.
Puedes encontrar más información sobre las opciones de automatización de la 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 marcado tu aplicación con la primera firma de confianza. Seguro que ahora te interesa saber cómo verificar la firma.
La verificación se puede realizar usando la herramienta signtool:
signtool verify C:\test.exe
Se puede realizar una verificación de manera más sencilla mostrando las propiedades del archivo en el explorador de Windows. Puedes "desglosar" el detalle de la firma hasta el mismo detalle del certificado utilizado.
Lo sentimos que no haya encontrado lo necesario aquí.
Ayúdanos mejorar el artículo, por favor. Escríbenos lo que esperaba aquí y no encontró.