Использование SSL для контейнерных приложений ASP.NET Core
SSL (уровень безопасных сокетов) обеспечивает безопасные подключения по протоколу HTTP (HTTPS). Этот метод защиты подключений использует сертификат, а в контейнерном приложении сопоставления портов отличаются для защищенных и незащищенных точек входа.
Архитектура многоконтайнерных приложений зависит от требований безопасности. Некоторые проекты приложений используют HTTPS для внешних конечных точек, но HTTP для внутреннего взаимодействия между одним контейнером и другим. Среды высокой безопасности могут использовать ПРОТОКОЛ HTTPS для всех коммуникаций, даже между контейнерами, доступными только в защищенном внешнем периметре.
Сопоставления портов и портов
Dockerfile содержит директивы для предоставления портов внешнему трафику через незащищенный HTTP или безопасный HTTPS. Кроме того, .NET 8 и более поздних версий запуска контейнерного приложения в качестве обычного пользователя, но в более ранних версиях .NET контейнеризованные приложения запускаются от имени администратора. При запуске от имени администратора приложения имеют доступ к привилегированным портам 80 для HTTP-трафика и 443 HTTPS-трафика. Когда приложения работают от имени пользователей без повышенных привилегий, они используют порты 8080 для HTTP и 8081 для HTTPS. Порты отображаются в командах EXPOSE в Dockerfile, создаваемых Visual Studio. Порты в контейнере, указанном в Dockerfile, сопоставляются с узлами с помощью сопоставлений, указанных в файле параметров запуска. См . параметры запуска средств контейнеров. При запуске контейнера можно просмотреть сопоставления портов в окне "Контейнеры ". Просмотр и диагностика контейнеров.
Сертификаты
Инструменты для контейнеров в Visual Studio поддерживают отладку в приложениях ASP.NET Core с поддержкой SSL с использованием сертификата разработки так же, как и при работе без контейнеров. Для этого Visual Studio выполняет несколько дополнительных действий для экспорта сертификата и предоставления контейнеру доступа к нему. Ниже приведена процедура, выполняемая средой Visual Studio при отладке в контейнере.
С помощью средства
dev-certs
проверяется наличие доверенного сертификата разработки на хост-компьютере.Экспортирует сертификат
%APPDATA%\ASP.NET\Https
в безопасный пароль, хранящийся в хранилище секретов пользователя для этого конкретного приложения.Том подключает следующие каталоги:
*%APPDATA%\Microsoft\UserSecrets
*%APPDATA%\ASP.NET\Https
ASP.NET Core ищет сертификат, соответствующий имени сборки в папке Https , поэтому он сопоставляется с контейнером в этом пути. Путь к сертификату и пароль также можно определить с помощью переменных среды (ASPNETCORE_Kestrel__Certificates__Default__Path
и ASPNETCORE_Kestrel__Certificates__Default__Password
) или в JSON-файле секретных ключей пользователей, например следующим образом:
{
"Kestrel": {
"Certificates": {
"Default": {
"Path": "c:\\app\\mycert.pfx",
"Password": "strongpassword"
}
}
}
}
Если конфигурация поддерживает как контейнерные, так и неконтейнерные сборки, следует использовать переменные среды, так как пути зависят от среды контейнеров.
Дополнительные сведения о поддержке SSL в приложениях ASP.NET Core в контейнерах см. в разделе Размещение образов ASP.NET Core с Docker через HTTPS.
Пример кода, демонстрирующий создание пользовательских сертификатов для многослужбного приложения, доверенного на узле и в контейнерах для обмена данными между службами HTTPS, см. в разделе CertExample.