Executar o agente com um certificado autoassinado

Azure DevOps Server 2022 – Azure DevOps Server 2019

Este tópico explica como executar um agente auto-hospedado com um certificado autoassinado.

Observação

Este artigo se aplica às versões do agente 2.x e mais recentes.

Trabalhar com o certificado do 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

Esse erro pode indicar que o certificado do servidor usado no servidor TFS não é confiável para o computador de build. Instale o certificado do 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 foi instalado corretamente executando alguns comandos. Tudo estará bem se o handshake SSL for concluído corretamente, mesmo que você obtenha um 401 para a solicitação.

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 não conseguir instalar o certificado no repositório de certificados do computador, os motivos poderão ser: você não tem permissão ou está em um computador Linux personalizado. A versão do agente 2.125.0 ou superior ignora o erro de validação de certificado do servidor SSL.

Importante

Isso não é seguro e não é recomendado. Sugerimos que você instale o certificado no repositório de certificados do computador.

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

./config.cmd/sh --sslskipcertvalidation

Observação

Há um limite de uso desse sinalizador no Linux e no macOS
A biblioteca libcurl no computador Linux ou macOS precisa ser criada com OpenSSL. Saiba mais.

As fontes de obtenção do Git falham com o problema de certificado SSL (somente agente do Windows)

Enviamos o Git de linha de comando como parte do agente do Windows. Usamos essa cópia do Git para todas as operações relacionadas a ele. Quando você tiver um certificado SSL autoassinado para o servidor TFS local, configure o Git que enviamos para permitir esse certificado SSL autoassinado. Há duas abordagens para resolver o problema.

  1. Defina a configuração do Git a seguir no nível global executando o agente como usuário.

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

    Observação

    Definir a configuração do Git no nível do sistema não é confiável no Windows. O arquivo .gitconfig do sistema é armazenado com a cópia do Git que incluímos no pacote, a qual será substituída sempre que o agente for atualizado para uma nova versão.

  2. Habilitar o git para uso SChannel durante a configuração com 2.129.0 ou versão superior do agente Pass --gituseschannel durante a configuração do agente

    ./config.cmd --gituseschannel
    

    Observação

    O Git SChannel tem requisitos mais restritos para o certificado autoassinado. Certificado autoidentificado gerado pelo comando IIS ou PowerShell pode não ser possível com SChannel.

Trabalhar com o certificado de cliente SSL

O IIS tem uma configuração SSL que requer que todas as solicitações de entrada para o Servidor de DevOps do Azure ou o TFS deve apresentar certificado de cliente além da credencial regular.

Quando essa configuração SSL do IIS estiver habilitada, você precisará usar 2.125.0 ou a versão do agente acima e seguir estas etapas extras para configurar a máquina de compilação em seu Servidor de DevOps ou TFS do Azure.

  • Preparar todas as informações de certificado necessárias

    • Certificados de autoridade de certificação no .pem formato (isso 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 seus certificados de autoridade de certificação intermediários em um arquivo .pem)
    • Certificado de cliente no formato .pem (deve conter a chave pública e a assinatura do certificado do cliente)
    • Chave privada do certificado do cliente no formato .pem (deve conter apenas a chave privada do certificado do cliente)
    • Pacote de arquivamento de certificado de cliente no formato .pfx (deve conter a assinatura, a chave pública e a chave privada do certificado do cliente)
    • Use a senha SAME 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
  • Instalar certificados de AC no repositório de certificados do computador

    • Linux: repositório de certificados OpenSSL
    • macOS: keychain do sistema ou do usuário
    • Windows: repositório de certificados do Windows
  • Passar --sslcacert, --sslclientcert e --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
    

Saiba mais sobre suporte ao certificado do cliente do agente.