Размещение образов ASP.NET Core с помощью Docker по протоколу HTTPS

Автор: Рик Андерсон (Rick Anderson)

ASP.NET Core использует HTTPS по умолчанию. HTTPS использует сертификаты для доверия, удостоверения и шифрования.

В этом документе объясняется, как запускать предварительно созданные образы контейнеров с помощью ПРОТОКОЛА HTTPS с помощью интерфейса командной строки .NET (CLI). Инструкции по запуску Docker в разработке с помощью Visual Studio см. в статье "Разработка ASP.NET основных приложений с помощью Docker по протоколу HTTPS".

Для работы с этим примером требуется Docker 17.06 или клиент Docker более поздней версии.

Необходимые компоненты

Текущий пакет SDK для .NET.

Сертификаты

Сертификат из центра сертификации требуется для размещения в рабочей среде для домена. Let's Encrypt — это центр сертификации, который предлагает бесплатные сертификаты.

В этом документе используются самозаверяемые сертификаты разработки для размещения предварительно созданных образовlocalhost. Инструкции аналогичны использованию рабочих сертификатов. Созданный сертификат dotnet dev-certs используется только для использования и localhost не должен использоваться в среде, такой как Kubernetes. Для поддержки HTTPS в кластере Kubernetes используйте средства, предоставляемые управлением сертификатами TLS в кластере , для настройки TLS в модулях pod.

Используется dotnet dev-certs для создания самозаверяемых сертификатов для разработки и тестирования.

Для рабочих сертификатов:

  • Средство dotnet dev-certs не требуется.
  • Сертификаты не должны храниться в расположении, используемом в инструкциях. Любое расположение должно работать, хотя хранение сертификатов в каталоге сайта не рекомендуется.

Инструкции, содержащиеся в следующем разделе, подключают сертификаты томов к контейнерам с помощью параметра командной строки Docker -v . Вы можете добавить сертификаты в образы контейнеров с COPY помощью команды в Dockerfile, но не рекомендуется. Копирование сертификатов в образ не рекомендуется по следующим причинам:

  • Трудно использовать тот же образ для тестирования с сертификатами разработчика.
  • Трудно использовать тот же образ для размещения с рабочими сертификатами.
  • Существует значительный риск раскрытия сертификатов.

Выполнение предварительно созданных образов контейнеров с помощью HTTPS

Используйте следующие инструкции для конфигурации операционной системы.

Windows с помощью контейнеров Linux

Создайте сертификат и настройте локальный компьютер:

dotnet dev-certs https -ep %USERPROFILE%\.aspnet\https\aspnetapp.pfx -p <CREDENTIAL_PLACEHOLDER>
dotnet dev-certs https --trust

В предыдущих командах замените <CREDENTIAL_PLACEHOLDER> пароль.

Запустите образ контейнера с ASP.NET Core, настроенным для HTTPS, в командной оболочке:

docker pull mcr.microsoft.com/dotnet/samples:aspnetapp
docker run --rm -it -p 8000:80 -p 8001:443 -e ASPNETCORE_URLS="https://+;http://+" -e ASPNETCORE_HTTPS_PORTS=8001 -e ASPNETCORE_Kestrel__Certificates__Default__Password="<CREDENTIAL_PLACEHOLDER>" -e ASPNETCORE_Kestrel__Certificates__Default__Path=/https/aspnetapp.pfx -v %USERPROFILE%\.aspnet\https:/https/ mcr.microsoft.com/dotnet/samples:aspnetapp

В приведенном выше коде замените <CREDENTIAL_PLACEHOLDER> пароль. Пароль должен совпадать с паролем, используемым для сертификата.

При использовании PowerShell замените %USERPROFILE% на $env:USERPROFILE.

Примечание. Сертификат в данном случае должен быть файлом .pfx . .crt Использование или .key использование файла с паролем или без нее не поддерживается в примере контейнера. Например, при указании .crt файла контейнер может возвращать сообщения об ошибках, такие как "SSL в режиме сервера должен использовать сертификат с соответствующим закрытым ключом." При использовании WSL проверьте путь подключения, чтобы убедиться, что сертификат загружается правильно.

macOS или Linux

Создайте сертификат и настройте локальный компьютер:

dotnet dev-certs https -ep ${HOME}/.aspnet/https/aspnetapp.pfx -p <CREDENTIAL_PLACEHOLDER>
dotnet dev-certs https --trust

dotnet dev-certs https --trust поддерживается только в macOS и Windows. Необходимо доверять сертификатам в Linux таким образом, как поддерживается дистрибутивом. Скорее всего, необходимо доверять сертификату в браузере.

В предыдущих командах замените <CREDENTIAL_PLACEHOLDER> пароль.

Запустите образ контейнера с ASP.NET Core, настроенным для HTTPS:

docker pull mcr.microsoft.com/dotnet/samples:aspnetapp
docker run --rm -it -p 8000:80 -p 8001:443 -e ASPNETCORE_URLS="https://+;http://+" -e ASPNETCORE_HTTPS_PORTS=8001 -e ASPNETCORE_Kestrel__Certificates__Default__Password="<CREDENTIAL_PLACEHOLDER>" -e ASPNETCORE_Kestrel__Certificates__Default__Path=/https/aspnetapp.pfx -v ${HOME}/.aspnet/https:/https/ mcr.microsoft.com/dotnet/samples:aspnetapp

В приведенном выше коде замените <CREDENTIAL_PLACEHOLDER> пароль. Пароль должен совпадать с паролем, используемым для сертификата.

Windows с использованием контейнеров Windows

Создайте сертификат и настройте локальный компьютер:

dotnet dev-certs https -ep %USERPROFILE%\.aspnet\https\aspnetapp.pfx -p <CREDENTIAL_PLACEHOLDER>
dotnet dev-certs https --trust

В предыдущих командах замените <CREDENTIAL_PLACEHOLDER> пароль. При использовании PowerShell замените %USERPROFILE% на $env:USERPROFILE.

Запустите образ контейнера с ASP.NET Core, настроенным для HTTPS:

docker pull mcr.microsoft.com/dotnet/samples:aspnetapp
docker run --rm -it -p 8000:80 -p 8001:443 -e ASPNETCORE_URLS="https://+;http://+" -e ASPNETCORE_HTTPS_PORTS=8001 -e ASPNETCORE_Kestrel__Certificates__Default__Password="<CREDENTIAL_PLACEHOLDER>" -e ASPNETCORE_Kestrel__Certificates__Default__Path=c:\https\aspnetapp.pfx -v %USERPROFILE%\.aspnet\https:C:\https\ --user ContainerAdministrator mcr.microsoft.com/dotnet/samples:aspnetapp

ПРИМЕЧАНИЕ.<CREDENTIAL_PLACEHOLDER> Это заполнитель Kestrel для пароля сертификатов по умолчанию.

Пароль должен совпадать с паролем, используемым для сертификата. При использовании PowerShell замените %USERPROFILE% на $env:USERPROFILE.

Developing ASP.NET Core Applications with Docker over HTTPS (Разработка приложений ASP.NET Core с применением Docker по протоколу HTTPS)

Сведения о разработке приложений ASP.NET Core с помощью Docker по протоколу HTTPS см. в статье о разработке приложений ASP.NET Core с помощью HTTPS в контейнерах Docker.

См. также