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.
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per