HTTPS를 통해 Docker를 사용하여 ASP.NET Core 이미지 호스팅

작성자: Rick Anderson

ASP.NET Core는 기본적으로 HTTPS를 사용합니다. HTTPS는 신뢰, ID 및 암호화에 인증서를 사용합니다.

이 문서에서는 .NET CLI(명령줄 인터페이스)를 사용하여 HTTPS로 미리 빌드된 컨테이너 이미지를 실행하는 방법을 설명합니다. Visual Studio를 사용하여 개발 중인 Docker를 실행하는 방법에 대한 지침은 HTTPS를 통해 Docker를 사용하여 ASP.NET Core 애플리케이션 개발을 참조하세요.

이 샘플에서는 Docker 17.06 이상의 Docker 클라이언트가 필요합니다.

필수 조건

현재 .NET SDK입니다.

인증서

도메인에 대한 프로덕션 호스팅을 위해서는 인증 기관의 인증서가 필요합니다. Let's Encrypt는 무료 인증서를 제공하는 인증 기관입니다.

이 문서에서는 자체 서명된 개발 인증서를 사용하여 미리 빌드된 이미지를 localhost에서 호스팅합니다. 지침은 프로덕션 인증서를 사용하는 것과 유사합니다. dotnet dev-certs에서 생성된 인증서는 localhost에서만 사용되며 Kubernetes와 같은 환경에서는 사용하지 않아야 합니다. Kubernetes 클러스터 내에서 HTTPS를 지원하려면 클러스터에서 TLS 인증서 관리에서 제공하는 도구를 사용하여 Pod 내에서 TLS를 설치합니다.

dotnet dev-certs를 사용하여 개발 및 테스트를 위한 자체 서명된 인증서를 만듭니다.

프로덕션 인증서의 경우:

  • dotnet dev-certs 도구는 필수 항목이 아닙니다.
  • 지침에 사용되는 위치에 인증서를 저장할 필요는 없습니다. 사이트 디렉터리 내에 인증서를 저장하는 것은 권장되지 않지만 모든 위치가 작동해야 합니다.

다음 섹션에 포함된 지침은 Docker의 -v 명령줄 옵션을 사용하여 컨테이너에 인증서를 탑재합니다. DockerfileCOPY 명령을 사용하여 컨테이너 이미지에 인증서를 추가할 수 있지만 권장되지는 않습니다. 다음과 같은 이유로 인증서를 이미지로 복사하는 것은 권장되지 않습니다.

  • 개발자 인증서를 사용하여 테스트하는 데 동일한 이미지를 사용하는 것은 어렵습니다.
  • 프로덕션 인증서를 사용하여 호스팅하는 데 동일한 이미지를 사용하는 것은 어렵습니다.
  • 인증서 공개에는 상당한 위험이 있습니다.

HTTPS를 통해 미리 빌드된 컨테이너 이미지 실행

운영 체제 구성에 대해 다음 지침을 따르십시오.

Linux 컨테이너를 사용한 Windows

인증서 생성 및 로컬 컴퓨터 구성:

dotnet dev-certs https -ep %USERPROFILE%\.aspnet\https\aspnetapp.pfx -p <CREDENTIAL_PLACEHOLDER>
dotnet dev-certs https --trust

위의 명령에서 <CREDENTIAL_PLACEHOLDER>를 암호로 바꿉니다.

명령 셸에서 HTTPS용으로 구성된 ASP.NET Core를 사용하여 컨테이너 이미지를 실행합니다.

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>를 암호로 바꿉니다.

HTTPS용으로 구성된 ASP.NET Core를 사용하여 컨테이너 이미지를 실행합니다.

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로 대체합니다.

HTTPS용으로 구성된 ASP.NET Core를 사용하여 컨테이너 이미지를 실행합니다.

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(HTTPS를 통해 Docker를 사용하여 ASP.NET Core 애플리케이션 개발)

Docker 컨테이너에서 HTTPS를 사용하여 ASP.NET Core 애플리케이션을 개발하는 방법에 대한 정보 및 샘플은 HTTPS를 통해 Docker를 사용하여 ASP.NET Core 애플리케이션 개발을 참조하세요.

참고 항목