다음을 통해 공유


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

Important

macOS에서 개발 프록시를 사용하는 경우 Docker 컨테이너에서 액세스할 수 있도록 주소에 연결 0.0.0.0 해야 합니다. 개발자 프록시에 대한 IP 주소를 구성하려면 다음 명령을 사용하여 시작합니다.

devproxy --ip-address 0.0.0.0

Important

Linux에서 개발 프록시를 사용하는 경우 Docker 컨테이너에서 액세스할 수 있도록 주소에 연결 0.0.0.0 해야 합니다. 개발자 프록시에 대한 IP 주소를 구성하려면 다음 명령을 사용하여 시작합니다.

devproxy --ip-address 0.0.0.0

SSL 인증서 처리

개발자 프록시는 자체 SSL 인증서를 사용하여 애플리케이션에서 가로채는 HTTPS 트래픽을 검사합니다. 컴퓨터에 Dev Proxy를 설치하면 자체 서명된 SSL 인증서가 생성되고 신뢰할 수 있는 인증서 목록에 추가됩니다. 그러나 Docker 컨테이너에서 애플리케이션을 실행하는 경우 컨테이너는 컴퓨터에 설치된 SSL 인증서에 액세스할 수 없습니다. Docker 컨테이너에서 실행되는 .NET 애플리케이션에서 개발 프록시를 사용할 때 SSL 인증서를 처리하는 방법에는 두 가지가 있습니다.

Docker 컨테이너에서 개발 프록시 인증서 구성

개발자 프록시가 HTTPS 요청을 검사하도록 허용하려면 Docker 컨테이너에서 신뢰할 수 있는 Dev Proxy SSL 인증서를 구성할 수 있습니다.

Important

Docker는 컨테이너를 닫은 후 변경 내용을 유지하지 않으므로 컨테이너를 시작할 때마다 이러한 단계를 반복해야 합니다. 이를 방지하려면 다음 단계가 포함된 사용자 지정 Docker 이미지를 만듭니다.

먼저 개발 프록시 인증서를 PEM으로 내보냅니다.

개발 프록시 인증서를 Windows openssl의 PEM으로 내보내려면 . 이 예제에서는 함께 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 인증서를 처리하는 또 다른 방법은 애플리케이션에서 SSL 인증서 유효성 검사를 무시하는 것입니다. 이 방법을 사용하려면 애플리케이션 코드를 수정해야 합니다.

애플리케이션에서 다음 코드를 추가하여 SSL 인증서 유효성 검사를 무시합니다.

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

주의

프로덕션에 애플리케이션을 배포하기 전에 이 코드를 제거해야 합니다.