다음을 통해 공유


컨테이너화된 ASP.NET Core 앱에 SSL 사용

SSL(Secure Sockets Layer)은 HTTP(HTTPS)를 통해 보안 연결을 제공합니다. 연결을 보호하는 이 방법은 인증서를 사용하며, 컨테이너화된 앱에서 포트 매핑은 보안 및 보안되지 않은 진입점에 대해 다릅니다.

다중 컨테이너 앱 아키텍처는 보안 요구 사항에 따라 달라집니다. 일부 앱 디자인은 외부 엔드포인트에 HTTPS를 사용하지만 한 컨테이너에서 다른 컨테이너로의 내부 통신에는 HTTP를 사용합니다. 보안이 높은 환경은 보안 외부 경계 내에서만 액세스할 수 있는 컨테이너 간에도 모든 통신에 HTTPS를 사용할 수 있습니다.

포트 및 포트 매핑

Dockerfile에는 보안되지 않은 HTTP 또는 보안 HTTPS를 통해 외부 트래픽에 포트를 노출하기 위한 지시문이 포함되어 있습니다. 또한 .NET 8 이상에서는 컨테이너화된 앱을 일반적인 사용자로 실행하지만 이전 .NET 버전에서는 컨테이너화된 앱이 관리자 권한으로 실행됩니다. 관리자 권한으로 실행하는 경우 앱은 HTTP 트래픽 및 443 HTTPS 트래픽에 대한 권한 있는 포트 80에 액세스할 수 있습니다. 앱이 관리자 권한 없이 사용자로 실행되면 HTTP용 포트 8080 및 HTTPS용 8081을 사용합니다. 포트는 Visual Studio에서 생성하는 Dockerfile의 EXPOSE 명령에 표시됩니다. Dockerfile에 지정된 컨테이너의 포트는 시작 설정 파일에 지정된 매핑을 사용하여 호스트 포트에 매핑됩니다. 컨테이너 도구 시작 설정을 참조하세요. 컨테이너가 실행 중인 경우 컨테이너 창에서 포트 매핑을 볼 수 있습니다. 컨테이너 보기 및 진단을 참조하세요.

인증서

Visual Studio의 컨테이너 도구는 컨테이너 없이 작동하는 것과 동일한 방식으로 개발 인증서를 사용하여 SSL 사용 ASP.NET Core 앱의 디버깅을 지원합니다. 이러한 작업을 수행하기 위해 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__PathASPNETCORE_Kestrel__Certificates__Default__Password) 또는 사용자 비밀 json 파일을 사용하여 정의할 수도 있습니다. 예:

{
  "Kestrel": {
    "Certificates": {
      "Default": {
        "Path": "c:\\app\\mycert.pfx",
        "Password": "strongpassword"
      }
    }
  }
}

구성에서 컨테이너화된 빌드와 컨테이너화되지 않은 빌드를 모두 지원하는 경우에는 경로가 컨테이너 환경과 관련되므로 환경 변수를 사용해야 합니다.

컨테이너에서 ASP.NET Core 앱과 함께 SSL을 사용하는 방법에 대한 자세한 내용은 HTTPS를 통해 Docker를 사용하여 ASP.NET Core 이미지 호스팅을 참조하세요.

호스트 및 컨테이너에서 신뢰할 수 있는 멀티서비스 앱에 대한 사용자 지정 인증서를 만들어 HTTPS 서비스 간 통신에 사용하는 코드 샘플은 CertExample입니다.