Cada cierto tiempo me toca configurar el certificado electrónico para utilizarlo en el módulo del SII (Suministro Inmediato de Información) y siempre me pasa igual, no recuerdo exactamente como era. Es por ello que he decidido escribir este post, con un paso a paso lo suficientemente detallado como para no tener que perder más tiempo buscando en internet como se hacía, y oye, si además ayudo a alguien en la misma tesitura, pues mejor que mejor!
Este artículo va a ir dividido en tres partes principales. Las dos primeras partes son, como decía, las que necesitamos para utilizar el módulo del SII. En la tercera parte, veremos como podemos utilizar estos Key Vaults en nuestros desarrollos para almacenar contraseñas y secretos de forma segura.
Subir certificado a un Key Vault de Azure
Lo primero que haremos, es subir nuestro certificado electrónico a un Key Vault de Azure, pero ¿Qué es un Key Vault?
Azure Key Vault es un servicio de almacenamiento seguro de secretos en la nube. Puede almacenar de forma segura claves, contraseñas, certificados y otros secretos.
https://docs.microsoft.com/es-es/azure/key-vault/secrets/quick-create-portal
En este enlace puedes obtener más detalles sobre las ventajas de utilizar este servicio.
Por lo tanto, para poder subir nuestro certificado, lo primero que tendremos que hacer es crear un Key Vault dentro de nuestra suscripción de Azure. Para ello, vamos al portal de azure, pulsamos sobre el botón de Crear nuevo recurso, buscamos «Key Vault» en el buscador del marketplace y le damos al botón Crear.
El siguiente paso será configurar los datos necesarios que nos solicita el Key Vault, como son el grupo de recursos (puede ser uno nuevo o existente), el nombre que asociamos al Key Vault, o la región en la que queremos desplegarlo.
Una vez relleno, pulsamos sobre el botón Revisar y crear, y cuando finalice la creación nos aparecerá la siguiente notificación en el panel.
Ahora que ya tenemos el Key Vault creado, podemos proceder con la carga del certificado. Para ello, ejecutaremos el siguiente script de PowerShell indicando los valores necesarios. Para poder ejecutar este script, son necesarios unos requisitos mínimos:
- El certificado debe tener extensión .pfx (yo lo he probado con .p12 y también funciona).
- Hay que tener instalado el .Net Framework 4.7.2 o posterior.
- Hay que tener instalado el módulo de Azure de PowerShell.
- El usuario que ejecute el script debe tener los permisos suficientes dentro de la suscripción de Azure.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Connect-AzAccount $pfxFilePath = 'C:\Temp\jatomas.pfx' $pwd = 'password' $secretName = 'JATCertificateSecret' $keyVaultName = 'JATKeyVault' $collection = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2Collection $collection.Import($pfxFilePath, $pwd,[System.Security.Cryptography.X509Certificates.X509KeyStorageFlags]::Exportable) $pkcs12ContentType = [System.Security.Cryptography.X509Certificates.X509ContentType]::Pkcs12 $clearBytes = $collection.Export($pkcs12ContentType) $fileContentEncoded = [System.Convert]::ToBase64String($clearBytes) $secret = ConvertTo-SecureString -String $fileContentEncoded -AsPlainText –Force $secretContentType = 'application/x-pkcs12' Set-AzKeyVaultSecret -VaultName $keyVaultName -Name $secretName -SecretValue $Secret -ContentType $secretContentType |
En este script deberás indicar los siguientes valores:
- $pfxFilePath = Ruta donde se encuentra el certificado
- $pwd = Contraseña del certificado (si se requiere)
- $secretName = Nombre del secret que se creará en nuestro key vault y contendrá el certificado
- $keyVaultName = Nombre del key vault que hemos creado previamente
Una vez ejecutado, nos solicitará credenciales de Azure.
Ahora, volvemos al Key Vault desde el portal de Azure, y vemos como se ha creado un nuevo Secret dentro del mismo.
El siguiente paso será crear un nuevo registro de aplicaciones dentro de Azure Active Directory. Gracias a esto, podremos impersonar el acceso de Dynamics 365 al Key Vault.
Para ello, vamos a Azure Active Directory. y creamos un nuevo registro de aplicaciones.
Una vez creado el registro de aplicaciones, vamos a crear un secret, que será utilizado por Dynamics para autenticar y poder utilizar el Key Vault. Para ello, vamos a Secretos y certificados y añadimos uno nuevo. Habrá que indicar el nombre y cuando queremos que expire. Una vez generado el secret, lo copiamos en un lugar seguro para utilizarlo más adelante.
Para finalizar con la configuración dentro del portal de Azure, vamos a añadir una política de acceso dentro del Key Vault que dará los permisos necesarios al registro de aplicaciones que acabamos de generar. Para ello, vamos al Key Vault, Políticas de acceso, y añadimos una política nueva. En ella, seleccionamos la plantilla necesaria para asociar los permisos a requeridos, y seleccionamos el registro de aplicaciones que creamos previamente.
Por último, hacemos clic en el botón guardar. Con esto, ya tendríamos toda la configuración necesaria en el lado de Azure.
Configurar Key Vault en Microsoft Dynamics 365 Finance
Ahora, toca ir a Dynamics 365 Finance para realizar la configuración necesaria. Para ello vamos a Administración del sistema > Parámetros de Key Vault. Creamos un nuevo registro y lo completamos con los siguientes valores:
- Dirección URL de Key Vault: Nombre de DNS (Key Vault)
- Cliente de Key Vault: Id Aplicación (App reg. AAD)
- Clave secreta de Key Vault: Secret generado (App reg. AAD)
Por último, añadimos un nuevo secreto:
- Secreto: vault://Nombre_KeyVault/Nombre_Secreto/[Versión_Secreto] (En nuestro caso, solo tenemos una versión del secreto, por lo que no es necesario indicarlo).
- Tipo de secreto: Certificado
Para finalizar, pulsamos en el botón Validar, y si todo hay ido bien, debería aparecernos el siguiente info:
Y con esto, ya tendríamos finalizada la configuración del certificado para utilizar en el SII, por lo que nuestros compañeros podrán continuar con la configuración y testeo del módulo.
Almacenar contraseñas en Key Vault y utilizarlas desde X++
Pues sí, aparte de utilizar los Key Vaults para almacenar nuestros certificados para el SII, podemos utilizar estos almacenes de claves para guardar, de manera segura, las contraseñas que necesitemos, por ejemplo, para integrarnos con aplicaciones de terceros desde X++. Con esto, evitaríamos almacenarlas en nuestra base de datos, y por supuesto, evitaríamos tener las contraseñas directamente en el código (si, en el código, aunque no lo creas, existe) y conseguiríamos centralizar toda esta información en un repositorio único.
Lo único que necesitamos es, añadir un nuevo secreto al Key Vault de forma manual pulsando sobre el botón Generar/Importar.
Introducimos el nombre del secret y la contraseña que queremos guardar en el campo Value.
Y lo configuramos dentro de Dynamics 365 Finance del mismo modo que vimos en el punto anterior.
La única diferencia con la configuración anterior, es que en este caso el Tipo de secreto es Manual.
Solo nos quedaría utilizar este secret desde nuestro código x++, y esto se puede hacer de una forma bastante sencilla, utilizando el método getManualSecretValue de la clase KeyVaultCertificateHelper.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
class JATGetKeyVaultPassword { /// <summary> /// Runs the class with the specified arguments. /// </summary> /// <param name = "_args">The specified arguments.</param> public static void main(Args _args) { KeyVaultCertificateTable certificateTable = KeyVaultCertificateTable::findByName('JATPassword'); str password = KeyVaultCertificateHelper::getManualSecretValue(certificateTable.RecId); } } |
Dicho método, nos devolverá el valor del secreto que hemos configurado, tal y como se puede ver en la siguiente imagen.
Espero que os sea útil! 🙂
1 comment / Add your comment below