Freigeben über


Verwenden von Dev Proxy mit .NET-Anwendungen, die in Docker ausgeführt werden

Wenn Sie Ihre .NET-Anwendung in einem Docker-Container ausführen und Dev Proxy verwenden möchten, müssen Sie mehrere Schritte ausführen, um sie zu verbessern.

Konfigurieren des Proxys für Ihren Docker-Container

Da Ihre .NET-App in einem Docker-Container ausgeführt wird und der Dev-Proxy auf Ihrem Host ausgeführt wird, müssen Sie den Proxy so konfigurieren, dass er auf die IP-Adresse Ihres Computers verweist (http://192.0.2.13 im folgenden Beispiel). .NET verwendet die HTTPS_PROXY Umgebungsvariable, um den Proxy für seinen HTTP-Client zu konfigurieren. Um die Variable für Ihren Docker-Container zu konfigurieren, verwenden Sie beim Starten des Containers die --env, -e Option:

docker run --rm -it -v $(pwd):/usr/src/app -e HTTPS_PROXY=http://192.0.2.13:8000 mcr.microsoft.com/dotnet/sdk:8.0 bash

Wichtig

Wenn Sie Dev Proxy unter macOS verwenden, müssen Sie ihn an die 0.0.0.0 Adresse anfügen, um den Zugriff über den Docker-Container zu ermöglichen. Um die IP-Adresse für Dev Proxy zu konfigurieren, starten Sie sie mit dem folgenden Befehl:

devproxy --ip-address 0.0.0.0

Wichtig

Wenn Sie Dev Proxy unter Linux verwenden, müssen Sie ihn an die 0.0.0.0 Adresse anfügen, um den Zugriff über den Docker-Container zu ermöglichen. Um die IP-Adresse für Dev Proxy zu konfigurieren, starten Sie sie mit dem folgenden Befehl:

devproxy --ip-address 0.0.0.0

Verarbeiten von SSL-Zertifikaten

Dev Proxy verwendet ein eigenes SSL-Zertifikat, um https-Datenverkehr zu prüfen, der von Ihrer Anwendung abgefangen wurde. Wenn Sie Dev Proxy auf Ihrem Computer installieren, wird ein selbstsigniertes SSL-Zertifikat generiert und der Liste der vertrauenswürdigen Zertifikate hinzugefügt. Wenn Sie Ihre Anwendung jedoch in einem Docker-Container ausführen, hat der Container keinen Zugriff auf das auf Ihrem Computer installierte SSL-Zertifikat. Es gibt zwei Möglichkeiten für Sie, SSL-Zertifikate bei Verwendung von Dev Proxy mit .NET-Anwendungen zu verarbeiten, die in Docker-Containern ausgeführt werden.

Konfigurieren des Dev Proxy-Zertifikats in Ihrem Docker-Container

Damit Dev Proxy HTTPS-Anforderungen prüfen kann, können Sie das Dev Proxy SSL-Zertifikat als vertrauenswürdig in Ihrem Docker-Container konfigurieren.

Wichtig

Da Docker änderungen an einem Container nach dem Schließen nicht beibehalten, müssen Sie diese Schritte jedes Mal wiederholen, wenn Sie den Container starten. Um dies zu vermeiden, erstellen Sie ein benutzerdefiniertes Docker-Image mit den folgenden Schritten.

Starten Sie, indem Sie das Dev Proxy-Zertifikat nach PEM exportieren.

Um das Dev Proxy-Zertifikat unter Windows nach PEM zu exportieren, benötigen opensslSie . In diesem Beispiel wird davon ausgegangen, dass Sie openssl dies zusammen verwenden git , sie aber auch separat installieren können.

Passen Sie das Dev-Proxy- und git-Installationsverzeichnis an, und führen Sie das folgende Skript in PowerShell aus.

$proxyPath = "C:\apps\devproxy"
$gitPath = "C:\Program Files\Git"

# convert Dev Proxy root certificate to PEM
$executable = "${gitPath}\usr\bin\openssl.exe"
$arguments = 'pkcs12 -in "{0}\rootCert.pfx" -out "{0}\rootCert.crt" -nodes' -f $proxyPath
Start-Process -FilePath $executable -ArgumentList $arguments -NoNewWindow -Wait

# Read PEM contents
$content = Get-Content "$proxyPath\rootCert.crt"

# Find the indices of the begin and end certificate lines
$beginIndex = $content.IndexOf("-----BEGIN CERTIFICATE-----")
$endIndex = $content.IndexOf("-----END CERTIFICATE-----")

# If both lines are found
if ($beginIndex -ne -1 -and $endIndex -ne -1) {
    # Trim the content to only include the certificate
    $content = $content[$beginIndex..$endIndex]
}

# Write the updated content back to the file
$content | Out-File "$proxyPath\dev-proxy-ca.crt"

Wenn Sie zum Eingeben des Kennworts aufgefordert werden, drücken Sie die EINGABETASTE , ohne etwas einzugeben.

# export Dev Proxy certificate
security find-certificate -c "Dev Proxy CA" -a -p > dev-proxy-ca.pem
# rename to .crt
mv dev-proxy-ca.pem dev-proxy-ca.crt
# export Dev Proxy certificate
openssl pkcs12 -in ~/.config/dev-proxy/rootCert.pfx -clcerts -nokeys -out dev-proxy-ca.crt -passin pass:""
# rename to .crt
mv dev-proxy-ca.pem dev-proxy-ca.crt

Kopieren Sie als Nächstes das Zertifikat in Ihren Docker-Container. Die einfachste Möglichkeit zum Kopieren des Zertifikats besteht darin, es in den Projektordner zu kopieren, den Sie im Container bereitstellen.

Vertrauen Sie dann im Docker-Container dem Zertifikat. Wenn Sie das mcr.microsoft.com/dotnet/sdk Bild verwenden, können Sie die folgenden Befehle verwenden:

# change to the directory where your application is located
cd /usr/app/src
# copy the certificate to the trusted certificates directory
cp dev-proxy-ca.crt /usr/local/share/ca-certificates
# update the trusted certificates
update-ca-certificates

SSL-Zertifikatüberprüfung in Ihrer .NET-Anwendung ignorieren

Eine weitere Möglichkeit zum Verarbeiten von SSL-Zertifikaten bei Verwendung von Dev Proxy mit .NET-Anwendungen, die in Docker-Containern ausgeführt werden, besteht darin, die SSL-Zertifikatüberprüfung in Ihrer Anwendung zu ignorieren. Bei diesem Ansatz müssen Sie den Anwendungscode ändern.

Fügen Sie in Ihrer Anwendung den folgenden Code hinzu, um die SSL-Zertifikatüberprüfung zu ignorieren:

ServicePointManager.ServerCertificateValidationCallback = (sender, certificate, chain, sslPolicyErrors) => true;

Achtung

Entfernen Sie diesen Code, bevor Sie Ihre Anwendung in der Produktion bereitstellen.