Ir al contenido

¡Se acercan los certificados de 47 días! ¿Estás preparado?

Actúa ahora →

¿Cómo integrar la canalización CI/CD de GitLab con CodeSigning?

automatización de tuberías

GitLab es un gestor de repositorios Git basado en la web que ofrece gestión de código fuente, automatización de pipelines de integración/desarrollo continuo (CI/CD) y otras funciones para el desarrollo de software. Es una plataforma DevOps integral que permite a los expertos llevar a cabo todo el trabajo del proyecto, desde la planificación y la gestión del código fuente hasta la supervisión y la seguridad.

Como resultado, los equipos pueden colaborar y crear mejor software. GitLab ofrece capacidades integrales de DevOps en cada etapa del ciclo de vida del desarrollo de software. Sus capacidades de integración continua (CI) automatizan la creación y prueba de código para los equipos de desarrollo. La plataforma también incluye funciones de seguridad que proporcionan resultados de análisis dentro del flujo de trabajo/canalización de CI nativo, y un panel de control que ayuda a los profesionales de seguridad a gestionar vulnerabilidades.

Codiseño

La firma digital de código es un procedimiento que verifica la legitimidad del autor y la originalidad y autenticidad de la información digital, en particular del código de software. También garantiza que la información no sea código malicioso. Además, garantiza que esta información no haya sido alterada, falsificada ni eliminada después de ser firmada digitalmente . La firma digital se crea utilizando una clave privada a la que solo tiene acceso el editor del software. Cuando el software se descarga e instala, la firma digital se compara con la clave pública para confirmar que coinciden y que el software no ha sido modificado. La firma digital de código es importante para garantizar la seguridad de las aplicaciones de software, ya que ayuda a prevenir la distribución de malware y otro software malicioso.

En resumen, para integrar GitLab CI/CD con la firma de código: registre un ejecutor autohospedado con SignTool y el cliente KSP instalados, ejecute el servicio de ese ejecutor con una cuenta dedicada de privilegios limitados (no de administrador) y, a continuación, añada una tarea que invoque SignTool contra el certificado registrado en KSP en su archivo .gitlab-ci.yml. La clave privada permanece en el HSM durante todo el proceso.

Puntos Clave

  • La cuenta de servicio de GitLab Runner nunca debería necesitar permisos de administrador completos. En su lugar, otórguele el permiso específico que necesiten KSP o signtool.
  • Usos de GitLab CI YAML # para comentarios, no //Un extraviado // Un comentario en un archivo .gitlab-ci.yml provoca un error de análisis en lugar de ser ignorado silenciosamente.
  • Esta página trata específicamente sobre GitLab como tutorial de plataforma. Para obtener información más amplia sobre la arquitectura de referencia, las puertas de aprobación y el modelo de evidencia de auditoría, consulte Buenas prácticas de firma de código en el ciclo de vida del desarrollo de software (SDLC).

Integración de GitLab con CodeSigning

Encryption Consulting ofrece una solución de firma de código, « CodeSign Secure », que le permite almacenar las claves de forma segura y con total visibilidad y control de las actividades de firma de código. Las claves privadas del certificado de firma de código se pueden almacenar en un módulo de seguridad de hardware (HSM) para eliminar los riesgos asociados con claves robadas, dañadas o utilizadas indebidamente.

Para empezar, necesitará una cuenta de GitLab y un runner, donde tenga instalados y configurados signtool y ECSigning KSP. A continuación, se detallan los prerrequisitos:

  1. Se trata de un servidor de ejecución autohospedado con ECSigning KSP y Signtool instalados y configurados. La cuenta de servicio del servidor necesita los permisos específicos que requiere KSP para autenticarse y acceder a la ruta del certificado, no privilegios de administrador completos.
  2. Una cuenta de GitLab.

Solución de firma de código empresarial

Obtenga una solución para todas sus necesidades criptográficas de firma de código de software con nuestra solución de firma de código.

Para configurar ECSigningKSP y Signtool, siga los siguientes pasos:

Descarga el SDK de Windows: ( developer.microsoft.com/en-us/windows/downloads/windows-10-sdk/ )

Puede elegir instalar solo las herramientas de firma del SDK de Windows para aplicaciones de escritorio.

Abra el archivo winsdksetup.exe. Recuerde la ruta predeterminada que se muestra en la ruta de instalación, ya que será útil para ejecutar estos comandos desde el símbolo del sistema.

Inicio del SDK de Windows

En la página de Privacidad de Windows Kits, cualquiera de las opciones para permitir que Microsoft recopile información es válida. Haga clic en Siguiente.

Privacidad del SDK de Windows

Acepta el acuerdo de licencia

Acuerdo de licencia del SDK de Windows

Deseleccione todas las características excepto las Herramientas de firma del SDK de Windows para aplicaciones de escritorio y, a continuación, seleccione Instalar.

función del SDK de Windows

Cuando se le pregunte si desea permitir que esta aplicación realice cambios, seleccione Sí.

