다음을 통해 공유


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

SSL(Secure Sockets Layer)은 HTTPS(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 핵심 앱 디버깅을 지원하며, 컨테이너 없이 작동할 것으로 예상하는 것과 동일합니다. 이를 위해 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을 사용하는 방법에 대한 자세한 내용은 Docker를 사용하는 ASP.NET Core 이미지 호스팅을(를) 참조하세요.

호스트 및 HTTPS 서비스 간 통신용 컨테이너에서 신뢰할 수 있는 다중 서비스 앱에 대한 사용자 지정 인증서를 만드는 방법을 보여 주는 코드 샘플은 CertExample참조하세요.