Dela via


Använda Dev Proxy med .NET-program som körs i Docker

Om du kör .NET-programmet i en Docker-container och vill använda Dev Proxy finns det flera steg som du måste följa för att få det att fungera.

Konfigurera proxy för din Docker-container

Eftersom din .NET-app körs i en Docker-container och Dev Proxy körs på din värddator måste du konfigurera proxyn så att den pekar på din dators IP-adress (http://192.0.2.13 i följande exempel). .NET använder HTTPS_PROXY miljövariabeln för att konfigurera proxyn för sin HTTP-klient. Om du vill konfigurera variabeln för Docker-containern använder du --env, -e alternativet när du startar containern:

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

Viktigt!

När du använder Dev Proxy på macOS måste du koppla den till 0.0.0.0 adressen för att göra den tillgänglig från Docker-containern. Om du vill konfigurera IP-adressen för Dev Proxy startar du den med följande kommando:

devproxy --ip-address 0.0.0.0

Viktigt!

När du använder Dev Proxy i Linux måste du koppla den till 0.0.0.0 adressen för att göra den tillgänglig från Docker-containern. Om du vill konfigurera IP-adressen för Dev Proxy startar du den med följande kommando:

devproxy --ip-address 0.0.0.0

Hantera SSL-certifikat

Dev Proxy använder sitt eget SSL-certifikat för att inspektera HTTPS-trafik som fångas upp från ditt program. När du installerar Dev Proxy på datorn genereras ett självsignerat SSL-certifikat och läggs till i listan över betrodda certifikat. Men när du kör programmet i en Docker-container har containern inte åtkomst till SSL-certifikatet som är installerat på datorn. Det finns två sätt för dig att hantera SSL-certifikat när du använder Dev Proxy med .NET-program som körs i Docker-containrar.

Konfigurera Dev Proxy-certifikat i Docker-containern

Om du vill tillåta Dev Proxy att inspektera HTTPS-begäranden kan du konfigurera Dev Proxy SSL-certifikatet som betrott i Docker-containern.

Viktigt!

Eftersom Docker inte bevarar ändringar i en container när den har stängts måste du upprepa de här stegen varje gång du startar containern. Undvik detta genom att skapa en anpassad Docker-avbildning med följande steg.

Börja genom att exportera Dev Proxy-certifikatet till PEM.

Om du vill exportera Dev Proxy-certifikatet till PEM i Windows behöver openssldu . Det här exemplet förutsätter att du använder openssl det som tillhandahålls tillsammans med git , men du kan även installera det separat.

Justera installationskatalogen för Dev Proxy och git och kör följande skript i PowerShell.

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

När du uppmanas att ange lösenordet trycker du på Retur utan att skriva något.

# 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

Kopiera sedan certifikatet till Docker-containern. Det enklaste sättet att kopiera certifikatet är att kopiera det till projektmappen som du monterar i containern.

I Docker-containern litar du sedan på certifikatet. Om du använder avbildningen mcr.microsoft.com/dotnet/sdk kan du använda följande kommandon:

# 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

Ignorera SSL-certifikatverifiering i .NET-programmet

Ett annat sätt att hantera SSL-certifikat när du använder Dev Proxy med .NET-program som körs i Docker-containrar är att ignorera SSL-certifikatverifiering i ditt program. Den här metoden kräver att du ändrar programkoden.

I ditt program lägger du till följande kod för att ignorera SSL-certifikatverifiering:

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

Varning

Se till att ta bort den här koden innan du distribuerar programmet till produktion.