Integración de firma de código en la nube con CircleCI

Este tutorial muestra cómo eSigner se integra con CircleCI para la firma de código automatizada.

eSigner es el entorno en la nube de SSL.com para la firma de código. Las claves de firma y los certificados están alojados de forma segura en la nube por SSL.com y se puede acceder para firmar desde cualquier dispositivo conectado a Internet, lo que convierte a eSigner en una de las mejores plataformas para la firma de código empresarial. El kit de herramientas eSigner incluye CodeSignTool, que es un utilidad de línea de comandos para Firma de código EV certificados y es ideal para crear procesos de firma automatizados en varias plataformas de integración continua/entrega continua (CI/CD), incluida CircleCI. 

SSL.com's EV Firma de código Los certificados ayudan a proteger su código de manipulaciones no autorizadas y compromisos con el más alto nivel de validación, y están disponibles por tan solo $ 249 por año. También puedes use su certificado de firma de código EV a escala en la nube usando eSigner.

HAZ TU PEDIDO

Variables de entorno

  • NOMBRE DE USUARIO: nombre de usuario de la cuenta SSL.com. (Requerido)
  • CONTRASEÑA: Contraseña de la cuenta SSL.com (Obligatorio)
  • CREDENCIAL_ID: ID de credencial para el certificado de firma. Si se omite credential_id y el usuario tiene solo un certificado de firma de código de eSigner, CodeSignTool lo usará de forma predeterminada. Si el usuario tiene más de un certificado de firma de código, este parámetro es obligatorio. (Requerido)
  • TOTP_SECRETO: OAuth TOTP Secreto. Puede acceder a información detallada sobre https://www.ssl.com/how-to/automate-esigner-ev-code-signing (obligatorio)
  • ENTORNO_NOMBRE : Entorno 'TEST' o 'PROD'. (Requerido)

Ingresos

  • ruta_archivo_entrada: ruta del objeto de código que se firmará. (Requerido)
  • salida_dir_ruta: Directorio donde se escribirán los objetos de código firmados. Si se omite output_path, el archivo especificado en -file_path se sobrescribirá con el archivo firmado.

Preparar los componentes del flujo de trabajo (Firma de DLL de código .NET)

  1. Crear una carpeta .circleci

En su espacio de trabajo de firma de código, cree un carpeta .circleci. Debajo, crea un archivo config.yml.

  1. Establecer la versión de CI
Versión: 2.1
 
  1.  Invocar trabajos a través de flujos de trabajo. Los flujos de trabajo organizan un conjunto de trabajos que se ejecutarán. Los trabajos para esta canalización se configuran a continuación

Ver: https://circleci.com/docs/2.0/configuration-reference/#workflows

flujos de trabajo:
 
  1. Escriba el nombre del flujo de trabajo.
  punto net:
 
  1. Dentro del flujo de trabajo, define los trabajos que desea ejecutar.
 trabajos: - compilar - firmar: requiere: - compilar
 

