Integração de assinatura de código em nuvem com CircleCI

Este tutorial mostra como o eSigner é integrado ao CircleCI para assinatura automatizada de código.

eSigner é o ambiente de nuvem da SSL.com para assinatura de código. As chaves e certificados de assinatura são hospedados com segurança na nuvem pelo SSL.com e podem ser acessados ​​para assinatura de qualquer dispositivo conectado à Internet, tornando o eSigner uma das melhores plataformas para assinatura de código empresarial. O kit de ferramentas eSigner inclui CodeSignTool, que é um utilitário de linha de comando para Assinatura de código EV certificados e é ideal para criar processos de assinatura automatizados em várias plataformas de Integração Contínua/Entrega Contínua (CI/CD), incluindo CircleCI. 

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.

Preparar os componentes do fluxo de trabalho (Assinatura de DLL de código .NET)

  1. Crie uma pasta .circleci

Em seu espaço de trabalho de assinatura de código, crie um pasta .circleci. Abaixo dele, crie um arquivo config.yml.

  1. Definir a versão do CI
version: 2.1
 
  1.  Invoque jobs por meio de fluxos de trabalho. Os fluxos de trabalho orquestram um conjunto de trabalhos a serem executados. Os trabalhos para este pipeline estão configurados abaixo

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

fluxos de trabalho:
 
  1. Escreva o nome do fluxo de trabalho.
  ponto Net:
 
  1. Dentro do fluxo de trabalho, você define os trabalhos que deseja executar.
 jobs: - construir - assinar: requer: - construir
 

Defina o estágio de construção

  1. Defina um trabalho a ser invocado posteriormente em um fluxo de trabalho.

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

