Saltar al contenido

Cómo firmar código creado con Azure Pipelines mediante un certificado /key en Azure Key Vault?

Hola, hemos encontrado la respuesta a lo que buscas, has scroll y la verás aquí.

Solución:

Estuve luchando con Azure Key Vault y Azure Pipelines para firmar nuestro código y lo logré. Así que esto es lo que descubrí.

Fundamentalmente, los certificados de validación extendida (EV) utilizados para la firma de código son animales muy diferentes a los certificados SSL “normales”. Los estándar se pueden exportar tanto como desee, lo que significa que puede cargarlos en Azure Pipelines y usarlos con la herramienta Microsoft Sign estándar.

Sin embargo, una vez que un certificado EV está en Azure Key Vault, no sale de la forma habitual. Debe llamarlo desde Pipelines utilizando la excelente herramienta Azure Sign, tal como lo descubrió Anodyne anteriormente.

Obtenga su certificado en Key Vault. Puede utilizar cualquier autoridad de certificación que desee para generar el certificado, siempre que comprendan que necesitará un certificado EV y, fundamentalmente, uno que tenga un módulo de seguridad de hardware (HSM), y no uno con un USB físico key. Cualquier sistema basado en la nube como Key Vault necesitará una versión HSM.

Para obtener los permisos para acceder a este certificado externamente, puede seguir esta página pero tener cuidado pierde un paso. Entonces, lea ese documento primero, luego estos pasos resumidos, para configurar Key Vault:

  1. Abra el portal de Azure, vaya a la Azure Active Directory área y crear un App registration: ingrese un nombre memorable, ignore el Redirect URIy guárdelo.
  2. Vaya a su especifico Key Vault, luego Access control (IAM), luego Add role assignment. Escriba el nombre de la aplicación que acaba de crear en el select cuadro de entrada. También elija un Role, Yo sugiero Reader y luego guardar.
  3. La parte que falta: Aún en Key Vault, haga clic en el Access policies opción del menú. Hacer clic Add Access Policy y agregue su aplicación. los Certificate Permissions Necesito tener el Get marcado. Y el Key Permissions, a pesar de que es posible que no tenga keys en absoluto en esta bóveda, necesito tener Get y Sign. Habría pensado que estos dos estarían en los permisos del certificado …
  4. Regrese a la aplicación que acaba de crear. Selecciona el Certificates & secretsy optar por cargar un certificado (uno nuevo únicamente para acceder a Key Vault de forma remota) o crear un client secret. Si es lo último, guarde una copia de la contraseña, ¡no la volverá a ver!
  5. En el Overview sección de la aplicación será la Application (client) ID. Esto, y la contraseña o el certificado, es lo que se enviará a Azure Sign Tool más adelante en una tarea de canalizaciones.

El manejo de la firma de código real desde Azure requiere varios pasos. Lo siguiente se aplica a los agentes alojados de Microsoft, aunque problemas similares afectarán a cualquier agente privado que tenga.

  1. Azure Sign Tool necesita que se instale el SDK de .NET Core, pero una versión que sea al menos la versión 2.xy, más reciente .NET Core SDK siempre se usa, esto significa que, siempre que la versión de Windows sea lo suficientemente actual, no es necesario que la instale usted mismo. Y puede ver qué versión del SDK se envía con qué agente de Windows.

    La corriente Hosted Versión del sistema operativo en Azure Pipelines, también llamada Default Hosted, es, en el momento de redactar este artículo, Windows Server 2012 R2. Lo cual no está lo suficientemente actualizado. La instalación de un SDK de .NET Core más nuevo para superar esto es una pérdida de tiempo en cada compilación y, aunque la instalación funciona, es posible que llamar a la herramienta Azure Sign no funcione. Parece que solo encuentra versiones anteriores del SDK y arroja este error: Unable to find an entry point named 'SignerSignEx3' in DLL 'mssign32'.

    Entonces, lo más fácil de hacer es cambiar su compilación para usar una imagen de sistema operativo posterior. Windows 2019 funciona a las mil maravillas. Y no es necesario instalar ninguna versión de .NET Core.

  2. Luego, cree una tarea de línea de comandos para instalar Azure Sign Tool. También puede usar una tarea de la CLI de .NET Core, pero no es necesario. En la tarea, escriba esto:

    set DOTNET_SKIP_FIRST_TIME_EXPERIENCE=true
    dotnet tool install --global AzureSignTool --version 2.0.17
    

    Naturalmente usando la versión que desee.

    La variable de entorno DOTNET_SKIP_FIRST_TIME_EXPERIENCE no es estrictamente necesaria, pero configurarla acelera un poco las cosas (consulte aquí para obtener una explicación).

  3. Por último, cree otra tarea de línea de comandos y escriba el comando de la herramienta Azure Sign con el que desea ejecutar. En Windows, esto sería algo como a continuación, tenga en cuenta con ^ no / como marcador de continuación de línea. Naturalmente, consulte aquí para obtener más información sobre los parámetros:

    AzureSignTool.exe sign -du "MY-URL" ^
      -kvu https://MY-VAULT-NAME.vault.azure.net ^
      -kvi CLIENT-ID-BIG-GUID ^
      -kvs CLIENT-PASSWORD ^
      -kvc MY-CERTIFICATE-NAME ^
      -tr http://timestamp.digicert.com ^
      -v ^
      $(System.DefaultWorkingDirectory)/Path/To/My/Setup/Exe
    

Y en teoría, ¡deberías tener éxito! El resultado de la herramienta de señalización es bastante bueno y, por lo general, identifica dónde está el problema.

Sí, puede hacer esto en la canalización de Azure DevOps Service Build.

Para situaciones normales, usualmente usamos comandos SignTool.exe para firmar archivos. También hay una extensión Firma de código en el mercado, que podría firmar un solo archivo, puede usar un script para ejecutar comandos SignTool.exe para varios archivos.

Por lo tanto, puede exportar su certificado de firma de código a un archivo pfx, que luego carga como un archivo seguro en el almacenamiento seguro de archivos de Azure Devops, que lo pone a disposición de sus compilaciones.

Azure DevOps podría almacenar archivos seguros. Consulte este enlace para obtener más detalles: Archivos seguros

La instancia de Azure Key Vault es un poco más complicada. También tenemos una tarea de Azure Key Vault.

Utilice esta tarea en una canalización de versión o compilación para descargar secretos como la autenticación keys, cuenta de almacenamiento keys, cifrado de datos keys, Archivos .PFX y contraseñas de una instancia de Azure Key Vault.

La tarea se puede usar para obtener los valores más recientes de todos o un subconjunto de secretos de la bóveda, y establecerlos como variables que se pueden usar en tareas posteriores de una canalización.

No estoy seguro de cómo GlobalSign integrará la señal de código con su entorno. Teóricamente, es capaz de hacer esto. Para las partes detalladas y la implementación, es posible que deba discutir con sus preventas. Espero que esto ayude.

Te mostramos comentarios y valoraciones

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *