Freigeben über


Einen Agent mit einem selbstsignierten Zertifikat ausführen

Azure DevOps Server | Azure DevOps Server 2022

In diesem Artikel wird erläutert, wie Sie einen selbst gehosteten Agent mit einem selbstsignierten Zertifikat für Azure Pipelines und Azure DevOps Server ausführen können.

Arbeiten mit einem SSL-Serverzertifikat

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.

Das Agent-Diagnoseprotokoll zeigt Folgendes an:

[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

Der vorherige Sicherheitsfehler weist möglicherweise darauf hin, dass der Buildcomputer dem Serverzertifikat, das Sie auf Ihrem Azure Devops Server-Hostcomputer verwendet haben, nicht vertraut. Stellen Sie sicher, dass Sie Ihr selbstsigniertes SSL-Serverzertifikat im Zertifikatspeicher des Betriebssystems installieren.

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

Sie können ganz einfach überprüfen, ob das Zertifikat ordnungsgemäß installiert ist, indem Sie einige Befehle ausführen. Solange der SSL-Handshake ordnungsgemäß abgeschlossen ist (auch wenn Sie eine 401 für die Anforderung erhalten), war die Installation erfolgreich.

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)

Wenn Sie das Zertifikat aus verschiedenen Gründen nicht erfolgreich im Zertifikatspeicher Ihres Computers installieren können (z. B. nicht über die richtigen Berechtigungen oder auf einem angepassten Linux-Computer), gibt es eine weitere Option. Die Agentversion 2.125.0 oder höher hat die Möglichkeit, einen SSL-Serverzertifikatüberprüfungsfehler zu ignorieren.

Von Bedeutung

Es wird nicht empfohlen, SSL-Serverzertifikatüberprüfungsfehler zu ignorieren. Es ist nicht sicher. Es wird dringend empfohlen, das Zertifikat in Ihrem Computerzertifikatspeicher zu installieren.

Übergeben Sie --sslskipcertvalidation während der Agentenkonfiguration:

./config.cmd/sh --sslskipcertvalidation

Hinweis

Um die --sslskipcertvalidation Kennzeichnung unter Linux und macOS zu verwenden, muss die libcurl Bibliothek auf Ihrem Linux- oder macOS-Computer mit OpenSSL erstellt werden.

Problem: Der Befehl "Git get sources" schlägt mit einem SSL-Zertifikat fehl (nur Windows-Agent)

Wir versenden Git als Teil des Windows-Agents und verwenden diese Kopie von Git für alle Git-bezogenen Vorgänge. Wenn Sie über ein selbstsigniertes SSL-Zertifikat für Ihren lokalen Azure DevOps Server-Computer verfügen, konfigurieren Sie das ausgelieferte Git so, dass es das selbstsignierte SSL-Zertifikat zulässt.

Es gibt zwei Möglichkeiten, dieses Problem zu lösen:

  • Legen Sie das Folgende git config auf globaler Ebene durch den Benutzer, unter dem der Agent läuft, fest.

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

    Hinweis

    Das Festlegen einer Systemebene git config ist unter Windows nicht zuverlässig. Die Systemdatei .gitconfig wird mit der Kopie von Git gespeichert, die wir verpackt haben. Das verpackte Git wird jedes Mal ersetzt, wenn der Agent auf eine neue Version aktualisiert wird.

  • Aktivieren Sie git für die Verwendung SChannel während der Konfiguration, wenn Sie einen Agent der Version 2.129.0 oder höher verwenden. Übergeben Sie --gituseschannel während der Agentkonfiguration.

    ./config.cmd --gituseschannel
    

    Hinweis

    Git SChannel verfügt über restriktivere Anforderungen für Ihr selbstsigniertes Zertifikat. Ein selbstsigniertes Zertifikat, das von einem Iis- oder PowerShell-Befehl generiert wird, ist möglicherweise nicht kompatibel mit SChannel.

Arbeiten mit einem SSL-Clientzertifikat

IIS verfügt über eine SSL-Einstellung, die erfordert, dass alle eingehenden Anforderungen an Azure DevOps Server ein Clientzertifikat und die regulären Anmeldeinformationen darstellen müssen.

Wenn diese IIS-SSL-Einstellung aktiviert ist, müssen Sie Version 2.125.0 oder höher verwenden und die folgenden zusätzlichen Schritte ausführen, um den Buildcomputer für Ihren Azure DevOps Server zu konfigurieren.

  1. Vorbereiten aller erforderlichen Zertifikatinformationen:

    • Ein Zertifizierungsstelle-Zertifikat im .pem Format: Diese Datei sollte den öffentlichen Schlüssel und die Signatur des Zertifizierungsstellenzertifikats enthalten. Sie müssen das Zertifikat der Stammzertifizierungsstelle und alle Zwischenzertifizierungsstellenzertifikate in eine .pem Datei einfügen.
    • Ein Clientzertifikat im .pem Format: Diese Datei sollte den öffentlichen Schlüssel und die Signatur des Clientzertifikats enthalten.
    • Ein privater Clientzertifikatschlüssel im .pem Format: Diese Datei sollte nur den privaten Schlüssel des Clientzertifikats enthalten.
    • Ein Clientzertifikatarchivpaket im .pfx Format: Diese Datei sollte die Signatur, den öffentlichen Schlüssel und den privaten Schlüssel des Clientzertifikats enthalten.
    • Kennwort: Verwenden Sie dasselbe Kennwort, um den privaten Clientzertifikatschlüssel und das Clientzertifikatarchivpaket zu schützen, da beide über den privaten Schlüssel des Clientzertifikats verfügen.
  2. Installiere ein Zertifizierungsstellenzertifikat im Zertifikatspeicher des Computers.

    • Linux: OpenSSL-Zertifikatspeicher
    • macOS: System- oder Benutzerschlüsselbund
    • Windows: Windows-Zertifikatspeicher
  3. Übermitteln --sslcacert, --sslclientcert, --sslclientcertkey. --sslclientcertarchive und --sslclientcertpassword während der Agentkonfiguration.

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

    Ihr Kennwort für private Schlüssel des Clientzertifikats wird sicher auf jeder Plattform gespeichert.

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

Überprüfen der Vertrauensstellung der Stammzertifizierungsstelle

Der Build-Agent verwendet Node.js, der auf seinem eigenen Zertifikatspeicher basiert, der von Mozillas vertrauenswürdigen Stammzertifikaten abgeleitet wird. Der Node.js Zertifizierungsstellenspeicher muss allen Stammzertifikaten vertrauen, die Sie für die sichere Kommunikation verwenden. Andernfalls erhalten Sie möglicherweise die folgenden Fehler, nachdem Sie ein Zertifikat auf dem Azure DevOps Server-Computer aktualisiert haben:

  • "Lokales Ausstellerzertifikat kann nicht abgerufen werden"
  • "SELF_SIGNED_CERT_IN_CHAIN (Selbstsigniertes Zertifikat in der Kette)"
  • "Das erste Zertifikat kann nicht überprüft werden"

Sie können das tls.rootCertificates Array verwenden, um vertrauenswürdige Stamm-CAs zu überprüfen, die Sie zum Überprüfen von TLS-/SSL-Verbindungen verwenden.

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

Mit der NODE_EXTRA_CA_CERTS in Node v7.3.0 eingeführten Umgebungsvariable können Sie eine Datei angeben, die mindestens ein Zertifizierungsstellenzertifikat enthält, dem Node vertraut (zusätzlich zum Standardbundle). NODE_EXTRA_CA_CERTS fügt an den Vertrauensspeicher an.

  1. Exportieren Sie auf Dem Server oder der Zertifizierungsstelle die Stammzertifikate (und ggf. alle Zwischenzertifikate) als PEM-codierte Datei. Dieses Format ist eine Textdatei mit -----BEGIN CERTIFICATE----- und Base64-Daten. Stellen Sie sicher, dass Sie Base64-codierte PEM und nicht DER verwenden. (Unter Windows können .cer Dateien beide sein. Sie können in .pem umbenennen, um Verwirrung zu vermeiden. Die Datei kann tatsächlich eine beliebige Erweiterung haben, aber .pem oder .crt ist standard.)

    Wenn Sie über mehrere interne CAs (eine Kette) verfügen, können Sie sie in eine Datei verketten. Der Knoten liest alle Zertifikate in dieser Datei.

  2. Machen Sie das PEM für den Build-Agent verfügbar, indem Sie es in einen bekannten Pfad setzen (z. B C:\certs\CorpRootCA.pem or /etc/ssl/certs/CorpRootCA.pem. ).

  3. Legen Sie eine Betriebssystemumgebungsvariable fest, NODE_EXTRA_CA_CERTSdie auf die PEM-Datei verweist. Sie können beispielsweise PowerShell unter Windows verwenden:

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

Erfahren Sie mehr über die Unterstützung des Agent-Clientzertifikats.