Condividi tramite


Usare Dev Proxy con applicazioni .NET in esecuzione in Docker

Se si esegue l'applicazione .NET in un contenitore Docker e si vuole usare Dev Proxy, è necessario seguire diversi passaggi per renderla funzionante.

Configurare il proxy per il contenitore Docker

Poiché l'app .NET è in esecuzione all'interno di un contenitore Docker e Dev Proxy è in esecuzione nell'host, è necessario configurare il proxy in modo che punti all'indirizzo IP del computer (http://192.0.2.13 nell'esempio seguente). .NET usa la HTTPS_PROXY variabile di ambiente per configurare il proxy per il client HTTP. Per configurare la variabile per il contenitore Docker, usare l'opzione all'avvio --env, -e del contenitore:

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

Importante

Quando si usa Dev Proxy in macOS, è necessario collegarlo all'indirizzo 0.0.0.0 per renderlo accessibile dal contenitore Docker. Per configurare l'indirizzo IP per Dev Proxy, iniziare con il comando seguente:

devproxy --ip-address 0.0.0.0

Gestire i certificati SSL

Dev Proxy usa il proprio certificato SSL per controllare il traffico HTTPS intercettato dall'applicazione. Quando si installa Dev Proxy nel computer, viene generato un certificato SSL autofirmato e lo aggiunge all'elenco di certificati attendibili. Tuttavia, quando si esegue l'applicazione in un contenitore Docker, il contenitore non ha accesso al certificato SSL installato nel computer. Esistono due modi per gestire i certificati SSL quando si usa Dev Proxy con le applicazioni .NET in esecuzione nei contenitori Docker.

Configurare il certificato del proxy di sviluppo nel contenitore Docker

Per consentire a Dev Proxy di controllare le richieste HTTPS, è possibile configurare il certificato SSL del proxy di sviluppo come attendibile nel contenitore Docker.

Importante

Poiché Docker non rende persistenti le modifiche a un contenitore dopo la chiusura, è necessario ripetere questi passaggi ogni volta che si avvia il contenitore. Per evitare questo problema, creare un'immagine Docker personalizzata con i passaggi seguenti inclusi.

Per iniziare, esportando il certificato del proxy di sviluppo in PEM.

Per esportare il certificato del proxy di sviluppo in PEM in Windows, è necessario openssl. In questo esempio si presuppone che venga usato openssl insieme, git ma sia possibile installarlo separatamente.

Modificare la directory di installazione di Dev Proxy e Git ed eseguire lo script seguente in 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"

Quando viene richiesto di immettere la password, premere INVIO senza digitare nulla.

# 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

Copiare quindi il certificato nel contenitore Docker. Il modo più semplice per copiare il certificato consiste nel copiarlo nella cartella del progetto, che viene montata nel contenitore.

Quindi, nel contenitore Docker considerare attendibile il certificato. Se si usa l'immagine mcr.microsoft.com/dotnet/sdk , è possibile usare i comandi seguenti:

# 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

Ignorare la convalida del certificato SSL nell'applicazione .NET

Un altro modo per gestire i certificati SSL quando si usa Dev Proxy con applicazioni .NET in esecuzione nei contenitori Docker consiste nell'ignorare la convalida del certificato SSL nell'applicazione. Questo approccio richiede la modifica del codice dell'applicazione.

Nell'applicazione aggiungere il codice seguente per ignorare la convalida del certificato SSL:

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

Attenzione

Assicurarsi di rimuovere questo codice prima di distribuire l'applicazione nell'ambiente di produzione.