Compartilhar via


Executar um agente com um certificado autoassinado

Azure DevOps Server | Servidor Azure DevOps 2022

Este artigo explica como você pode executar um agente auto-hospedado com um certificado autoassinado para o Azure Pipelines e o Azure DevOps Server.

Trabalhar com um certificado de servidor SSL

Enter server URL > https://corp.tfs.com/tfs
Enter authentication type (press enter for Integrated) >
Connecting to server ...
An error occurred while sending the request.

O log de diagnóstico do agente mostra:

[2017-11-06 20:55:33Z ERR  AgentServer] System.Net.Http.HttpRequestException: An error occurred while sending the request. ---> System.Net.Http.WinHttpException: A security error occurred

O erro de segurança anterior pode indicar que o computador de build não confia no certificado do servidor que você usou no computador host do Servidor Devops do Azure. Instale seu certificado de servidor SSL autoassinado no repositório de certificados do sistema operacional.

Windows: Windows certificate store
Linux: OpenSSL certificate store
macOS: OpenSSL certificate store for agent version 2.124.0 or below
       Keychain for agent version 2.125.0 or above

Você pode verificar facilmente se o certificado está instalado corretamente executando alguns comandos. Desde que o handshake SSL seja concluído corretamente (mesmo que você obtenha um 401 para a solicitação), a instalação foi bem-sucedida.

Windows: PowerShell Invoke-WebRequest -Uri https://corp.tfs.com/tfs -UseDefaultCredentials 
Linux: curl -v https://corp.tfs.com/tfs 
macOS: curl -v https://corp.tfs.com/tfs (agent version 2.124.0 or below, curl needs to be built for OpenSSL)
       curl -v https://corp.tfs.com/tfs (agent version 2.125.0 or above, curl needs to be built for Secure Transport)

Se você não conseguir instalar com êxito o certificado no repositório de certificados do computador por vários motivos (como se não tivesse as permissões corretas ou estivesse em um computador Linux personalizado), há outra opção. O agente versão 2.125.0 ou superior tem a capacidade de ignorar um erro de validação de certificado do servidor SSL.

Importante

Não recomendamos que você ignore erros de validação de certificado do servidor SSL. Não é seguro. É altamente recomendável que você instale o certificado no repositório de certificados do computador.

Passe --sslskipcertvalidation durante a configuração do agente:

./config.cmd/sh --sslskipcertvalidation

Observação

Para usar o --sslskipcertvalidation sinalizador no Linux e no macOS, a libcurl biblioteca em seu computador Linux ou macOS deve ser construída com OpenSSL.

Problema: o comando Obter fontes do Git falha com um certificado SSL (somente agente do Windows)

Enviamos o Git de linha de comando como parte do agente do Windows e usamos essa cópia do Git para todas as operações relacionadas ao Git. Quando você tiver um certificado SSL autoassinado para seu computador do Azure DevOps Server local, configure o Git enviado para permitir o certificado SSL autoassinado.

Há duas maneiras de resolver esse problema:

  • Defina o seguinte git config em um nível global pela execução do agente como usuário.

    git config --global http."https://tfs.com/".sslCAInfo certificate.pem
    

    Observação

    A configuração de um nível git config de sistema não é confiável no Windows. O arquivo do sistema .gitconfig está armazenado junto com a versão do Git que empacotamos. O Git do pacote é substituído sempre que o agente é atualizado para uma nova versão.

  • Habilite o git para usar SChannel durante a configuração quando você estiver usando um agente de versão 2.129.0 ou posterior. Insira --gituseschannel durante a configuração do agente.

    ./config.cmd --gituseschannel
    

    Observação

    O Git SChannel tem requisitos mais restritivos para seu certificado autoassinado. Um certificado autoassinado gerado por um comando do IIS (Serviços de Informações da Internet) ou do PowerShell pode não ser compatível com SChannel.

Trabalhar com um certificado de cliente SSL

O IIS tem uma configuração de SSL que exige que todas as solicitações de entrada para o Servidor do Azure DevOps apresentem um certificado de cliente e a credencial regular.

