Integração do Cloud Code Signing com GitLab CI

Este é um tutorial sobre como fazer assinatura de código automatizada no GitLab CI usando eSigner CodeSignTool. 

CodeSignTool é um utilitário de linha de comando seguro que faz parte do eSigner: nosso ambiente de assinatura de código em nuvem que beneficia editores e desenvolvedores de software com sua capacidade de conduzir a assinatura de código empresarial com segurança e eficiência de maneira não complicada.  O fluxo de trabalho de exemplo abaixo mostra um código .NET DLL sendo assinado no GitLab CI com eSigner.

SSL.com's EV Assinatura de código certificados ajudam a proteger seu código contra adulteração e comprometimento não autorizados com o mais alto nível de validação e estão disponíveis por apenas $ 249 por ano. Você também pode use seu certificado de assinatura de código EV em escala na nuvem usando eSigner.

PEÇA AGORA

variáveis ​​ambientais

  • NOME DE USUÁRIO: nome de usuário da conta SSL.com. (Requeridos)
  • SENHA: Senha da conta SSL.com (obrigatório)
  • CREDENTIAL_ID: ID da credencial para assinatura do certificado. Se credential_id for omitido e o usuário tiver apenas um certificado de assinatura de código eSigner, o CodeSignTool usará como padrão. Se o usuário tiver mais de um certificado de assinatura de código, esse parâmetro é obrigatório. (Requeridos)
  • TOTP_SECRET: OAuth TOTP Secret. Você pode acessar informações detalhadas sobre https://www.ssl.com/how-to/automate-esigner-ev-code-signing (Obrigatório)
  • AMBIENTE_NAME : Ambiente 'TEST' ou 'PROD'. (Requeridos)

entradas

  • caminho_do_arquivo_de_entrada: Caminho do objeto de código a ser assinado. (Requeridos)
  • saída_dir_caminho: Diretório onde o(s) objeto(s) de código assinado(s) será(ão) escrito(s). Se output_path for omitido, o arquivo especificado em -file_path será substituído pelo arquivo assinado.

Fluxo de trabalho de exemplo de assinatura de DLL de código .NET

Criar um arquivo yml

Agrupe os trabalhos em etapas. Todos os trabalhos em um estágio devem ser concluídos antes que o próximo estágio seja executado.

etapas: - construir - assinar
 

Defina variáveis ​​de ambiente globalmente. A propriedade de nível de trabalho substitui as variáveis ​​globais.

  • As variáveis ​​de ambiente são usadas para tornar as amostras mais legíveis. Na captura de tela acima do fluxo de trabalho de exemplo, PROJECT_NAME, PROJECT_VERSION e DOTNET_VERSION foram opcionalmente omitidos. A assinatura ainda pode prosseguir com essas omissões.  
  • Em ENVIRONMENT_NAME, coloque "TEST" para assinatura de teste e "PROD" para assinatura ao vivo.
variáveis: PROJECT_NAME: "HelloWorld" PROJECT_VERSION: "0.0.1" DOTNET_VERSION: "3.1" ENVIRONMENT_NAME: "PROD"
 

Definir o Estágio de construção

Abaixo está a definição do seu trabalho para construir o artefato dll

construir-dotnet:

 

  1. Defina em qual estágio o trabalho será executado.
  fase: construir

 

  1. Coloque o nome completo da imagem que deve ser utilizada. Ele deve conter a parte do Registro, se necessário.
 imagem: mcr.microsoft.com/dotnet/sdk:3.1-bullseye

 

  1. Defina os scripts que devem ser executados *antes* do trabalho. Pode ser definido globalmente ou por trabalho.
before_script: - mkdir -p ${CI_PROJECT_DIR}/artifacts - mkdir -p ${CI_PROJECT_DIR}/packages

 

  1. Defina os scripts do Shell executados pelo Executor. Construir artefato de DLL
script: - dotnet build dotnet/${PROJECT_NAME}.csproj -c Release - cp dotnet/bin/Release/netcoreapp${DOTNET_VERSION}/${PROJECT_NAME}-${PROJECT_VERSION}.dll ${CI_PROJECT_DIR}/packages/${ PROJECT_NAME}.dll

 

  1. Especifique uma lista de arquivos e diretórios que devem ser anexados ao trabalho se for bem-sucedido.
  • A 'expirar_in' permite que o arquivo seja excluído após um determinado período de tempo. Seu uso é opcional. É por isso que a captura de tela do fluxo de trabalho de exemplo acima não mostra essa propriedade.
artefatos: caminhos: - ${CI_PROJECT_DIR}/packages/HelloWorld.dll expire_in: 5 minutos
 

