Partager via


Utiliser le proxy de développement avec des applications .NET s’exécutant dans Docker

Si vous exécutez votre application .NET dans un conteneur Docker et que vous souhaitez utiliser le proxy de développement, vous devez suivre plusieurs étapes pour qu’elle fonctionne.

Configurer le proxy pour votre conteneur Docker

Étant donné que votre application .NET s’exécute à l’intérieur d’un conteneur Docker et que le proxy de développement s’exécute sur votre hôte, vous devez configurer le proxy pour qu’il pointe vers l’adresse IP de votre ordinateur (http://192.0.2.13 dans l’exemple suivant). .NET utilise la variable d’environnement HTTPS_PROXY pour configurer le proxy pour son client HTTP. Pour configurer la variable pour votre conteneur Docker, utilisez l’option --env, -e lors du démarrage du conteneur :

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

Important

Lorsque vous utilisez le proxy de développement sur macOS, vous devez l’attacher à l’adresse 0.0.0.0 pour le rendre accessible à partir du conteneur Docker. Pour configurer l’adresse IP du proxy de développement, démarrez-la avec la commande suivante :

devproxy --ip-address 0.0.0.0

Important

Lorsque vous utilisez le proxy de développement sur Linux, vous devez l’attacher à l’adresse 0.0.0.0 pour la rendre accessible à partir du conteneur Docker. Pour configurer l’adresse IP du proxy de développement, démarrez-la avec la commande suivante :

devproxy --ip-address 0.0.0.0

Gérer les certificats SSL

Le proxy de développement utilise son propre certificat SSL pour inspecter le trafic HTTPS intercepté à partir de votre application. Lorsque vous installez le proxy de développement sur votre ordinateur, il génère un certificat SSL auto-signé et l’ajoute à la liste des certificats approuvés. Toutefois, lors de l’exécution de votre application dans un conteneur Docker, le conteneur n’a pas accès au certificat SSL installé sur votre ordinateur. Il existe deux façons de gérer les certificats SSL lors de l’utilisation du proxy de développement avec des applications .NET s’exécutant dans des conteneurs Docker.

Configurer le certificat du proxy de développement dans votre conteneur Docker

Pour permettre au proxy de développement d’inspecter les requêtes HTTPS, vous pouvez configurer le certificat SSL du proxy de développement comme approuvé dans votre conteneur Docker.

Important

Étant donné que Docker ne conserve pas les modifications apportées à un conteneur après l’avoir fermé, vous devez répéter ces étapes chaque fois que vous démarrez le conteneur. Pour éviter cela, créez une image Docker personnalisée avec les étapes suivantes incluses.

Commencez par exporter le certificat proxy de développement vers PEM.

Pour exporter le certificat du proxy de développement vers PEM sur Windows, vous avez besoin openssl. Cet exemple part du principe que vous utilisez openssl également celui-ci, mais git que vous pouvez également l’installer séparément.

Ajustez le répertoire d’installation du proxy de développement et git, puis exécutez le script suivant dans 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"

Lorsque vous êtes invité à entrer le mot de passe, appuyez sur Entrée sans taper quoi que ce soit.

# 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

Ensuite, copiez le certificat dans votre conteneur Docker. Le moyen le plus simple de copier le certificat consiste à le copier dans le dossier du projet, que vous montez dans le conteneur.

Ensuite, dans le conteneur Docker, approuvez le certificat. Si vous utilisez l’image mcr.microsoft.com/dotnet/sdk , vous pouvez utiliser les commandes suivantes :

# 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

Ignorer la validation des certificats SSL dans votre application .NET

Une autre façon de gérer les certificats SSL lors de l’utilisation du proxy de développement avec des applications .NET s’exécutant dans des conteneurs Docker consiste à ignorer la validation des certificats SSL dans votre application. Cette approche vous oblige à modifier votre code d’application.

Dans votre application, ajoutez le code suivant pour ignorer la validation des certificats SSL :

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

Attention

Veillez à supprimer ce code avant de déployer votre application en production.