Partilhar via


Usar o Dev Proxy com aplicativos .NET em execução no Docker

Se você executar seu aplicativo .NET em um contêiner do Docker e quiser usar o Dev Proxy, há várias etapas que você precisa seguir para fazê-lo funcionar.

Configurar proxy para seu contêiner do Docker

Como seu aplicativo .NET está sendo executado dentro de um contêiner do Docker e o Proxy de Desenvolvimento está sendo executado em seu host, você precisa configurar o proxy para apontar para o endereço IP do seu computador (http://192.0.2.13 no exemplo a seguir). O .NET usa a HTTPS_PROXY variável de ambiente para configurar o proxy para seu cliente HTTP. Para configurar a variável para seu contêiner do Docker, use a --env, -e opção ao iniciar o contêiner:

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

Ao usar o 0.0.0.0 Dev Proxy no macOS, você precisa anexá-lo ao endereço para torná-lo acessível a partir do contêiner do Docker. Para configurar o endereço IP do Dev Proxy, inicie-o com o seguinte comando:

devproxy --ip-address 0.0.0.0

Importante

Ao usar o 0.0.0.0 Dev Proxy no Linux, você precisa anexá-lo ao endereço para torná-lo acessível a partir do contêiner do Docker. Para configurar o endereço IP do Dev Proxy, inicie-o com o seguinte comando:

devproxy --ip-address 0.0.0.0

Manipular certificados SSL

O Dev Proxy usa seu próprio certificado SSL para inspecionar o tráfego HTTPS intercetado do seu aplicativo. Quando você instala o Dev Proxy em seu computador, ele gera um certificado SSL autoassinado e o adiciona à lista de certificados confiáveis. No entanto, ao executar seu aplicativo em um contêiner do Docker, o contêiner não tem acesso ao certificado SSL instalado no seu computador. Há duas maneiras de lidar com certificados SSL ao usar o Dev Proxy com aplicativos .NET em execução em contêineres do Docker.

Configurar o certificado de Proxy de Desenvolvimento em seu contêiner do Docker

Para permitir que o Dev Proxy inspecione solicitações HTTPS, você pode configurar o certificado SSL do Dev Proxy como confiável em seu contêiner do Docker.

Importante

Como o Docker não persiste as alterações em um contêiner depois de fechá-lo, você precisará repetir essas etapas sempre que iniciar o contêiner. Para evitar isso, crie uma imagem personalizada do Docker com as etapas a seguir incluídas.

Comece, exportando o certificado de Proxy de Desenvolvimento para o PEM.

Para exportar o certificado Dev Proxy para PEM no Windows, você precisa de openssl. Este exemplo pressupõe que você use openssl o fornecido junto com git , mas você também pode instalá-lo separadamente.

Ajuste o Proxy de Desenvolvimento e o diretório de instalação do git e execute o seguinte script no 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 solicitado a digitar a senha, pressione Enter sem digitar nada.

# 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

Em seguida, copie o certificado para o contêiner do Docker. A maneira mais fácil de copiar o certificado é copiá-lo para a pasta do projeto, que você monta no contêiner.

Em seguida, no contêiner do Docker, confie no certificado. Se estiver a utilizar a mcr.microsoft.com/dotnet/sdk imagem, pode utilizar os seguintes comandos:

# 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

Ignorar a validação do certificado SSL em seu aplicativo .NET

Outra maneira de lidar com certificados SSL ao usar o Proxy de Desenvolvimento com aplicativos .NET em execução em contêineres do Docker é ignorar a validação do certificado SSL em seu aplicativo. Essa abordagem requer que você modifique o código do aplicativo.

Em seu aplicativo, adicione o seguinte código para ignorar a validação do certificado SSL:

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

Atenção

Certifique-se de remover esse código antes de implantar seu aplicativo na produção.