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

Рик Андерсон

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

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

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

Предварительные требования

Текущий .NET SDK.

Сертификаты

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

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

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

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

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

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

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

Запуск предварительно собранных образов контейнеров через 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=443 -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 проверьте путь монтирования, чтобы убедиться, что сертификат загружается правильно.

Note

Не путайте ключ конфигурации HTTPS_PORTS и переменную среды ASPNETCORE_HTTPS_PORTS, которые задают порты для конфигурации конечных точек Kestrel/HTTP.sys, с ключом конфигурации HTTPS_PORT и переменной среды ASPNETCORE_HTTPS_PORT, которые задают порт для промежуточного ПО перенаправления HTTPS.

macOS или Linux

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

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

Для Linux dotnet dev-certs https --trust требуется пакет SDK для .NET 9 или более поздней версии. Для Linux в SDK .NET 8.0.401 или более ранней версии обратитесь к документации вашего дистрибутива 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=443 -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> на пароль. Пароль должен совпадать с паролем, используемым для сертификата.

Note

Не путайте ключ конфигурации HTTPS_PORTS и переменную среды ASPNETCORE_HTTPS_PORTS, которые задают порты для конфигурации конечных точек Kestrel/HTTP.sys, с ключом конфигурации HTTPS_PORT и переменной среды ASPNETCORE_HTTPS_PORT, которые задают порт для промежуточного ПО перенаправления HTTPS.

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=443 -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.

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

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

См. также

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

В этом документе объясняется, как запускать предварительно созданные образы контейнеров по HTTPS с помощью интерфейса командной строки .NET (CLI). Инструкции по запуску Docker в процессе разработки с помощью Visual Studio см. в статье «Разработка приложений ASP.NET Core с помощью Docker по протоколу HTTPS».

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

Предварительные требования

Текущий .NET SDK.

Сертификаты

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

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

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

Для продакшн-сертификатов:

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

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

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

Запуск предварительно собранных образов контейнеров по 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://+:443;http://+" -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://+:443;http://+" -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://+:443;http://+" -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.

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

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

См. также