Exécuter l’agent avec un certificat auto-signé

Azure DevOps Server 2022 – Azure DevOps Server 2019

Cette rubrique explique comment exécuter un agent auto-hébergé avec un certificat auto-signé.

Remarque

Cet article s’applique aux versions 2.x et ultérieures de l’agent.

Utiliser le certificat de serveur 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.

Le journal de diagnostic de l’agent affiche :

[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

Cette erreur peut indiquer que le certificat de serveur que vous avez utilisé sur votre serveur TFS n’est pas approuvé par l’ordinateur de build. Veillez à installer votre certificat de serveur SSL auto-signé dans le magasin de certificats du système d’exploitation.

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

Vous pouvez facilement vérifier si le certificat a été installé correctement en exécutant quelques commandes. Vous devriez être bon tant que l’établissement d'une liaison SSL s’est terminé correctement, même si vous obtenez un 401 pour la requête.

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)

Si vous ne pouvez pas installer le certificat dans le magasin de certificats de votre ordinateur pour diverses raisons, par exemple : vous n’avez pas d’autorisation ou vous êtes sur une machine Linux personnalisée. L’agent version 2.125.0 ou ultérieure a la possibilité d’ignorer l’erreur de validation du certificat de serveur SSL.

Important

Cela n’est pas sécurisé et non recommandé, nous vous suggérons vivement d’installer le certificat dans votre magasin de certificats de machine.

Passer --sslskipcertvalidation pendant la configuration de l’agent

./config.cmd/sh --sslskipcertvalidation

Notes

Il existe une limitation de l’utilisation de cet indicateur sur Linux et macOS
La bibliothèque libcurl sur votre ordinateur Linux ou macOS doit être créée avec OpenSSL, plus de détails

Les sources Git échouent avec le problème de certificat SSL (agent Windows uniquement)

Nous envoyons Git en ligne de commande dans le cadre de l’agent Windows. Nous utilisons cette copie de Git pour toutes les opérations liées à Git. Lorsque vous disposez d’un certificat SSL auto-signé pour votre serveur TFS local, veillez à configurer Git que nous avons expédié pour autoriser ce certificat SSL auto-signé. Il existe 2 approches pour résoudre le problème.

  1. Définissez la configuration Git suivante au niveau global par l’utilisateur exécuté par l’agent.

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

    Notes

    La définition de la configuration Git au niveau du système n’est pas fiable sur Windows. Le fichier .gitconfig système est stocké avec la copie de Git que nous avons empaquetée, qui sera remplacée chaque fois que l’agent est mis à niveau vers une nouvelle version.

  2. Permettre à git d’utiliser SChannel lors de la configuration avec un agent de version 2.129.0 ou supérieure. Passer --gituseschannel lors de la configuration de l’agent.

    ./config.cmd --gituseschannel
    

    Remarque

    Git SChannel a une exigence plus restreinte pour votre certificat auto-signé. Le certificat auto-signé généré par IIS ou la commande PowerShell peut ne pas être compatible avec SChannel.

Utiliser le certificat de serveur SSL

IIS possède un paramètre SSL qui exige que toutes les demandes entrantes à Azure DevOps Server ou TFS doivent présenter un certificat client en plus des identifiants habituels.

Lorsque ce paramètre SSL IIS est activé, vous devez utiliser un agent de version 2.125.0 ou supérieure et suivre ces étapes supplémentaires afin de configurer la machine de build contre votre serveur Azure DevOps ou TFS.

  • Préparer toutes les informations de certificat requises

    • Certificat(s) de l’AC au format .pem (Cela devrait contenir la clé publique et la signature du certificat de l’AC, vous devez mettre le certificat racine de l’AC et tous vos certificats intermédiaires de l’AC dans un fichier .pem)
    • Certificat client au format .pem (Cela devrait contenir la clé publique et la signature du certificat client)
    • Clé privée du certificat client au format .pem (Cela devrait contenir uniquement la clé privée du certificat client)
    • Archive du certificat client au format .pfx (Cela devrait contenir la signature, la clé publique et la clé privée du certificat client)
    • Utilisez SAME le mot de passe pour protéger la clé privée du certificat client et le package d’archivage de certificat client, car ils ont tous deux la clé privée du certificat client
  • Installer des certificats d’autorité de certification dans le magasin de certificats de l’ordinateur

    • Linux : Magasin de certificats OpenSSL
    • macOS : Trousseau système ou utilisateur
    • Windows : Magasin de certificats Windows
  • Passez --sslcacert, --sslclientcert, --sslclientcertkey. --sslclientcertarchive et --sslclientcertpassword pendant la configuration de l’agent.

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

    Votre mot de passe de clé privée de certificat client est stocké en toute sécurité sur chaque plateforme.

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

En savoir plus sur la prise en charge des certificats clients de l’agent.