共用方式為


搭配在 Docker 中執行的 .NET 應用程式使用開發 Proxy

如果您在 Docker 容器中執行 .NET 應用程式並想要使用 Dev Proxy,則需要遵循幾個步驟才能讓它運作。

設定 Docker 容器的 Proxy

因為 .NET 應用程式是在 Docker 容器內執行,而開發 Proxy 正在您的主機上執行,因此您必須設定 Proxy 以指向您電腦的 IP 位址(http://192.0.2.13 在下列範例中)。 .NET 會 HTTPS_PROXY 使用環境變數來設定其 HTTP 用戶端的 Proxy。 若要設定 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上使用Dev Proxy時,您必須將它附加至 0.0.0.0 位址,使其可從 Docker 容器存取。 若要設定開發 Proxy 的 IP 位址,請使用下列命令加以啟動:

devproxy --ip-address 0.0.0.0

重要

當您在 Linux 上使用 Dev Proxy 時,您必須將它附加至 0.0.0.0 位址,使其可從 Docker 容器存取。 若要設定開發 Proxy 的 IP 位址,請使用下列命令加以啟動:

devproxy --ip-address 0.0.0.0

處理 SSL 憑證

開發 Proxy 會使用自己的 SSL 憑證來檢查從您的應用程式攔截的 HTTPS 流量。 當您在計算機上安裝 Dev Proxy 時,它會產生自我簽署的 SSL 憑證,並將它新增至受信任的憑證清單。 不過,在 Docker 容器中執行應用程式時,容器無法存取您電腦上安裝的 SSL 憑證。 當您搭配在 Docker 容器中執行的 .NET 應用程式使用 Dev Proxy 時,有兩種方式可以處理 SSL 憑證。

在 Docker 容器中設定開發 Proxy 憑證

若要允許開發 Proxy 檢查 HTTPS 要求,您可以將開發 Proxy SSL 憑證設定為 Docker 容器中信任的憑證。

重要

因為 Docker 不會在關閉容器之後保存容器的變更,所以每次啟動容器時,都必須重複這些步驟。 若要避免這種情況,請使用下列步驟建立自定義 Docker 映射。

首先,將開發 Proxy 憑證導出至 PEM。

若要將開發 Proxy 憑證匯出至 Windows 上的 PEM,您需要 openssl。 此範例假設您 openssl 同時使用, git 但您也可以個別安裝。

調整 Dev Proxy 和 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 應用程式使用 Dev Proxy 時,處理 SSL 憑證的另一種方式是忽略應用程式中的 SSL 憑證驗證。 此方法會要求您修改應用程式程序代碼。

在您的應用程式中,新增下列程式代碼以忽略 SSL 憑證驗證:

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

警告

在將應用程式部署至生產環境之前,請務必先移除此程序代碼。