Поделиться через


Использование 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 при отладке в контейнере.

  1. С помощью средства dev-certs проверяется наличие доверенного сертификата разработки на хост-компьютере.

  2. Экспортирует сертификат %APPDATA%\ASP.NET\Https в безопасный пароль, хранящийся в хранилище секретов пользователя для этого конкретного приложения.

  3. Том подключает следующие каталоги:

    • *%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.