Firma de código (Code Signing) con Azure Key Vault

El certificado Code Signing para la firma del código tiene que almacenarse de forma segura. Para ello también puede utilizar fácilmente HSM en la nube, mediante el servicio Azure Key Vault. Nuestro tutorial le ayudará a instalar y configurar Azure Key Vault, pero en él encontrará también el pedido de firma que tendrá que elaborar utilizando los datos de Azure. Así que le ayudará con todo.

El certificado para Code Signing se debe almacenar de forma segura

Los certificados de firma de código sólo se emiten para dispositivos seguros: deben estar en el HSM. Esto puede adoptar dos formas: hardware tradicional, cuya adquisición es costosa, o basado en la nube, que realiza la misma tarea. Azure Key Vault, que vamos a utilizar hoy, cumple con el estándar FIPS 140-2 Nivel 2 y 3, por lo que puede utilizarse para almacenar certificados Code Singing. Para obtener más información sobre el servicio, visite la página del servicio Azure Key Vault.

Instalación y configuración de Azure Key Vault

Existe, por supuesto, una alternativa a KeyLocker. Muchos clientes utilizan los servicios en la nube de Azure que permiten un almacenamiento seguro de las claves (HSM). Con Azure Key Vault, podrá almacenar su certificado Code Signing en la nube y no tener que ocuparse de nada más.

Para firmar utilizando un certificado en Azure, debe hacer lo siguiente:

  1. Introducir el certificado en Azure key vault (crear CSR, importar la respuesta después),
  2. Crear la aplicación para firmar,
  3. Añadir la aplicación en Access Policies de su Key Vault,
  4. Instalar el software de soporte en su dispositivo.

Ahora vamos a ver los pasos individuales. Aquí están simplificados para los usuarios avanzados, si necesita tutorial detallado, puede utilizar este tutorial en GitHub. Puede ignorar la parte sobre la compra y verificación de un certificado, ya que se hace a través de nosotros.

Adquisición del certificado Code Signing y su configuración en Azure

Conseguir el certificado para firmar código es fácil. Primero comprará un certificado Code Signing con almacenamiento en el HSM en SSLmarket. Luego creará un CSR en Azure que nos enviará. Una vez emitido el certificado, le enviaremos la clave pública firmada (=certificado) y usted importará esta respuesta a Azure.

En Azure Key Vault, vaya a Certificates en el menú a la izquierda y haga clic en Create a certificate. En el formulario general, elija el nombre del certificado, luego Common name (tenga en cuenta que se muestra como el nombre del firmante) y elija Certificate issued by non-integrated CA como tipo de AC. Seleccione PEM como formato.

Crear CSR en Azure
Crear CSR en Azure

Es necesario configurar Advanced Policy Configuration manualmente, así que haga clic en Not configured y configure lo siguiente:

  • Extended Key Usages (EKU) en 1.3.6.1.5.5.7.3.3
  • Key Size para RSA como mínimo 3072b, para EC como mínimo P-256
  • Clave privada como Not expordable, si se trata de un certificado CS EV
Advanced policy configuration
Advanced policy configuration

En la categoría In progress, failed or cancelled verá el certificado nuevo, vaya a su detalle y haga clic en Certificate Operation, lo cual abrirá otro detalle en el que podrá descargar el CSR. Después, en el mismo lugar se importará el certificado emitido a través de Merge Signed Request.

Descarga del CSR en Certificate Operation
Descarga del CSR en Certificate Operation

Utilice el CSR descargado para solicitar un certificado a SSLmarket, puede utilizarlo para OV y EV Code Signing almacenado en el HSM.

Creación de la aplicación

Además de crear Key Vault en Resource Group y almacenar el certificado, es necesario crear una aplicación en Microsoft Entra ID (anteriormente Azure Active Directory) y su secret; ambos se utilizan para la autenticación y el acceso al Vault.

Vaya a la vista general de Microsoft Entra ID y seleccione App registrations en el menú a la izquierda. A continuación, introduzca un nuevo registro de aplicación, asígnele un nombre y seleccione la opción de acceso Accounts in this organizational directory only (Default Directory only - Single tenant). Después de crear la aplicación verá el Application ID que se necesita para firmar como "client ID ".

Vaya al detalle de la aplicación en el menú a la izquierda a la agenda Certificates & secrets. Aquí, cree un nuevo Client secret y nómbrelo. Copie el Secret (Value) y guárdelo, porque no lo volverá a ver.

Configuración de Access Policies

Ahora tenemos que volver a Key Vault.

Primero, cambie al modelo de derechos de Azure role-based access (RBAC) a Vault access policy.

modelo de Azure Permission
modelo de Azure Permission

En el menú a la izquierda, seleccione Access Policies y haga clic en Create. Cree la Access policy que se aplicará a la aplicación que ha creado. Como mínimo, se requieren los siguientes permisos:

  • Key permissions - Verify, Sign, Get, List
  • Secret permissions - Get, List
  • Certificate permissions - Get, List

Seleccionará la aplicación en el segundo paso y podrá buscarla por su nombre.

Azure - Create Acess Policy
Azure - Create Acess Policy

Eso es todo lo que necesita configurar en la interfaz de Azure.

Instalación del software de soporte

Instale lo siguiente en su ordenador:

  • .net SDK 6.0.200, Windows x64; download
  • .net ASP.NET Core Runtime 6.0.2, Windows x64; download
  • Azure SignTool, instale con cmd: dotnet tool install --global AzureSignTool

¡Enhorabuena!, ahora puede utilizar Azure SignTool para firmar código utilizando un certificado almacenado en Key Vault.

Firmar con el certificado en Azure Key Vault

Ahora que todo está listo para firmar, lo más importante es tener toda la información que necesitamos para la orden de firma. Tiene el siguiente aspecto: azuresigntool sign -kvt KEY-VAULT-DIRECTORY-ID -kvu KEY-VAULT-URI -kvi APPLICATION-CLIENT-ID -kvc CERTIFICATE-NAME -kvs CLIENT-SECRET -tr http://timestamp.digicert.com -v PATH-TO-EXECUTABLE

Qué es cada cosa:

  • Kvt es el directory id de su Azure Key Vault
  • kvu es el URL Azure Key Vault. Podrá encontrarlo en la página principal como DNS Name.
  • kvi es el application id Azure app, que ha instalado.
  • kvc es el friendly name del certificado que quiere utilizar. Usted eligió esa denominación.
  • kvs es el client secret, que ha generado para la aplicación.
  • tr es el URL timestamp del servidor. Asegúrese de utilizar la marca de tiempo para garantizar que la firma sea de confianza incluso después de que caduque el certificado.
  • v determina la situación del archivo que está firmando.

Todo lo anterior se puede encontrar en la interfaz de Azure.