Размещение образов ASP.NET Core с помощью Docker по протоколу HTTPS
Автор: Рик Андерсон (Rick Anderson)
ASP.NET Core использует HTTPS по умолчанию. ПРОТОКОЛ HTTPS использует сертификаты для доверия identityи шифрования.
В этом документе объясняется, как запускать предварительно созданные образы контейнеров с помощью ПРОТОКОЛА 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
Для 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=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.
См. также
- Developing ASP.NET Core Applications with Docker over HTTPS (Разработка приложений ASP.NET Core с применением Docker по протоколу HTTPS)
dotnet dev-certs
ASP.NET Core использует HTTPS по умолчанию. ПРОТОКОЛ HTTPS использует сертификаты для доверия identityи шифрования.
В этом документе объясняется, как запускать предварительно созданные образы контейнеров с помощью ПРОТОКОЛА 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.
См. также
- Developing ASP.NET Core Applications with Docker over HTTPS (Разработка приложений ASP.NET Core с применением Docker по протоколу HTTPS)
dotnet dev-certs
ASP.NET Core