Quando essa configuração de SSL do IIS estiver habilitada, você precisará usar a versão 2.125.0 ou mais recente e executar as seguintes etapas extras para configurar o computador de build no servidor do Azure DevOps.

  1. Prepare todas as informações de certificado necessárias:

    • Um certificado de autoridade de certificação (CA) em formato .pem: este arquivo deve conter a chave pública e a assinatura do certificado de autoridade de certificação. Você precisa colocar o certificado de autoridade de certificação raiz e todos os certificados de autoridade de certificação intermediários em um arquivo .pem.
    • Um certificado do cliente em .pem formato: esse arquivo deve conter a chave pública e a assinatura do certificado do cliente.
    • Uma chave privada de certificado do cliente no .pem formato: esse arquivo deve conter apenas a chave privada do certificado do cliente.
    • Um pacote de arquivamento de certificado do cliente em .pfx formato: esse arquivo deve conter a assinatura, a chave pública e a chave privada do certificado do cliente.
    • Senha: use a mesma senha para proteger a chave privada do certificado do cliente e o pacote de arquivamento do certificado do cliente, pois ambos têm a chave privada do certificado do cliente.
  2. Instale um certificado CA no armazenamento de certificados do computador.

    • Linux: Repositório de certificados OpenSSL
    • macOS: conjunto de chaves do sistema ou do usuário
    • Windows: Repositório de certificados do Windows
  3. Passe --sslcacert, --sslclientcert, --sslclientcertkey. --sslclientcertarchive, e --sslclientcertpassword durante a configuração do agente.

    .\config.cmd/sh --sslcacert ca.pem --sslclientcert clientcert.pem --sslclientcertkey clientcert-key-pass.pem --sslclientcertarchive clientcert-archive.pfx --sslclientcertpassword "mypassword"
    

    A senha da chave privada do certificado do cliente é armazenada com segurança em cada plataforma.

    Linux: Encrypted with a symmetric key based on the machine ID
    macOS: macOS Keychain
    Windows: Windows Credential Store
    

Verificar a confiança da autoridade de certificação raiz

O agente de build usa Node.js, que depende de seu próprio repositório de certificados, que é derivado dos certificados raiz confiáveis da Mozilla. O repositório de autoridades de certificação Node.js deve confiar em qualquer certificado raiz que você usa para comunicação segura. Caso contrário, você poderá receber os seguintes erros depois de atualizar um certificado no computador do Servidor do Azure DevOps:

  • "não é possível obter o certificado do emissor local"
  • "CERTIFICADO_AUTORASSINADO_NA_CADEIA"
  • "não é possível verificar o primeiro certificado"

Você pode usar a tls.rootCertificates matriz para verificar as CAs raiz confiáveis que você usa para verificar conexões TLS/SSL.

# Sample script to extract Node.js root certificates using Node.js.  
node -e ' 
const tls = require("tls"); 
console.log(tls.rootCertificates.join("\n")); 
' > "$ROOT_CERTS_FILE" 

A NODE_EXTRA_CA_CERTS variável de ambiente, introduzida no Node v7.3.0, permite que você especifique um arquivo que contenha um ou mais certificados de AC que o Node confia (além do pacote padrão). NODE_EXTRA_CA_CERTS adiciona ao repositório de confiança.

  1. No servidor ou na AC, exporte os certificados raiz (e qualquer intermediário, se necessário) como um arquivo codificado em PEM. Esse formato é um arquivo de texto com -----BEGIN CERTIFICATE----- e dados Base64. Certifique-se de usar o PEM codificado em Base64 e não o DER. (No Windows, .cer arquivos podem ser ou não; você pode renomear para .pem para evitar confusão. O arquivo pode realmente ter qualquer extensão, mas .pem ou .crt é standard.)

    Se você tiver várias autoridades certificadoras internas (uma cadeia), poderá concatená-las em um único arquivo. O nó lê todos os certificados nesse arquivo.

  2. Disponibilize o PEM no agente de build colocando-o em um caminho conhecido (por exemplo, C:\certs\CorpRootCA.pem or /etc/ssl/certs/CorpRootCA.pem).

  3. Defina uma variável de ambiente do sistema operacional, NODE_EXTRA_CA_CERTSque aponta para o arquivo PEM. Por exemplo, você pode usar o PowerShell no Windows:

[Environment]::SetEnvironmentVariable("NODE_EXTRA_CA_CERTS", "C:\certs\CorpRootCA.pem", "Machine")

Saiba mais sobre o suporte ao certificado de cliente do agente.