Control de cuentas de usuario de Windows
SDK de Windows final

Haga clic en la barra de búsqueda de Windows en la barra de tareas y escriba “Editar las variables de entorno del sistema” y seleccione la opción del panel de control del mismo nombre.

editar la variable de entorno del sistema

Haga clic en variables de entorno.

variables ambientales modales

Antes de editar la lista de variables, navegue hasta la ubicación donde está instalado el SDK de Windows usando el explorador de archivos. Debe copiar la ruta de la carpeta que contiene la aplicación signtool. La ruta predeterminada es C:\Archivos de programa (x86)\Windows Kits\10\bin\10.0.22621.0\x64 ( consulte la captura de pantalla a continuación). Asegúrese de hacer clic con el botón derecho y copiar la ruta como se muestra. También puede ver la aplicación signtool al final de la lista de archivos; este es el comando que ejecutará.

Ruta de instalación de signtool

En la lista Variables del sistema, haga clic en Nuevo. A continuación, escriba Ruta como nombre de la variable y copie y pegue la ruta. Finalmente, haga clic en Aceptar en la ventana Variables de entorno y en la ventana Propiedades del sistema.

añadir nueva variable del sistema

Para probar la instalación, abra el símbolo del sistema y escriba signtool; el resultado debería ser como se muestra a continuación.

Símbolo del sistema de signtool

La ubicación de instalación predeterminada de signtool es, por ejemplo: C:\Archivos de programa (x86)\Windows Kits\10\bin\10.0.22621.0\x64

Solución de firma de código empresarial

Obtenga una solución para todas sus necesidades criptográficas de firma de código de software con nuestra solución de firma de código.

Para configurar KSP siga los pasos a continuación:

