次の方法で共有


Docker で実行されている .NET アプリケーションで開発プロキシを使用する

Docker コンテナーで .NET アプリケーションを実行し、開発プロキシを使用する場合は、いくつかの手順に従って動作させる必要があります。

Docker コンテナーのプロキシを構成する

.NET アプリは Docker コンテナー内で実行されており、開発プロキシはホスト上で実行されているため、(次の例の) コンピューターhttp://192.0.2.13 の IP アドレスを指すようにプロキシを構成する必要があります。 .NET では、環境変数を HTTPS_PROXY 使用して HTTP クライアントのプロキシを構成します。 Docker コンテナーの変数を構成するには、コンテナーの起動時に次の --env, -e オプションを使用します。

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

重要

macOS で開発プロキシを使用する場合は、Docker コンテナーからアクセスできるようにアドレスにアタッチ 0.0.0.0 する必要があります。 開発プロキシの IP アドレスを構成するには、次のコマンドで開始します。

devproxy --ip-address 0.0.0.0

重要

Linux で開発プロキシを使用する場合は、Docker コンテナーからアクセスできるようにアドレスにアタッチ 0.0.0.0 する必要があります。 開発プロキシの IP アドレスを構成するには、次のコマンドで開始します。

devproxy --ip-address 0.0.0.0

SSL 証明書の処理

開発プロキシは、独自の SSL 証明書を使用して、アプリケーションから傍受された HTTPS トラフィックを検査します。 コンピューターに開発プロキシをインストールすると、自己署名 SSL 証明書が生成され、信頼できる証明書の一覧に追加されます。 ただし、Docker コンテナーでアプリケーションを実行する場合、コンテナーはコンピューターにインストールされている SSL 証明書にアクセスできません。 Docker コンテナーで実行されている .NET アプリケーションで開発プロキシを使用する場合、SSL 証明書を処理する方法は 2 つあります。

Docker コンテナーで開発プロキシ証明書を構成する

開発プロキシが HTTPS 要求を検査できるようにするには、開発プロキシ SSL 証明書を Docker コンテナーで信頼済みとして構成できます。

重要

Docker はコンテナーを閉じた後も変更を保持しないため、コンテナーを起動するたびにこれらの手順を繰り返す必要があります。 これを回避するには、次の手順を含むカスタム Docker イメージを作成します。

まず、開発プロキシ証明書を PEM にエクスポートします。

Windows 上の PEM に開発プロキシ証明書をエクスポートするには、次のものが必要 opensslです。 この例では、一緒gitに提供されているものを使用opensslすることを前提としていますが、個別にインストールすることもできます。

開発プロキシと Git のインストール ディレクトリを調整し、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"

パスワードの入力を求められたら、何も入力せずに Enter キーを押します

# 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

次に、証明書を Docker コンテナーにコピーします。 証明書をコピーする最も簡単な方法は、コンテナーにマウントするプロジェクト フォルダーに証明書をコピーすることです。

次に、Docker コンテナーで証明書を信頼します。 イメージを使用 mcr.microsoft.com/dotnet/sdk している場合は、次のコマンドを使用できます。

# 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

.NET アプリケーションでの SSL 証明書の検証を無視する

Docker コンテナーで実行されている .NET アプリケーションで開発プロキシを使用するときに SSL 証明書を処理するもう 1 つの方法は、アプリケーションで SSL 証明書の検証を無視することです。 この方法では、アプリケーション コードを変更する必要があります。

アプリケーションで、SSL 証明書の検証を無視する次のコードを追加します。

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

注意事項

運用環境にアプリケーションをデプロイする前に、必ずこのコードを削除してください。