empregos: construir:

 

  1. Crie uma variável de ambiente
  • As variáveis ​​de ambiente são usadas para tornar as amostras mais legíveis. Na captura de tela acima de um exemplo de fluxo de trabalho de assinatura, PROJECT_NAME, PROJECT_VERSION e DOTNET_VERSION foram opcionalmente omitidos. A assinatura ainda pode prosseguir mesmo com essas omissões.  
  ambiente: PROJECT_NAME: HelloWorld PROJECT_VERSION: 0.0.1 DOTNET_VERSION: 3.1 WORKSPACE: /home/circleci/project

 

  1.  Defina um executor do Docker: (https://circleci.com/docs/2.0/executor-types/)

    # Você pode especificar uma imagem do Dockerhub ou usar uma de nossas Imagens de Conveniência do Hub do Desenvolvedor do CircleCI.

 janela de encaixe: - imagem: mcr.microsoft.com/dotnet/sdk:3.1-bullseye

 

  1. Coloque o diretório de trabalho para o trabalho
  diretório_trabalho: /home/circleci/project

 

  1. Adicionar etapas ao trabalho

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

  passos:

 

  1.  Confira o código-fonte para que o fluxo de trabalho possa acessá-lo.
    - Confira

 

  1. Criar diretório de artefatos para armazenar arquivos de artefatos assinados e não assinados
    - run: name: Comando Criar diretório de artefatos: | mkdir -p ${WORKSPACE}/artifacts mkdir -p ${WORKSPACE}/packages

 

  1.  Crie um projeto ou solução dotnet e todas as suas dependências.
      - run: name: Build Dotnet Project Comando: dotnet build dotnet/${PROJECT_NAME}.csproj -c Release

 

  1. Copiar artefato para o diretório de artefatos
  • Neste fluxo de trabalho de exemplo de assinatura por escrito, vários tipos de projeto foram criados. É por isso que arquivos de diferentes tipos de projeto foram mantidos criando subpastas. Uma subpasta chamada 'dotnet' foi criada para projetos Dotnet. Na captura de tela de demonstração acima, não havia necessidade de criar uma subpasta chamada 'dotnet', então isso não foi incluído no script.
  - run: name: Comando Copiar Artefatos: | cp dotnet/bin/Release/netcoreapp${DOTNET_VERSION}/${PROJECT_NAME}-${PROJECT_VERSION}.dll ${WORKSPACE}/packages/HelloWorld.dll

 

  1. Persista o artefato no diretório de artefatos para assinatura
  - persist_to_workspace: root: . caminhos: - pacotes/*
 

Defina o estágio de assinatura

  1. Definir o trabalho de assinatura
 placa:

 

  1. Crie uma variável de ambiente
  • 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 CircleCI.
  • 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, algumas variáveis ​​opcionalmente não foram incluídas. A assinatura ainda pode prosseguir mesmo com essas omissões.  
    ambiente: ENVIRONMENT_NAME: PROD COMMAND: assinar WORKSPACE: /home/circleci/project

 

  1.     Coloque o diretório de trabalho para o trabalho no Circle-CI
 diretório_trabalho: /home/circleci/project

 

  1. Nome do artefato para assinatura
  • O valor 'artifact-name' é uma opção para vários projetos O parâmetro 'artifact-name' foi adicionado para que a mesma parte de assinatura possa ser usada para todos os tipos de projeto. Como o exemplo na captura de tela é baseado em um único projeto, não foi necessário incluí-lo.
    parâmetros: nome do artefato: tipo: string padrão: ''

 

  1. Defina um executor do docker:

 Para referência adicional, consulte: https://circleci.com/docs/2.0/executor-types/

       Você pode especificar uma imagem do Dockerhub ou usar uma de nossas imagens de conveniência do Developer Hub do CircleCI.

       Certifique-se de atualizar a tag de imagem do Docker abaixo para a versão openjdk do seu aplicativo.

       Uma lista de imagens de conveniência do CircleCI Docker disponíveis está disponível aqui: https://circleci.com/developer/images/image/cimg/openjdk

   janela de encaixe: - imagem: cimg/openjdk:17.0.3

 

  1. Adicionar etapas ao trabalho

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

    passos:

 

  1. Criar diretório de artefatos para armazenar arquivos de artefatos assinados e não assinados
  - run: name: Comando Criar diretório de artefatos: | mkdir -p ${WORKSPACE}/artifacts mkdir -p ${WORKSPACE}/packages

 

  1. Anexe ao Workspace para acessar o arquivo de artefato
   - attach_workspace: em: /home/circleci/project

 

  1. Habilitar o Docker para CodeSigner no Circle-CI
 - setup_remote_docker: name: Setup Remote Docker version: 19.03.13 docker_layer_caching: true

 

  1. Extrair a imagem do Docker do Codesigner do Github Registry
        - execute: nome: comando Docker Pull Image: | docker pull ghcr.io/sslcom/codesigner:mais recente docker pull alpine:3.4

 

  1. Escreva a etapa em que o artefato será assinado com o CodeSignTool.
 - executar: nome: Assinar Arquivo de Artefato comando: | 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 /<< parameters.artifact-name >> codesign-in:/codesign/packages docker run -i --rm --dns 8.8.8.8 --network host --volumes-from codesign-in --volumes-from codesign- out -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/packages/<< parameters.artifact-name >> -output_dir_path=/codesign/artifacts docker cp codesign-out:/codesign/artifacts/<< parameters.artifact-name >> ${ WORKSPACE}/artifacts/<< parameters.artifact-name >>

 

  1. Escreva a etapa para que seu artefato seja carregado de seu fluxo de trabalho, permitindo que você compartilhe dados entre trabalhos e armazene dados assim que um fluxo de trabalho for concluído
    - store_artifacts: name: Caminho de upload de arquivos assinados: /home/circleci/project/artifacts/<< parameters.artifact-name >> destino: << parameters.artifact-name >>
 

Crie um novo repositório na linha de comando

Copie os componentes do comando push do local do seu projeto em sua conta do GitHub

Inclua todos os componentes de comando push em seu editor

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

Configure um projeto no CircleCI usando o repositório integrado ao GitHub

Defina todas as variáveis ​​de ambiente

Enquanto o projeto estiver em execução, clique no botão Configurações do projeto seguido por Variáveis ​​de ambiente para definir as variáveis

Coloque os valores para cada variável

Clique na Adicionar variável de ambiente botão para adicionar os nomes e valores de todas as variáveis ​​necessárias para o projeto.

Aguarde a construção do projeto

Clique em Persistindo na área de trabalho

Aguarde brevemente até que o arquivo do espaço de trabalho seja carregado com sucesso.

Clique no botão assinar

Aguarde a configuração do Remote Docker

Pode levar mais de um minuto, dependendo do tamanho do arquivo

Aguarde até que os artefatos sejam assinados

Clique Artefatos aba

Se você clicar Artefatos, você poderá ver o arquivo cujo código foi assinado com sucesso. Você também será notificado pelo CircleCI sobre a assinatura do código bem-sucedida.

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

Amostra de Pipeline CI do Circle

Confira o exemplo de pipeline CircleCI que criamos em github.com/SSLcom/codesigner-circleci-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.