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 명령줄 옵션을 사용하여 컨테이너에 인증서를 탑재하는 방법을 설명합니다. Dockerfile의 COPY 명령으로 컨테이너 이미지에 인증서를 추가할 수 있지만 권장되지는 않습니다. 다음과 같은 이유로 인증서를 이미지로 복사하는 것은 권장되지 않습니다.

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

HTTPS를 사용하여 미리 빌드된 컨테이너 이미지 실행

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

Linux 컨테이너를 사용하는 Windows

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

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

위의 명령에서 <CREDENTIAL_PLACEHOLDER>를 암호로 대체합니다.

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

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=443 -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을 사용하는 경우 탑재 경로의 유효성을 검사하여 인증서가 올바르게 로드되는지 확인합니다.

Note

Kestrel/HTTP.sys 엔드포인트 구성의 포트를 설정하는 HTTPS_PORTS 구성 키 및 ASPNETCORE_HTTPS_PORTS 환경 변수와, HTTPS 리디렉션 미들웨어의 포트를 설정하는 HTTPS_PORT 구성 키 및 ASPNETCORE_HTTPS_PORT 환경 변수를 혼동하지 마세요.

macOS 또는 Linux

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

dotnet dev-certs https -ep ${HOME}/.aspnet/https/aspnetapp.pfx -p <CREDENTIAL_PLACEHOLDER>
dotnet dev-certs https --trust

Linux에서는 dotnet dev-certs https --trust .NET 9 이상 SDK가 필요합니다. .NET 8.0.401 또는 이전 SDK의 Linux는 인증서 신뢰에 대한 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=443 -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>를 암호로 바꿉니다. 암호는 인증서에 사용된 암호와 일치해야 합니다.

Note

Kestrel/HTTP.sys 엔드포인트 구성의 포트를 설정하는 HTTPS_PORTS 구성 키 및 ASPNETCORE_HTTPS_PORTS 환경 변수와, HTTPS 리디렉션 미들웨어의 포트를 설정하는 HTTPS_PORT 구성 키 및 ASPNETCORE_HTTPS_PORT 환경 변수를 혼동하지 마세요.

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=443 -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 애플리케이션 개발을 참조하세요.

참고 항목

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 명령줄 옵션을 사용하여 인증서를 컨테이너에 탑재하는 방법을 설명합니다. Dockerfile에서 COPY 명령으로 컨테이너 이미지에 인증서를 추가할 수 있지만 권장되지는 않습니다. 다음과 같은 이유로 인증서를 이미지로 복사하는 것은 권장되지 않습니다.

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

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://+:443;http://+" -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://+:443;http://+" -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 컨테이너를 사용하는 경우

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

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

위의 명령에서 <CREDENTIAL_PLACEHOLDER>를 암호로 바꿉니다. PowerShell을 사용하는 경우 %USERPROFILE%을 $env:USERPROFILE로 대체합니다.

ASP.NET Core가 HTTPS용으로 구성된 상태에서 컨테이너 이미지를 실행합니다.

docker pull mcr.microsoft.com/dotnet/samples:aspnetapp
docker run --rm -it -p 8000:80 -p 8001:443 -e ASPNETCORE_URLS="https://+:443;http://+" -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>는 인증서 기본 암호의 자리 표시자입니다.

암호는 인증서에 사용된 암호와 일치해야 합니다. PowerShell을 사용하는 경우 %USERPROFILE%을 $env:USERPROFILE로 대체합니다.

HTTPS를 통해 Docker를 사용하여 ASP.NET Core 애플리케이션 개발

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

참고 항목