Partilhar via


Executar um agente com um certificado autoassinado

Azure DevOps Server | Azure DevOps Server 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 a máquina de compilação não confia no certificado do servidor que você usou na máquina host do Azure Devops Server. Certifique-se de instalar seu certificado de servidor SSL autoassinado no armazenamento 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 termine 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 armazenamento de certificados da sua máquina por vários motivos (como não ter as permissões corretas ou estar em uma máquina Linux personalizada), 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 de servidor SSL.

Importante

Não recomendamos que ignore os erros de validação do certificado do servidor SSL. Não é seguro. Recomendamos vivamente que instale o certificado no repositório de certificados do sistema.

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

./config.cmd/sh --sslskipcertvalidation

Observação

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

Problema: o comando Git get sources 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 sua máquina do Azure DevOps Server local, configure o Git enviado para permitir o certificado SSL autoassinado.

Existem duas formas de resolver este 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

    Definir um nível git config de sistema não é confiável no Windows. O arquivo de sistema .gitconfig é armazenado com a cópia do Git que empacotamos. O Git empacotado é 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. Passe --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 SSL que requer que todas as solicitações de entrada para o Azure DevOps Server apresentem um certificado de cliente e a credencial regular.

Quando essa configuração SSL do IIS estiver habilitada, você precisará usar a versão 2.125.0 ou mais recente e executar as etapas adicionais a seguir para configurar a máquina de compilação em seu Servidor de DevOps do Azure.

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

    • Um certificado de autoridade de certificação (CA) no .pem formato: este arquivo deve conter a chave pública e a assinatura do certificado da autoridade de certificação. Você precisa colocar o certificado CA raiz e todos os certificados CA intermediários em um .pem arquivo.
    • Um certificado de cliente em .pem formato: Este arquivo deve conter a chave pública e a assinatura do certificado do cliente.
    • Uma chave privada de certificado de cliente em .pem formato: Este arquivo deve conter apenas a chave privada do certificado de cliente.
    • Um pacote de arquivo de certificado de cliente em formato .pfx: Este 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, porque ambos têm a chave privada do certificado do cliente.
  2. Instale um certificado CA no repositório de certificados da máquina.

    • Linux: armazenamento de certificados OpenSSL
    • macOS: Porta-chaves do sistema ou do usuário
    • Windows: armazenamento 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 compilação usa Node.js, que depende do seu próprio repositório de certificados, derivado dos certificados raíz confiáveis da Mozilla. O armazenamento de autoridade de certificação do Node.js deve confiar em qualquer certificado raiz que utilizes para comunicação segura. Caso contrário, você poderá receber os seguintes erros depois de atualizar um certificado na máquina do Azure DevOps Server:

  • "Não é possível obter o certificado de emissor local"
  • "SELF_SIGNED_CERT_IN_CHAIN"
  • "Não é possível verificar o primeiro certificado"

Você pode usar a tls.rootCertificates matriz para verificar 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 especificar um arquivo que contém um ou mais certificados de CA nos quais o Node confia (além do pacote padrão). NODE_EXTRA_CA_CERTS Acrescenta ao repositório de confiança.

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

    Se tiveres várias autoridades de certificação internas (uma cadeia), poderás concatená-las num único ficheiro. O Node lê todos os certificados nesse ficheiro.

  2. Disponibilize o PEM no agente de compilação 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_CERTS, que aponte 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 a certificados de cliente de agente.