Delen via


Een agent uitvoeren met een zelfondertekend certificaat

Azure DevOps Server | Azure DevOps Server 2022

In dit artikel wordt uitgelegd hoe u een zelf-hostende agent kunt uitvoeren met een zelfondertekend certificaat voor Azure Pipelines en Azure DevOps Server.

Werken met een SSL-servercertificaat

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.

In het diagnostische logboek van de agent ziet u:

[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

De vorige beveiligingsfout kan erop wijzen dat de buildcomputer het servercertificaat dat u hebt gebruikt op uw Azure DevOps Server-hostcomputer niet vertrouwt. Zorg ervoor dat u uw zelfondertekende SSL-servercertificaat installeert in het certificaatarchief van het besturingssysteem.

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

U kunt eenvoudig controleren of het certificaat correct is geïnstalleerd door een paar opdrachten uit te voeren. Zolang de SSL-handshake correct is voltooid (zelfs als u een 401 voor de aanvraag krijgt), is de installatie geslaagd.

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)

Als u het certificaat om verschillende redenen niet kunt installeren in het certificaatarchief van uw computer (zoals u niet over de juiste machtigingen beschikt of als u zich op een aangepaste Linux-machine bevindt), is er een andere optie. De agentversie 2.125.0 of hoger kan een validatiefout voor ssl-servercertificaten negeren.

Belangrijk

We raden u niet aan om fouten bij de validatie van SSL-certificaten te negeren. Het is niet veilig. We raden u ten zeerste aan het certificaat in de certificaatopslag van uw apparaat te installeren.

Geef --sslskipcertvalidation door tijdens de agentconfiguratie.

./config.cmd/sh --sslskipcertvalidation

Notitie

Als u de --sslskipcertvalidation vlag wilt gebruiken in Linux en macOS, moet de libcurl bibliotheek op uw Linux- of macOS-computer worden gebouwd met OpenSSL.

Probleem: De opdracht Bronnen ophalen van Git mislukt met een SSL-certificaat (alleen Windows-agent)

We verzenden opdrachtregel Git als onderdeel van de Windows-agent en gebruiken deze kopie van Git voor alle Git-gerelateerde bewerkingen. Wanneer u een zelfondertekend SSL-certificaat voor uw on-premises Azure DevOps Server-computer hebt, configureert u de verzonden Git om het zelfondertekende SSL-certificaat toe te staan.

Er zijn twee manieren om dit probleem op te lossen:

  • Stel het volgende git config in op globaal niveau door de agent als gebruiker uit te voeren.

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

    Notitie

    Het instellen van een systeemniveau git config is niet betrouwbaar in Windows. Het systeembestand .gitconfig wordt opgeslagen met de kopie van Git die we hebben verpakt. De verpakte Git wordt vervangen telkens wanneer de agent wordt bijgewerkt naar een nieuwe versie.

  • Stel Git in om SChannel te gebruiken tijdens de configuratie wanneer u een agent versie 2.129.0 of later gebruikt. Geef --gituseschannel door tijdens de configuratie van de agent.

    ./config.cmd --gituseschannel
    

    Notitie

    Git SChannel heeft meer beperkende vereisten voor uw zelfondertekende certificaat. Een zelfondertekend certificaat dat wordt gegenereerd door een IIS-opdracht (Internet Information Services) of PowerShell-opdracht, is mogelijk niet compatibel met SChannel.

Werken met een SSL-clientcertificaat

IIS heeft een SSL-instelling die vereist dat alle binnenkomende aanvragen naar Azure DevOps Server een clientcertificaat en de reguliere referentie moeten presenteren.