Defina o estágio de sinalização

Abaixo está a definição do seu trabalho para assinar o artefato dll

Sign-dotnet-artefacts:

 

  1. Defina em qual estágio o trabalho será executado.
  estágio: sinal

 

  1. Coloque o nome completo da imagem que deve ser utilizada. Ele deve conter a parte do Registro, se necessário.
 imagem: janela de encaixe:19.03.0

 

  1. Defina serviços. Isso é semelhante à propriedade `image`, mas vinculará os serviços especificados ao contêiner `image`.
serviços: - janela de encaixe:19.03.0-dind

 

  1. Defina variáveis ​​de ambiente para trabalhos específicos.
  • Na captura de tela acima, o comando sign foi definido diretamente no script sign e não nas variáveis ​​de ambiente. Boutros métodos podem assinar corretamente com o TravisCI.
  variáveis: COMANDO: "sinal"

 

  1. Defina os scripts que devem ser executados *antes* do trabalho. Pode ser definido globalmente ou por trabalho.
  before_script: - mkdir -p ${CI_PROJECT_DIR}/artifacts - mkdir -p ${CI_PROJECT_DIR}/packages

 

  1. Coloque scripts Shell executados pelo Runner. Assine o artefato .NET dll com CodeSignTool Docker Image
script: - docker pull ghcr.io/sslcom/codesigner:latest - docker run -i --rm --dns 8.8.8.8 --network host --volume ${CI_PROJECT_DIR}/packages:/codesign/examples --volume $ {CI_PROJECT_DIR}/artifacts:/codesign/output -e USERNAME=${USERNAME} -e PASSWORD=${PASSWORD} -e CREDENTIAL_ID=${CREDENTIAL_ID} -e TOTP_SECRET=${TOTP_SECRET} -e ENVIRONMENT_NAME=${ENVIRONMENT_NAME} ghcr.io/sslcom/codesigner:latest ${COMMAND} -input_file_path=/codesign/examples/${PROJECT_NAME}.dll -output_dir_path=/codesign/output

 

  1. Escreva o script que pode ser usado para especificar uma lista de arquivos e diretórios que devem ser anexados ao trabalho se for bem-sucedido.
artefatos: caminhos: - ${CI_PROJECT_DIR}/artifacts/${PROJECT_NAME}.dll expire_in: 1 dias

 

  1. Especifique uma lista de nomes de tarefas de estágios anteriores dos quais os artefatos devem ser carregados.
dependências: - build-dotnet

SSL.com's EV Assinatura de código certificados ajudam a proteger seu código contra adulteração e comprometimento não autorizados com o mais alto nível de validação e estão disponíveis por apenas $ 249 por ano. Você também pode use seu certificado de assinatura de código EV em escala na nuvem usando eSigner.

PEÇA AGORA

Iniciar o estágio de construção

Crie um repositório

Consulte as instruções da linha de comando no Gitlab, conforme mostrado na captura de tela abaixo

Empurre sua pasta

Faça isso clicando terminal no menu, seguido de Novo Terminal.

Digite o script push no seu Terminal para enviar o projeto 

Clique no botão Construir

Depois de acionar o pipeline, prossiga para construir

Verifique se a compilação foi bem-sucedida  

Inicie o Estágio de Sinalização

Prossiga para assinar o artefato

Confirme se a assinatura do código foi bem-sucedida

Agora você pode baixar o arquivo assinado

Você pode consultar o SSL.com Repositório Github que contém os códigos-fonte da imagem do docker e descreve como usá-lo: https://github.com/SSLcom/ci-images 

Exemplo de pipeline de CI do Gitlab

Confira o exemplo de pipeline Gitlab CI que criamos em github.com/SSLcom/codesigner-gitlabci-sample

Outros guias de integração de assinatura remota de CI/CD

Precisa de soluções personalizadas? 

Com nosso conhecimento especializado e equipe de suporte cinco estrelas, estamos prontos e dispostos a trabalhar com você em soluções personalizadas ou descontos em assinaturas de alto volume de nível empresarial. Preencha o formulário abaixo e entraremos em contato.

Inscreva-se no boletim informativo de SSL.com

Não perca novos artigos e atualizações de SSL.com

Mantenha-se informado e seguro

SSL.com é líder global em segurança cibernética, PKI e certificados digitais. Inscreva-se para receber as últimas notícias do setor, dicas e anúncios de produtos da SSL.com.

Adoraríamos receber seu feedback

Responda à nossa pesquisa e deixe-nos saber sua opinião sobre sua compra recente.