Udostępnij za pośrednictwem


Używanie serwera proxy dev z aplikacjami platformy .NET działającymi na platformie Docker

Jeśli uruchomisz aplikację .NET w kontenerze platformy Docker i chcesz użyć serwera proxy deweloperskiego, musisz wykonać kilka kroków, aby umożliwić jej działanie.

Konfigurowanie serwera proxy dla kontenera platformy Docker

Ponieważ aplikacja .NET działa wewnątrz kontenera platformy Docker, a serwer proxy deweloperów jest uruchomiony na hoście, należy skonfigurować serwer proxy tak, aby wskazywał adres IP komputera (http://192.0.2.13 w poniższym przykładzie). Platforma .NET używa zmiennej środowiskowej HTTPS_PROXY do konfigurowania serwera proxy dla klienta HTTP. Aby skonfigurować zmienną dla kontenera platformy Docker, użyj --env, -e opcji podczas uruchamiania kontenera:

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

Ważne

Jeśli używasz serwera proxy deweloperskiego w systemie macOS, musisz dołączyć go do 0.0.0.0 adresu, aby był dostępny z kontenera platformy Docker. Aby skonfigurować adres IP serwera proxy deweloperskiego, uruchom go za pomocą następującego polecenia:

devproxy --ip-address 0.0.0.0

Ważne

W przypadku korzystania z serwera proxy deweloperskiego w systemie Linux należy dołączyć go do 0.0.0.0 adresu, aby był dostępny z kontenera platformy Docker. Aby skonfigurować adres IP serwera proxy deweloperskiego, uruchom go za pomocą następującego polecenia:

devproxy --ip-address 0.0.0.0

Obsługa certyfikatów SSL

Serwer proxy deweloperów używa własnego certyfikatu SSL do sprawdzania ruchu HTTPS przechwyconego z aplikacji. Podczas instalowania serwera proxy deweloperskiego na komputerze generuje certyfikat SSL z podpisem własnym i dodaje go do listy zaufanych certyfikatów. Jednak podczas uruchamiania aplikacji w kontenerze platformy Docker kontener nie ma dostępu do certyfikatu SSL zainstalowanego na komputerze. Istnieją dwa sposoby obsługi certyfikatów SSL podczas korzystania z serwera proxy deweloperskiego z aplikacjami platformy .NET uruchomionymi w kontenerach platformy Docker.

Konfigurowanie certyfikatu serwera proxy deweloperów w kontenerze platformy Docker

Aby zezwolić serwerowi proxy deweloperów na inspekcję żądań HTTPS, możesz skonfigurować certyfikat SSL serwera proxy deweloperów jako zaufany w kontenerze platformy Docker.

Ważne

Ponieważ platforma Docker nie utrwala zmian w kontenerze po jego zamknięciu, należy powtórzyć te kroki za każdym razem, gdy uruchomisz kontener. Aby tego uniknąć, utwórz niestandardowy obraz platformy Docker, wykonując poniższe kroki.

Zacznij od wyeksportowania certyfikatu serwera proxy deweloperskiego do PEM.

Aby wyeksportować certyfikat serwera proxy deweloperskiego do rozwiązania PEM w systemie Windows, potrzebujesz polecenia openssl. W tym przykładzie przyjęto założenie, że używasz openssl udostępnionej razem z usługą git , ale można ją również zainstalować oddzielnie.

Dostosuj katalog instalacyjny dev proxy i git, a następnie uruchom następujący skrypt w programie 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"

Po wyświetleniu monitu o wprowadzenie hasła naciśnij Enter bez wpisywania niczego.

# 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

Następnie skopiuj certyfikat do kontenera platformy Docker. Najprostszym sposobem skopiowania certyfikatu jest skopiowanie go do folderu projektu, który można zainstalować w kontenerze.

Następnie w kontenerze platformy Docker ufaj certyfikatowi. Jeśli używasz mcr.microsoft.com/dotnet/sdk obrazu, możesz użyć następujących poleceń:

# 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

Ignorowanie weryfikacji certyfikatu SSL w aplikacji .NET

Innym sposobem obsługi certyfikatów SSL podczas korzystania z serwera proxy deweloperskiego z aplikacjami platformy .NET działającymi w kontenerach platformy Docker jest ignorowanie weryfikacji certyfikatu SSL w aplikacji. Takie podejście wymaga zmodyfikowania kodu aplikacji.

W aplikacji dodaj następujący kod, aby zignorować weryfikację certyfikatu SSL:

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

Uwaga

Pamiętaj, aby usunąć ten kod przed wdrożeniem aplikacji w środowisku produkcyjnym.