Wanneer deze IIS SSL-instelling is ingeschakeld, moet u versie 2.125.0 of hoger gebruiken en de volgende extra stappen uitvoeren om de buildcomputer te configureren op uw Azure DevOps-server.

  1. Bereid alle vereiste certificaatgegevens voor:

    • Een CA-certificaat (certificeringsinstantie) in .pem indeling: Dit bestand moet de openbare sleutel en handtekening van het CA-certificaat bevatten. U moet het basis-CA-certificaat en al uw tussenliggende CA-certificaten in één .pem bestand plaatsen.
    • Een clientcertificaat in .pem indeling: dit bestand moet de openbare sleutel en handtekening van het clientcertificaat bevatten.
    • Een persoonlijke sleutel voor een clientcertificaat in .pem indeling: dit bestand mag alleen de persoonlijke sleutel van het clientcertificaat bevatten.
    • Een archiefpakket voor clientcertificaten in .pfx indeling: dit bestand moet de handtekening, de openbare sleutel en de persoonlijke sleutel van het clientcertificaat bevatten.
    • Wachtwoord: gebruik hetzelfde wachtwoord om de persoonlijke sleutel van het clientcertificaat en het archiefpakket van het clientcertificaat te beveiligen, omdat ze beide de persoonlijke sleutel van het clientcertificaat hebben.
  2. Installeer een CA-certificaat in het certificaatarchief van de machine:

    • Linux: OpenSSL-certificaatarchief
    • macOS: Systeem- of gebruikerssleutelhanger
    • Windows: Windows-certificaatopslag
  3. Geef --sslcacert, --sslclientcert, --sslclientcertkeydoor. --sslclientcertarchiveen --sslclientcertpassword tijdens de agentconfiguratie.

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

    Het wachtwoord voor de persoonlijke sleutel van uw clientcertificaat wordt veilig opgeslagen op elk platform.

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

Vertrouwensrelatie van basiscertificeringsinstantie controleren

De buildagent maakt gebruik van Node.js, die afhankelijk is van het eigen certificaatarchief, dat is afgeleid van de vertrouwde basiscertificaten van Mozilla. Het Node.js archief van de certificeringsinstantie moet elk basiscertificaat vertrouwen dat u gebruikt voor beveiligde communicatie. Anders ontvangt u mogelijk de volgende fouten nadat u een certificaat hebt bijgewerkt op de Azure DevOps Server-computer:

  • Kan lokaal certificaat van uitgever niet ophalen
  • "SELF_SIGNED_CERT_IN_CHAIN"
  • "Kan het eerste certificaat niet verifiëren"

U kunt de tls.rootCertificates matrix gebruiken om vertrouwde basis-CA's te verifiëren die u gebruikt om TLS/SSL-verbindingen te verifiëren.

# 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" 

Met de NODE_EXTRA_CA_CERTS omgevingsvariabele, geïntroduceerd in Node v7.3.0, kunt u een bestand opgeven dat een of meer CA-certificaten bevat die door Node worden vertrouwd (naast de standaardbundel). NODE_EXTRA_CA_CERTS voegt toe aan de vertrouwenswinkel.

  1. Exporteer op uw server of CA de basiscertificaten (en eventueel tussenliggende indien nodig) als een PEM-gecodeerd bestand. Deze indeling is een tekstbestand met -----BEGIN CERTIFICATE----- en Base64-gegevens. Zorg ervoor dat u PEM met Base64-codering gebruikt en niet met DER. (Op Windows kunnen .cer-bestanden zowel het één als het ander zijn; u kunt ze naar .pem hernoemen om verwarring te voorkomen. Het bestand kan elke extensie hebben, maar .pem of .crt is standaard.)

    Als u meerdere interne CA's (een keten) hebt, kunt u deze samenvoegen in één bestand. Knooppunt leest alle certificaten in dat bestand.

  2. Maak de PEM beschikbaar op de buildagent door deze in een bekend pad te plaatsen (bijvoorbeeld C:\certs\CorpRootCA.pem or /etc/ssl/certs/CorpRootCA.pem).

  3. Stel een omgevingsvariabele van het besturingssysteem in, NODE_EXTRA_CA_CERTSdie verwijst naar het PEM-bestand. U kunt bijvoorbeeld PowerShell in Windows gebruiken:

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

Meer informatie over de ondersteuning van agentclient-certificaten.