Documentación Técnica Code Signing

Conozca los conceptos técnicos involucrados en el proceso de firma digital de software, desde la generación de claves hasta la verificación de la firma por parte de los sistemas operativos.

Los Certificados Code Signing utilizan una Infraestructura de Clave Pública (PKI) basada en certificados X.509. Durante el proceso de emisión se genera un par de claves criptográficas compuesto por una clave privada y una clave pública.


Conforme a los estándares vigentes del CA/Browser Forum, la clave privada debe generarse dentro de un dispositivo criptográfico certificado, como un Token USB o un Hardware Security Module (HSM). La generación se realiza internamente mediante un generador criptográfico de números aleatorios (CSPRNG), por lo que la clave privada nunca abandona el dispositivo y no puede ser exportada ni duplicada.


Este mecanismo reduce significativamente el riesgo de robo o uso indebido de la clave de firma, protegiendo la identidad del desarrollador y evitando la distribución de software firmado por terceros no autorizados.
La clave pública, en cambio, puede compartirse libremente y se utiliza para crear un Certificate Signing Request (CSR), que será enviada a la Autoridad Certificante para solicitar la emisión del certificado.


El Certificate Signing Request (CSR) incluye la clave pública y la información de identificación del solicitante, firmadas mediante la clave privada asociada. Junto con la CSR, puede enviarse un mecanismo de Key Attestation, que proporciona evidencia criptográfica de que el par de claves fue generado dentro de un dispositivo seguro certificado y que la clave privada nunca abandonó dicho hardware. Tras verificar esta evidencia y completar el proceso de validación de identidad, la Autoridad Certificante procede a la emisión del certificado digital.

Tipos de archivos compatibles


Los Certificados Code Signing permiten firmar digitalmente distintos tipos de software y componentes ejecutables, dependiendo de la plataforma y del sistema operativo.

Los ejecutables y bibliotecas de Windows se firman habitualmente utilizando SignTool. La clave privada permanece almacenada en el Token USB o HSM y nunca abandona el dispositivo.

signtool sign /tr http://timestamp.sectigo.com /td sha256 /fd sha256 /a Aplicacion.exe
                        

Los paquetes de instalación se firman utilizando el mismo certificado almacenado en el dispositivo criptográfico.

signtool sign /tr http://timestamp.sectigo.com /td sha256 /fd sha256 /n "Nombre de su empresa" "C:\ruta\al\Instalador.msi"
                    

Los controladores también se firman con SignTool. Para controladores Kernel-Mode modernos es necesario utilizar un certificado EV Code Signing para el proceso requerido por Microsoft.

signtool sign /tr http://timestamp.sectigo.com /td sha256 /fd sha256 /a Driver.sys
        

Los scripts PowerShell pueden firmarse utilizando el certificado disponible en el Token USB o HSM.

$cert = Get-ChildItem Cert:\CurrentUser\My; Set-AuthenticodeSignature -FilePath script.ps1 -Certificate $cert
        

Los archivos JAR pueden firmarse mediante jarsigner, utilizando el certificado almacenado en un dispositivo criptográfico compatible.

jarsigner -tsa http://timestamp.sectigo.com -verbose -keystore NONE -storetype PKCS11 -providerClass sun.security.pkcs11.SunPKCS11 -providerArg ./xxxx.cfg "C:\ruta\al\archivo.jar" ALIAS
        

Los proyectos VBA y complementos de Office pueden firmarse utilizando un certificado Code Signing almacenado en el Token USB o HSM, permitiendo identificar al editor y reducir advertencias de seguridad.

  1. Abrir el editor VBA (Alt+F11) en el documento u complemento.
  2. Ir a Herramientas → Firma digital del proyecto.
  3. Seleccionar el certificado del Token USB o HSM.
  4. Aceptar y guardar el proyecto.

Parámetros aplicables en la firma con signtool


Opción Descripción
/a Selecciona automáticamente el certificado de firma más adecuado. SignTool busca todos los certificados válidos que cumplen las condiciones especificadas y utiliza el que tenga el mayor período de validez restante.
/n Especifica el Nombre del Sujeto (Subject Name) del certificado de firma. El valor puede ser una parte del nombre completo del sujeto.
/fd Especifica el algoritmo de resumen criptográfico (hash) que se utilizará para crear la firma digital.
/tr Especifica la dirección URL del servidor de Timestamp (sellado de tiempo).
/td Especifica el algoritmo de resumen criptográfico utilizado por el servidor de Timestamp. Debe utilizarse junto con la opción /tr. Recomendado
/sha1 Selecciona el certificado de firma mediante su huella digital (SHA-1 Thumbprint).
/csp Especifica el Proveedor de Servicios Criptográficos (CSP) que contiene la clave privada utilizada para la firma.

Timestamp


Durante la firma digital puede incorporarse una marca de tiempo (Timestamp) emitida por un servidor confiable.

Esto permite demostrar que el software fue firmado mientras el certificado se encontraba vigente, conservando la validez de la firma incluso después del vencimiento o reemplazo del certificado.