Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
На первый взгляд
Цель: Использование прокси-сервера разработки с .NET в Docker
Время: 15 минут
Плагины: Разные
Предварительные требования:настройка прокси-сервера разработки, установка Docker
Если вы запускаете приложение .NET в контейнере Docker и хотите использовать прокси-сервер разработки, необходимо выполнить несколько шагов, чтобы сделать его работой.
Настройка прокси-сервера для контейнера Docker
Так как приложение .NET выполняется внутри контейнера Docker и прокси-сервер разработки выполняется на узле, необходимо настроить прокси-сервер для указания IP-адреса компьютера (http://192.0.2.13 в следующем примере). .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 необходимо подключить его к 0.0.0.0 адресу, чтобы сделать его доступным из контейнера Docker. Чтобы настроить IP-адрес для прокси-сервера разработки, запустите его с помощью следующей команды:
devproxy --ip-address 0.0.0.0
Внимание
При использовании прокси-сервера разработки в Linux необходимо подключить его к 0.0.0.0 адресу, чтобы сделать его доступным из контейнера Docker. Чтобы настроить IP-адрес для прокси-сервера разработки, запустите его с помощью следующей команды:
devproxy --ip-address 0.0.0.0
Обработка SSL-сертификатов
Dev Proxy использует собственный SSL-сертификат для проверки трафика HTTPS, перехваченного из вашего приложения. При установке прокси-сервера разработки на компьютере он создает самозаверяющий SSL-сертификат и добавляет его в список доверенных сертификатов. Однако при запуске приложения в контейнере Docker контейнер не имеет доступа к SSL-сертификату, установленному на компьютере. Существует два способа обработки SSL-сертификатов при использовании прокси-сервера разработки с приложениями .NET, работающими в контейнерах Docker.
Настройка сертификата прокси-сервера разработки в контейнере Docker
Чтобы разрешить прокси-серверу разработки проверять HTTPS-запросы, можно настроить SSL-сертификат Прокси-сервера разработки как доверенный в контейнере Docker.
Внимание
Так как Docker не сохраняет изменения в контейнере после закрытия контейнера, необходимо повторять эти действия при каждом запуске контейнера. Чтобы избежать этого, создайте пользовательский образ Docker со следующими шагами.
Сначала экспортируйте сертификат прокси-сервера разработки в PEM.
Чтобы экспортировать сертификат прокси-сервера разработки в PEM в Windows, вам потребуется openssl. В этом примере предполагается, что вы используете openssl, который предоставляется вместе с git, но вы также можете установить его отдельно.
Настройте каталог установки прокси-сервера разработки и 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"
При появлении запроса на ввод пароля нажмите клавишу ВВОД , не вводя ничего.
# 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
Игнорировать проверку SSL-сертификата в приложении .NET
Другой способ обработки SSL-сертификатов при использовании прокси-сервера разработки с приложениями .NET, работающими в контейнерах Docker, заключается в том, чтобы игнорировать проверку SSL-сертификата в приложении. Этот подход требует изменения кода приложения.
В приложении добавьте следующий код, чтобы игнорировать проверку SSL-сертификата:
ServicePointManager.ServerCertificateValidationCallback = (sender, certificate, chain, sslPolicyErrors) => true;
Внимание
Перед развертыванием приложения в рабочей среде обязательно удалите этот код.