Guía de integración de GitHub Actions

Firma de código mediante acciones de GitHub. Para ello, creamos un flujo de trabajo en el repositorio de GitHub que deseamos y firmamos el código con el script.

Requisitos previos

  1. Un repositorio de GitHub (necesitará una cuenta de administrador)
  2. Signtool instalado y configurado
  3. ECSigning KSP instalado y configurado.

Instalación y configuración

Para instalar y configurar Signtool y ECSigning KSP, siga los pasos mencionados aquí.

Antes de comenzar, necesitamos configurar un ejecutor. Este se instalará en el dispositivo donde tenga instalados y configurados SIgntool y ECSigning KSP.

Para configurar el corredor, siga los pasos a continuación:

  1. Navega a tu repositorio de GitHub

    Necesitará tener una cuenta de administrador para esto.

    • Vaya a la Configuración del Repositorio.
    • Desplácese hacia abajo hasta Acciones y seleccione Ejecutor en el menú desplegable.
    • Haga clic en Nuevo ejecutor autohospedado.
    Navegar al repositorio de Github
  2. Después de hacerlo, puedes hacer clic en la imagen del corredor (macOS/Linux/Windows) que prefieras. Las instrucciones a continuación son para Windows. Verás varios comandos en la pantalla.

    Ejecute los comandos mostrados en la configuración del ejecutor. Los comandos también se detallan a continuación:

    mkdir acciones-ejecutor; cd acciones-ejecutor
                                                Invocar-WebRequest -Uri https://github.com/actions/runner/releases/download/v2.303.0/actions-runner-win-x64-2.303.0.zip -OutFile acciones-runner-win-x64-2.303.0.zip
                                            
                                                Add-Type -AssemblyName System.IO.Compression.FileSystem ; [System.IO.Compression.ZipFile]::ExtractToDirectory("$PWD/actions-runner-win-x64-2.303.0.zip", "$PWD")
                                            
    ./config.cmd --url https://github.com/Encryption-Consulting-LLC/CodeSignSecure-Desktop --token
  3. Una vez que veas GitHub Actions escrito en tu pantalla, se te solicitará que te registres como corredor.

    Pantalla de registro de corredores
    • Ingrese el nombre del grupo de corredores al cual agregar este corredor: [presione Enter para el valor predeterminado] (puede dejarlo como predeterminado).
    • Ingrese el nombre del corredor: [presione Enter para CLIENTE] (Puede ingresar el nombre deseado para su corredor).
    • Este corredor tendrá las siguientes etiquetas: 'autoalojado', 'Windows', 'X64'

      Ingrese etiquetas adicionales (por ejemplo, etiqueta-1, etiqueta-2): [presione Enter para omitir] (ingrese una etiqueta aquí, puede ser cualquier cosa, no abandone/omita este paso. El mismo nombre se usará más adelante para llamar al ejecutor en el script).

    • Lo siguiente se le solicitará en la pantalla una vez que haya terminado.

      • Corredor añadido exitosamente
      • La conexión del corredor es buena
      • Configuración del corredor: Ingrese el nombre de la carpeta de trabajo: [presione Enter para _work] (puede dejarlo predeterminado o puede especificar una carpeta de su elección)
      • Configuraciones guardadas:

        • ¿Te gustaría ejecutar el corredor como servicio? (S/N) [presiona Enter para N] (Ingresa Y)
        • Cuenta de usuario a utilizar para el servicio [presione Enter para NT AUTHORITY\NETWORK SERVICE] (Asegúrese de ingresar Administrador aquí)

          Se requieren privilegios de administrador para ejecutar el comando. Por lo tanto, es IMPRESCINDIBLE configurar el usuario como administrador.
        • Contraseña para la cuenta CLIENTE\Administrador (Proporcione la contraseña de su cuenta de Administrador)
        • Una vez hecho esto, verá el siguiente mensaje en pantalla. Se llamará "Service actions.runner". .
        • Otorgar permisos de archivo a 'CLIENTE\Administrador'.

          Acciones de servicio.runner.Encryption-Consulting-LLC-CodeSignSecure-Desktop.TryThree instaladas correctamente

          Acciones de servicio.runner.Encryption-Consulting-LLC-CodeSignSecure-Desktop.TryThree: la opción de recuperación se configuró correctamente

          Las acciones del servicio.runner.Encryption-Consulting-LLC-CodeSignSecure-Desktop.TryThree se configuraron correctamente para inicio automático retrasado.

          Acciones de servicio.runner.Encryption-Consulting-LLC-CodeSignSecure-Desktop.TryThree configuradas correctamente

          Esperando que comience el servicio…

          Las acciones del servicio.runner.Encryption-Consulting-LLC-CodeSignSecure-Desktop.TryThree se iniciaron correctamente.

  4. Una vez que el ejecutor esté configurado en su dispositivo, navegue a su repositorio en GitHub.

    • Ir a Acciones
    • Haga clic en Nuevo flujo de trabajo
    • Haga clic en Configurar un flujo de trabajo usted mismo

      Configura tu flujo de trabajo

      Así se verá tu editor. Puedes renombrar tu archivo .yaml o dejarlo como está.

      Cambiar el nombre del archivo YAML
    • Agregue el siguiente script a su editor después de realizar algunos cambios o actualizar las variables.

                                                  nombre: Firma de código en: push: ramas: <[Nombre de su rama]> trabajos: compilación: se ejecuta en: pasos: - nombre: Código de pago usos: acciones/checkout@v2 - nombre: Código de firma ejecución: | signtool sign /csp "Proveedor de almacenamiento de claves de consultoría de cifrado" /kc /fd /f " " /tr /td SHA256 " "
      
                                              

      Reemplace las variables especificadas en A continuación se ofrece una breve descripción de la variable esperada:

      • : Aquí se proporciona la ruta del archivo que se desea firmar. Ejemplo: C:\ \ Asegúrese de haber proporcionado un nombre de archivo con la extensión adecuada.
      • : Se refiere a la clave criptográfica utilizada para firmar el código. Ejemplo: evcodesigning.
      • : Un ejemplo de lo que se puede incluir en este campo es C:\testing.pem. El archivo certificate.pem DEBE incluirse en esta entrada. Puede generar un archivo pem del certificado para el diseño de código si tiene el nombre de clave usando ECSigningKSP. Para ello, siga los siguientes comandos:

        En su dispositivo donde tiene ECSigningKSP instalado y configurado, navegue a la carpeta de ECSigningKSP, que generalmente está presente en “C:\Program Files\Encryption Consulting\SigningKSP”

        En el símbolo del sistema, acceda a este directorio. Luego, use el siguiente comando para obtener el archivo PEM del certificado.

        ECGetCert.exe

        ejemplo: ECGetCert.exe evcodesigning

        Proporcione la ubicación del certificado guardado.

      • : Debe proporcionar el nombre del algoritmo hash, como SHA256, SHA384 o SHA512. Debe ser uno de estos tres valores.

      • : Un servidor de marca de tiempo proporciona prueba de que una firma digital se realizó en un momento específico, lo que permite verificar en el futuro que un archivo se firmó en un momento determinado. El que usamos generalmente es http://timestamp.digicert.com

      El comando que utilicé para firmar fue

                                                  signtool sign /csp "Proveedor de almacenamiento de claves de consultoría de cifrado" /kc evcodesigning /fd SHA256 /f "C:\Usuarios\Administrador\Escritorio\ForTesting\evcodesigning.pem" /tr http://timestamp.digicert.com /td SHA256 "C:\Usuarios\Administrador\Escritorio\ForTesting\AgentService.exe"
                                              

      El guión que utilicé fue:

                                                  Nombre: Firma de código en: push: ramas: [ Github_Actions ] trabajos: compilación: se ejecuta en: ejecutor pasos: - nombre: Código de pago usos: acciones/checkout@v2 - nombre: Código de firma ejecución: | 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"
                                              
    • Una vez editado el script, haz clic en "Confirmar". Puedes confirmar directamente en tu rama predeterminada o en una nueva. Asegúrate de actualizar el nombre de tu rama dentro del código. Tras confirmar, el trabajo se ejecutará.

      Finalización del trabajo