Si está utilizando nuestra solución, puede descargar el KSP siguiendo los pasos a continuación:

  • Registrarse en Código de firma seguro.
  • Navegar a: Repositorio de herramientas de firma.

    Página de herramientas de firma segura de Codesign
  • Descargar “Consultoría de cifrado CNG-SigningKSP”
  • Instale las herramientas de cliente con el instalador .MSI. Este automatiza gran parte de la configuración. Vaya a la ubicación donde se guardó el archivo descargado e inicie el instalador.

    Ejecutar el instalador .msi 681cf96b947ce
  • Haga clic en Siguiente cuando aparezca el asistente de instalación.

    Configuración de KSP para firma EC en casa
  • Haga clic en Siguiente.

    Instalación de la carpeta de configuración de KSP con firma EC
  • En la sección Nombre de usuario campo, tipo admin.
  • En el campo Código , copie el código del repositorio de la API de Postman . Haga clic en la API GetLoginToken y copie el código del cuerpo.

    Descarga PostMan desde este enlace . Una vez descargado, haz clic en el botón "Saltar" en la parte inferior de la ventana. En el panel de control, agrega una nueva colección usando el botón con el signo más junto a "Colecciones".

    API GetLoginToken (http://codesignsecureapi.encryptionconsulting.com/api/auth/GetLoginToken): Esta es la API más importante, ya que proporciona un token de portador para usar con el resto de las API. El contenido del cuerpo se muestra a continuación. El código funciona como contraseña para obtener el token de portador, el campo de usuario es el nombre de usuario y el campo de tipo de identidad especifica el tipo de usuario. Haga clic en Enviar para generar una salida que muestra el token de portador en la parte inferior. Copie este token para usarlo.

    API de token de portador de cartero
  • Cambie la Identidad Tipo a 1.
  • Abandonar URL base de la API lo mismo.
  • Haga clic en Siguiente.

    Información de autenticación de usuario de configuración de KSP de firma EC
  • Haga clic en Siguiente.

    Confirmación de la instalación y configuración de KSP con firma EC
  • Luego se le notificará que este programa realizará cambios en su PC, haga clic en Sí.

    Control de cuentas de usuario de configuración de MSI
  • La instalación ya está completa.

    Instalación y configuración de KSP con firma EC completa

Por favor, siga los pasos a continuación:

  • Crea una cuenta de GitLab. Ve a la sección "Crear un nuevo proyecto en blanco".
  • Desplázate hasta Configuración -> CI/CD y busca Ejecutor. Expande la opción.

    Ejecutor de laboratorio Git
  • Haga clic en el nuevo ejecutor del proyecto.

    Nuevo Project Runner
  • Haz clic en la plataforma que prefieras y asigna una etiqueta al corredor. Indica el tiempo de espera y haz clic en "Crear corredor".

    Selección de plataforma para crear un corredor
  • Copia el token que se muestra; lo necesitaremos para registrar el ejecutor. Ahora, primero instalaremos el ejecutor de Gitlab en nuestro dispositivo.
  • Instale GitLab Runner en su dispositivo usando el este enlaceEste enlace es para Windows. Puedes verlo aquí. este enlace para ver los pasos para instalarlo en su dispositivo específico.
  • Puede seguir el documentación para configurar su corredor y registrarlo según su dispositivo.

Para registrar un corredor en Windows, ejecute el siguiente comando:

  1. .\gitlab-runner.exe registro
  2. Introduce la URL de tu instancia de GitLab (también conocida como la URL del coordinador de gitlab-ci). Ejemplo: https://gitlab.com
  3. Introduce el token que obtuviste para registrar el ejecutor. Puedes acceder a él desde Ajustes -> CI/CD -> Expandir -> Ejecutores de proyectos. En Ejecutores de proyectos encontrarás el token.
  4. Introduce una descripción para el ejecutor. Puedes cambiar este valor más adelante en la interfaz de usuario de GitLab. Ejemplo: Dispositivo
  5. Introduce las etiquetas asociadas al ejecutor, separadas por comas. Puedes cambiar este valor más adelante en la interfaz de usuario de GitLab. Ejemplo: WindowsRunner
  6. Ingrese cualquier nota de mantenimiento opcional para el corredor.
  7. Proporcionar el ejecutor del corredor. Estamos operando esto en Shell.

Una vez instalado y configurado el ejecutor, acceda a los servicios de su dispositivo, busque GitLab Runner y configúrelo para que inicie sesión como una cuenta de servicio dedicada con privilegios limitados, en lugar de como administrador. Otorgue a esa cuenta únicamente el permiso específico que la documentación de KSP especifica para la autenticación del cliente, además de acceso de lectura a la ruta del archivo de certificado a la que se hace referencia en el script de la canalización; ejecutar el servicio del ejecutor como administrador para solucionar un error de permisos constituye una violación del principio de mínimo privilegio que conviene evitar.

Servicios de ventana modal de Gitlab

Una vez hecho esto, ve a tu proyecto. Quizás tengas que cambiar el nombre del archivo .ym a .gitlab-ci.yml. Ejecuta el siguiente script para realizar el diseño de código.

Reemplace WindowsRunner A continuación, con la etiqueta que proporcionaste al configurar el ejecutor. Ten en cuenta que YAML utiliza # para comentarios, no //; Un // Un comentario en un archivo .gitlab-ci.yml provocará un error de análisis en lugar de ser ignorado.

 job1: tags: - WindowsRunner script: - signtool sign /csp "Proveedor de almacenamiento de claves de consultoría de cifrado" /kc evcodesigning /fd SHA256 /f "C:\Users\Administrator\Desktop\ForTesting\evcodesigning.pem" /tr http://timestamp.digicert.com /td SHA256 "C:\Users\Administrator\Desktop\ForTesting\AgentService.exe"

Si hace clic en CI/CD -> trabajos, verá que se firmó correctamente.

trabajos de gitlab

Necesitarás modificar el comando según tus variables.

  • kc evcodesigning: reemplace evcodesiging con el nombre de su clave
  • f “C:\Users\Administrator\Desktop\ForTesting\evcodesigning.pem”: reemplaza la ubicación con la ubicación de tu archivo .pem para codificar. Puedes obtener esto usando SigningKSP. Desde el símbolo del sistema, accede al directorio que contiene SigningKSP. Usa el comando ECGetCert.ece para obtener el archivo pem de su certificado. 
  • tr http://timestamp.digicert.com: servidor de sellado de tiempo
  • td SHA256 “C:\Users\Administrator\Desktop\ForTesting\AgentService.exe”: ubicación del archivo que desea firmar.

Preguntas frecuentes

¿La cuenta de servicio de GitLab Runner necesita permisos de administrador?

No. Necesita el permiso específico que requiere KSP para autenticarse y acceder al archivo de la ruta del certificado utilizada en la tarea, no derechos de administrador completos. Considerar un error de permisos como motivo para otorgar privilegios de administrador constituye una violación evitable del principio de mínimo privilegio.

¿Por qué falló el análisis de mi archivo .gitlab-ci.yml después de agregar un comentario?

YAML solo reconoce # para comentarios. A // El comentario, común en lenguajes como C o JavaScript, es una sintaxis YAML no válida y provocará un error de análisis en lugar de ser ignorado.

¿Cómo puedo confirmar que un trabajo de GitLab CI ha generado una firma válida?

Agregar un paso corriendo signtool verify /pa contra el archivo firmado inmediatamente después del paso de firma, y ​​hacer que el trabajo falle en cualquier cosa que no sea éxito, en lugar de asumir que un trabajo exitoso significa una firma válida.

Conclusión

El artículo anterior muestra el proceso de integración de tu canalización de CI/CD de GitLab con la firma de código. Es un proceso muy sencillo, ya que solo necesitas configurar un ejecutor, conectarlo con una cuenta de GitLab y crear la canalización para ejecutar la tarea. La firma de código es crucial hoy en día, dado el creciente número de software y archivos maliciosos. Puedes contactarnos en [email protected] para cualquier consulta sobre nuestra solución de firma de código.