Execute 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.

Nota

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

Trabalhar com 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

Esse erro pode indicar que o certificado do servidor usado no servidor TFS não é confiável pela máquina de compilação. Certifique-se de instalar seu certificado de servidor ssl auto-assinado 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 foi instalado corretamente executando alguns comandos. Você deve ser bom, desde que o handshake SSL termine 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, de alguma forma, você não conseguir instalar o certificado no armazenamento de certificados da sua máquina devido a vários motivos, como: você não tem permissão ou está em uma máquina Linux personalizada. A versão do agente 2.125.0 ou superior tem a capacidade de ignorar o erro de validação do certificado do servidor SSL.

Importante

Isso não é seguro e não é recomendado, sugerimos que você instale o certificado em seu armazenamento de certificados de máquina.

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

./config.cmd/sh --sslskipcertvalidation

Nota

Há limitação de usar este sinalizador no Linux e macOS
A biblioteca libcurl em sua máquina Linux ou macOS precisa ser construída com OpenSSL, Mais detalhes

Git get sources falha com problema de certificado SSL (somente agente do Windows)

Enviamos o Git de linha de comando como parte do agente do Windows. Usamos esta cópia do Git para todas as operações relacionadas ao Git. Quando você tiver um certificado SSL autoassinado para seu servidor TFS local, certifique-se de configurar o Git que enviamos para permitir esse certificado SSL autoassinado. Existem 2 abordagens para resolver o problema.

  1. Defina a seguinte configuração do git em nível global pela execução do agente como usuário.

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

    Nota

    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 empacotamos, que 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 o agente de versão 2.129.0 ou superior Pass --gituseschannel durante a configuração do agente

    ./config.cmd --gituseschannel
    

    Nota

    O Git SChannel tem requisitos mais restritos para o seu certificado autoassinado. Certificado auto-singed gerado pelo comando IIS ou PowerShell pode não ser capaz com SChannel.

Trabalhar com certificado de cliente SSL

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

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

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

    • Certificado(s) de autoridade de certificação em .pem formato (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 .pem arquivo)
    • Certificado de cliente em .pem formato (deve conter a chave pública e a assinatura do certificado de cliente)
    • Chave privada do certificado do cliente no .pem formato (deve conter apenas a chave privada do certificado do cliente)
    • Pacote de arquivo morto de certificado de cliente em .pfx formato (deve conter a assinatura, a chave pública e a chave privada do certificado de cliente)
    • Use SAME a senha para proteger a chave privada do certificado do cliente e o pacote de arquivamento do certificado do cliente, já que ambos têm a chave privada do certificado do cliente
  • Instalar certificado(s) de autoridade de certificação no armazenamento de certificados da máquina

    • Linux: armazenamento de certificados OpenSSL
    • macOS: Sistema ou Porta-chaves do usuário
    • Windows: armazenamento de certificados do Windows
  • 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
    

Saiba mais sobre o suporte a certificados de cliente de agente.