Compartir a través de


Uso del proxy de desarrollo con aplicaciones .NET que se ejecutan en Docker

Si ejecuta la aplicación .NET en un contenedor de Docker y quiere usar el proxy de desarrollo, hay varios pasos que debe seguir para que funcione.

Configuración del proxy para el contenedor de Docker

Dado que la aplicación .NET se ejecuta dentro de un contenedor de Docker y el proxy de desarrollo se ejecuta en el host, debe configurar el proxy para que apunte a la dirección IP del equipo (http://192.0.2.13 en el ejemplo siguiente). .NET usa la HTTPS_PROXY variable de entorno para configurar el proxy para su cliente HTTP. Para configurar la variable para el contenedor de Docker, use la --env, -e opción al iniciar el contenedor:

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

Al usar el proxy de desarrollo en macOS, debe adjuntarlo a la 0.0.0.0 dirección para que sea accesible desde el contenedor de Docker. Para configurar la dirección IP para el proxy de desarrollo, iníciela con el siguiente comando:

devproxy --ip-address 0.0.0.0

Importante

Al usar el proxy de desarrollo en Linux, debe adjuntarlo a la 0.0.0.0 dirección para que sea accesible desde el contenedor de Docker. Para configurar la dirección IP para el proxy de desarrollo, iníciela con el siguiente comando:

devproxy --ip-address 0.0.0.0

Control de certificados SSL

Dev Proxy usa su propio certificado SSL para inspeccionar el tráfico HTTPS interceptado desde la aplicación. Al instalar Dev Proxy en el equipo, genera un certificado SSL autofirmado y lo agrega a la lista de certificados de confianza. Sin embargo, al ejecutar la aplicación en un contenedor de Docker, el contenedor no tiene acceso al certificado SSL instalado en el equipo. Hay dos maneras de controlar los certificados SSL al usar proxy de desarrollo con aplicaciones .NET que se ejecutan en contenedores de Docker.

Configuración del certificado proxy de desarrollo en el contenedor de Docker

Para permitir que el proxy de desarrollo inspeccione las solicitudes HTTPS, puede configurar el certificado SSL del proxy de desarrollo como de confianza en el contenedor de Docker.

Importante

Dado que Docker no conserva los cambios en un contenedor después de cerrarlo, deberá repetir estos pasos cada vez que inicie el contenedor. Para evitar esto, cree una imagen personalizada de Docker con los pasos siguientes incluidos.

Para empezar, exporte el certificado de proxy de desarrollo a PEM.

Para exportar el certificado de proxy de desarrollo a PEM en Windows, necesita openssl. En este ejemplo se supone que usa openssl que se proporciona junto con git , pero también puede instalarlo por separado.

Ajuste el directorio de instalación de Dev Proxy y Git y ejecute el siguiente script en 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"

Cuando se le pida que escriba la contraseña, presione Entrar sin escribir 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

A continuación, copie el certificado en el contenedor de Docker. La manera más fácil de copiar el certificado es copiarlo en la carpeta del proyecto, que se monta en el contenedor.

A continuación, en el contenedor de Docker, confíe en el certificado. Si usa la mcr.microsoft.com/dotnet/sdk imagen, puede usar los siguientes 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

Omitir la validación de certificados SSL en la aplicación .NET

Otra manera de controlar los certificados SSL al usar proxy de desarrollo con aplicaciones .NET que se ejecutan en contenedores de Docker es omitir la validación de certificados SSL en la aplicación. Este enfoque requiere que modifique el código de la aplicación.

En la aplicación, agregue el código siguiente para omitir la validación del certificado SSL:

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

Precaución

Asegúrese de quitar este código antes de implementar la aplicación en producción.