Definir la etapa de construcción

  1. Defina un trabajo para invocarlo más adelante en un flujo de trabajo.

 (Consulte: https://circleci.com/docs/2.0/configuration-reference/#jobs)

trabajos: construir:

 

  1. Crea una variable de entorno
  • Las variables de entorno se utilizan para hacer que las muestras sean más legibles. En la captura de pantalla anterior de un flujo de trabajo de firma de ejemplo, PROJECT_NAME, PROJECT_VERSION y DOTNET_VERSION se omitieron opcionalmente. La firma aún puede proceder incluso con estas omisiones.  
  entorno: PROJECT_NAME: HelloWorld PROJECT_VERSION: 0.0.1 DOTNET_VERSION: 3.1 WORKSPACE: /home/circleci/project

 

  1.  Defina un ejecutor de Docker: (https://circleci.com/docs/2.0/executor-types/)

    # Puede especificar una imagen de Dockerhub o usar una de nuestras Imágenes de conveniencia del Centro de desarrolladores de CircleCI.

 ventana acoplable: - imagen: mcr.microsoft.com/dotnet/sdk:3.1-bullseye

 

  1. Coloque el directorio de trabajo para el trabajo.
  directorio_de_trabajo: /home/circleci/proyecto

 

  1. Agregar pasos al trabajo

    Consulte: https://circleci.com/docs/2.0/configuration-reference/#steps

  pasos:

 

  1.  Consulte el código fuente para que el flujo de trabajo pueda acceder a él.
    - verificar

 

  1. Cree un directorio de artefactos para almacenar archivos de artefactos firmados y sin firmar
    - ejecutar: nombre: comando Crear directorio de artefactos: | mkdir -p ${ESPACIO DE TRABAJO}/artefactos mkdir -p ${ESPACIO DE TRABAJO}/paquetes

 

  1.  Cree un proyecto o una solución dotnet y todas sus dependencias.
      - ejecutar: nombre: Build Dotnet Project Command: dotnet build dotnet/${PROJECT_NAME}.csproj -c Release

 

  1. Copie el artefacto al directorio de artefactos
  • En este flujo de trabajo de ejemplo de firma escrita, se crearon varios tipos de proyectos. Es por eso que los archivos de diferentes tipos de proyectos se mantuvieron creando subcarpetas. Se creó una subcarpeta denominada 'dotnet' para los proyectos de Dotnet. En la captura de pantalla de demostración anterior, no era necesario crear una subcarpeta llamada 'dotnet', por lo que no se incluyó en el script.
  - ejecutar: nombre: comando Copiar artefactos: | cp dotnet/bin/Release/netcoreapp${DOTNET_VERSION}/${PROJECT_NAME}-${PROJECT_VERSION}.dll ${WORKSPACE}/packages/HelloWorld.dll

 

  1. Conservar el artefacto en el directorio de artefactos para firmar
  - persist_to_workspace: raíz: . rutas: - paquetes/*
 

Definir la etapa de firma

  1. Definir el trabajo de firma
 firmar:

 

  1. Crea una variable de entorno
  • En la captura de pantalla anterior, el comando de firma se definió directamente en el script de firma y no en las variables de entorno. BAmbos métodos pueden firmar correctamente con CircleCI.
  • Las variables de entorno se utilizan para hacer que las muestras sean más legibles. En la captura de pantalla anterior del flujo de trabajo de ejemplo, algunas variables no se incluyeron opcionalmente. La firma aún puede proceder incluso con estas omisiones.  
    entorno: ENVIRONMENT_NAME: PROD COMMAND: sign WORKSPACE: /home/circleci/project

 

  1.     Coloque el directorio de trabajo para el trabajo en Circle-CI
 directorio_de_trabajo: /home/circleci/proyecto

 

  1. Nombre del artefacto para firmar
  • El valor 'nombre-artefacto' es una opción para múltiples proyectos. El parámetro 'nombre-artefacto' se agregó para que la misma parte de firma se pueda usar para todos los tipos de proyectos. Dado que el ejemplo de la captura de pantalla se basa en un solo proyecto, no fue necesario incluirlo.
    parámetros: nombre-artefacto: tipo: cadena por defecto: ''

 

  1. Defina un ejecutor docker:

 Para referencia adicional, consulte: https://circleci.com/docs/2.0/executor-types/

       Puede especificar una imagen de Dockerhub o usar una de nuestras Imágenes de conveniencia del Centro de desarrolladores de CircleCI.

       Asegúrese de actualizar la etiqueta de imagen de Docker a continuación a la versión openjdk de su aplicación.

       Una lista de imágenes de conveniencia de CircleCI Docker disponibles está disponible aquí: https://circleci.com/developer/images/image/cimg/openjdk

   ventana acoplable: - imagen: cimg/openjdk:17.0.3

 

  1. Agregar pasos al trabajo

      Para referencia adicional, consulte: https://circleci.com/docs/2.0/configuration-reference/#steps

    pasos:

 

  1. Cree un directorio de artefactos para almacenar archivos de artefactos firmados y sin firmar
  - ejecutar: nombre: comando Crear directorio de artefactos: | mkdir -p ${ESPACIO DE TRABAJO}/artefactos mkdir -p ${ESPACIO DE TRABAJO}/paquetes

 

  1. Adjuntar a Workspace para acceder al archivo del artefacto
   -attach_workspace: en: /home/circleci/project

 

  1. Habilite Docker para CodeSigner en Circle-CI
 - setup_remote_docker: nombre: Configuración de la versión remota de Docker: 19.03.13 docker_layer_caching: verdadero

 

  1. Extraiga la imagen de Docker del codiseñador del registro de Github
        - ejecutar: nombre: Comando Docker Pull Image: | docker pull ghcr.io/sslcom/codesigner: último docker pull alpine: 3.4

 

  1. Escriba el paso donde se firmará el artefacto con CodeSignTool.
 - ejecutar: nombre: Firmar comando de archivo de artefacto: | docker create -v /codesign/packages --name codesign-in alpine:3.4 /bin/true docker create -v /codesign/artifacts --name codesign-out alpine:3.4 /bin/true docker cp ${WORKSPACE}/packages /<< parámetros.nombre-artefacto >> codesign-in:/codesign/packages docker run -i --rm --dns 8.8.8.8 --network host --volumes-from codesign-in --volumes-from codesign- out -e NOMBRE DE USUARIO=${NOMBRE DE USUARIO} -e CONTRASEÑA=${CONTRASEÑA} -e CREDENCIAL_ID=${CREDENCIAL_ID} -e TOTP_SECRET=${TOTP_SECRET} -e ENVIRONMENT_NAME=${ENVIRONMENT_NAME} ghcr.io/sslcom/codesigner:latest ${COMMAND} -input_file_path=/codesign/packages/<< parámetros.nombre-artefacto >> -output_dir_path=/codesign/artifacts docker cp codesign-out:/codesign/artifacts/<< parámetros.nombre-artefacto >> ${ ESPACIO DE TRABAJO}/artifacts/<< parámetros.nombre-artefacto >>

 

  1. Escriba el paso para que su artefacto se cargue desde su flujo de trabajo, lo que le permite compartir datos entre trabajos y almacenar datos una vez que se completa un flujo de trabajo
    - store_artifacts: nombre: Subir archivos firmados ruta: /home/circleci/project/artifacts/<< parámetros.nombre-artefacto >> destino: << parámetros.nombre-artefacto >>
 

Crear un nuevo repositorio en la línea de comando

Copie los componentes del comando push desde la ubicación de su proyecto en su cuenta de GitHub

Incluya todos los componentes de comando push en su editor

SSL.com's EV Firma de código Los certificados ayudan a proteger su código de manipulaciones no autorizadas y compromisos con el más alto nivel de validación, y están disponibles por tan solo $ 249 por año. También puedes use su certificado de firma de código EV a escala en la nube usando eSigner.

HAZ TU PEDIDO

Configure un proyecto en CircleCI usando el repositorio que está integrado a GitHub

Definir todas las variables de entorno

Mientras se ejecuta el proyecto, haga clic en el botón Configuración del proyecto seguido de Variables de entorno para definir las variables.

Coloque los valores para cada variable

Haga clic en el Agregar variable de entorno para agregar los nombres y valores de todas las variables requeridas para el proyecto.

Espere a que se construya el proyecto.

Haga clic en Persistir en el espacio de trabajo

Espere brevemente a que el archivo del espacio de trabajo se cargue correctamente.

Haga clic en el botón de firmar

Espere a que se configure Remote Docker

Puede tardar más de un minuto, dependiendo del tamaño del archivo.

Espere a que se firmen los artefactos

Haga Clic en Los artefactos de la lengüeta

Si haces clic Los artefactos, podrá ver el archivo que ha firmado con código correctamente. CircleCI también le notificará sobre la firma exitosa del código.

Puede consultar el repositorio SSL.com Github que contiene los códigos fuente de la imagen de la ventana acoplable y describe cómo usarla: https://github.com/SSLcom/ci-images

Ejemplo de canalización de CircleCI

Echa un vistazo a la canalización CircleCI de muestra que hemos creado en github.com/SSLcom/codesigner-circleci-sample

Otras guías de integración de firma remota de CI/CD

¿Necesita soluciones personalizadas? 

Con nuestro conocimiento experto y personal de soporte de cinco estrellas, estamos listos y dispuestos a trabajar con usted en soluciones personalizadas o descuentos en firmas de alto volumen a nivel empresarial. Complete el siguiente formulario y nos pondremos en contacto.

Suscríbase al boletín de SSL.com

No te pierdas los nuevos artículos y actualizaciones de SSL.com

Manténgase informado y seguro

SSL.com es líder mundial en ciberseguridad, PKI y certificados digitales. Regístrese para recibir las últimas noticias, consejos y anuncios de productos de la industria de SSL.com.

Nos encantaría recibir tus comentarios

Responda nuestra encuesta y háganos saber lo que piensa sobre su compra reciente.