Una vez más estoy de vuelta con una nueva versión de la herramienta ISVLicenseGenerator, el programa que creé con una versión modificada de la biblioteca estándar AXUtil.dll que nos permite firmar archivos de licencia usando un token criptográfico USB.

En la nueva versión (v0.7) he añadido la posibilidad de firmar el archivo de licencia usando un certificado almacenado en un Azure Key Vault.

Y esta vez tengo una petición para cualquiera que esté leyendo este post. Si tienes una clave protegida por HSM para tu certificado de firma de código, y la estás almacenando en un Key Vault, ¡me encantaría que probaras esta nueva versión!

¿Por qué estoy pidiendo esto? Bueno, ¡juro que no hay nada raro aquí! La razón principal es que no tengo acceso a claves HSM, y no puedo probar la nueva funcionalidad. Así que si tu proveedor de certificados tiene un HSM en la nube, y proporciona algún tipo de integración con Azure Key Vault para almacenar las claves en él, y quieres probarlo… ¡estaré muy contento de intentar arreglar las cosas si no funcionan!

¿Qué está pasando con las licencias ISV?

En febrero de 2024, AXUtil dejará de permitir el uso de SHA1 como algoritmo de firma. Algo que hice en ISVLicenseGenerator v0.6.

Hay algo que, hasta donde sé, Microsoft todavía no ha resuelto, que es ofrecer una solución para certificados que se entregan en un token USB criptográfico. Sí, mi herramienta cubre eso, pero entendería que algunas empresas no confiaran en una herramienta hecha por la comunidad en lugar de una herramienta oficial de Microsoft 🤷‍♂️

¿Qué novedades hay en la v0.7?

If you open the tool and see the UI, you’ll see it keeps the beautiful appearance, but with a few new fields on top:

Si abres la herramienta y ves la interfaz de usuario, verás que mantiene la preciosa apariencia, pero con algunos campos nuevos en la parte superior:

ISVLicenseGenerator v0.7
ISVLicenseGenerator v0.7

Ahora puedes elegir entre firmar el archivo de licencia usando el token USB o un certificado local (esa es la funcionalidad existente), ¡o usar un certificado almacenado en Azure Key Vault!

Si lo eliges como la ubicación del certificado, tendrás que proporcionar detalles en cinco campos más:

Campos adicionales del certificado Azure Key Vault
Campos adicionales del certificado Azure Key Vault
  • Key Vault DNS: esto se puede encontrar en la pestaña overview de tu instancia de Key Vault.
  • Key name: es el nombre del certificado en Azure Key Vault donde has almacenado el certificado de firma de código.
  • Entra ID Tenant Id: se puede encontrar en la página principal de Entra ID en el portal de Azure.
  • AppId: necesitaremos un registro de aplicación para acceder al Key Vault desde la aplicación como un service principal.
  • Secreto: el secreto en la app registration.

Configurando el Key Vault

Vamos a ver cómo configurar el Key Vault, almacenar el certificado y añadir el registro de la aplicación como un service principal.

Primero despliega un Azure Key Vault, puede ser del tier Standard.

Azure Key Vault
Azure Key Vault

En el key vault verás el DNS, que es el campo Vault URI (y que habré eliminado una vez que termine de escribir este post), y también tienes el Id de tenant en el campo Directory ID debajo del DNS.

Ahora sube el certificado desde el menú «Certificates» en la barra lateral:

Importar clave privada
Importar clave privada

Recuerda que aquí necesitas subir tu clave privada. La clave pública se utiliza como recurso en Visual Studio cuando creas la configuration key utilizada para bloquear tu ISV.

El siguiente paso será crear un registro de aplicación en Entra ID:

App registration
App registration

Aquí obtendremos el App Id del campo Application (client) ID, y podemos obtener otra vez el Tenant ID.

Crea un secreto en el registro de la aplicación y guárdalo en algún lugar seguro.

Ahora necesitamos darle a este registro de aplicación derechos sobre el Key Vault para acceder al certificado que subiremos, y para firmar la licencia. Ve al Key Vault y bajo la gestión de acceso (IAM) en la barra lateral añadiremos dos roles.

¿Por qué dos? Podríamos lograrlo con un solo rol, pero quiero reducir la cantidad de derechos de acceso para esta app registration. Hacemos click en el botón «Add», y luego «Add role assignment». El primer rol que añadiremos es el «Key Vault Certificate User»:

Key Vault Certificate User

Haz clic en el botón siguiente, y luego en el enlace «+ Select members», y busca el nombre de tu app registration:

Añadir app registration
Añadir app registration

Hacemos clic en select, y luego en «Review + assign» dos veces.

Ahora repetimos los pasos para el rol de «Key Vault Crypto User»:

Key Vault Crypto User
Key Vault Crypto User

Una vez hecho esto podemos ir a ISVLicenseGenerator, rellenar todos los campos y hacer clic en Generate:

ISVLicenseGenerator v0.7
ISVLicenseGenerator v0.7

Si toda la información es correcta, obtendrás esta bonita pantalla de éxito:

¡Funciona!
¡Funciona!

¡Y tendrás una licencia funcional para desbloquear tu ISV!

¿Qué pasa con las claves protegidas por HSM?

Well, that’s the question I’d also like to know the answer to! Unfortunately, I don’t have access to any certificate provider, and can’t check their HSM capabilities or if they have an integration for code-signing certificates to be stored in Azure Key Vault.

If this were possible, we could use the HSM capabilities of the Premium tier of Azure Key Vault, where we can create a Key Encryption Key (KEK) that’s later used to request a certificate from a certificate provider:

Bueno, esa es una pregunta de la que también me gustaría saber la respuesta. Desafortunadamente, no tengo acceso a ningún proveedor de certificados, y no puedo comprobar las capacidades HSM o si tienen una integración para que los certificados de firma de código se almacenen en Azure Key Vault.

Si esto fuera posible, podríamos utilizar las capacidades HSM del nivel Premium de Azure Key Vault, donde podemos crear una Key Encryption Key (KEK) que se utiliza luego para solicitar un certificado de un proveedor de certificados:

Generación de KEK
Generación de KEK

Si quieres probarlo, puedes hacer fork del repositorio en GitHub, y si necesitas cualquier asistencia de mi parte, no dudes en contactarme. Me encantaría añadir esta característica a la herramienta.

¡Suscríbete!

Recibe un correo cuando se publique un nuevo post
Author

Microsoft Dynamics 365 Finance & Operations technical architect and developer. Business Applications MVP since 2020.

Write A Comment

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

ariste.info