Hospedar imagens ASP.NET Core com o Docker Compose em HTTPS

O ASP.NET Core usa HTTPS por padrão. O HTTPS depende de certificados para confiança, identidade e criptografia.

Este documento explica como executar imagens de contêiner predefinidas com HTTPS.

Confira Como desenvolver aplicativos do ASP.NET Core com Docker por meio de HTTPS para cenários de desenvolvimento.

Esse exemplo instala o Docker 17.06 ou posterior do cliente do Docker.

Pré-requisitos

O SDK do .NET Core 2.2 ou posterior é necessário para algumas instruções incluídas neste documento.

Certificados

Um certificado de uma autoridade de certificação é necessário para uma hospedagem de produção para um domínio. Let's Encrypt é uma autoridade de certificação que oferece certificados gratuitos.

Este documento usa certificados de desenvolvimento autoassinados para hospedar imagens pré-criadas por meio de localhost. As instruções são semelhantes às do uso de certificados de produção.

Para certificados de produção:

  • A ferramenta dotnet dev-certs não é necessária.
  • Os certificados não precisam ser armazenados no local usado nas instruções. Armazene os certificados em qualquer local fora do diretório do site.

As instruções contidas na seção a seguir montam um volume de certificados em contêineres usando a propriedade volumes no docker-compose.yml. Você pode adicionar certificados em imagens de contêiner com um comando COPY em um Dockerfile, mas isso não é recomendado. A cópia de certificados em uma imagem não é recomendada pelos seguintes motivos:

  • Dificulta o uso da mesma imagem para testes com certificados de desenvolvedor.
  • Dificulta o uso da mesma imagem para Hospedagem com certificados de produção.
  • Existe um risco significativo de divulgação do certificado.

Como iniciar um contêiner com suporte a https usando o Docker Compose

Use as instruções a seguir para a configuração do seu sistema operacional.

Windows usando contêineres do Linux

Para gerar um certificado e configurar um computador local:

dotnet dev-certs https -ep "$env:USERPROFILE\.aspnet\https\aspnetapp.pfx"  -p $CREDENTIAL_PLACEHOLDER$
dotnet dev-certs https --trust

O comando anterior usando a CLI do .NET:

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

Nos comandos anteriores, substitua $CREDENTIAL_PLACEHOLDER$ por uma senha.

Crie um arquivo docker-compose.debug.yml com o seguinte conteúdo:

version: '3.4'

services:
  webapp:
    image: mcr.microsoft.com/dotnet/samples:aspnetapp
    ports:
      - 80
      - 443
    environment:
      - ASPNETCORE_ENVIRONMENT=Development
      - ASPNETCORE_URLS=https://+:443;http://+:80
      - ASPNETCORE_Kestrel__Certificates__Default__Password=password
      - ASPNETCORE_Kestrel__Certificates__Default__Path=/https/aspnetapp.pfx
    volumes:
      - ~/.aspnet/https:/https:ro

A senha especificada no arquivo do Docker Compose precisa corresponder à senha usada para o certificado.

Inicie o contêiner com o ASP.NET Core configurado para HTTPS:

docker-compose -f "docker-compose.debug.yml" up -d

macOS ou Linux

Para gerar um certificado e configurar um computador local:

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

O dotnet dev-certs https --trust só tem suporte no macOS e no Windows. No Linux você precisa confiar em certificados de uma maneira que seja compatível com a sua distribuição. É provável que você precise confiar no certificado do seu navegador.

Nos comandos anteriores, substitua $CREDENTIAL_PLACEHOLDER$ por uma senha.

Crie um arquivo docker-compose.debug.yml com o seguinte conteúdo:

version: '3.4'

services:
  webapp:
    image: mcr.microsoft.com/dotnet/samples:aspnetapp
    ports:
      - 80
      - 443
    environment:
      - ASPNETCORE_ENVIRONMENT=Development
      - ASPNETCORE_URLS=https://+:443;http://+:80
      - ASPNETCORE_Kestrel__Certificates__Default__Password=password
      - ASPNETCORE_Kestrel__Certificates__Default__Path=/https/aspnetapp.pfx
    volumes:
      - ~/.aspnet/https:/https:ro

A senha especificada no arquivo do Docker Compose precisa corresponder à senha usada para o certificado.

Inicie o contêiner com o ASP.NET Core configurado para HTTPS:

docker-compose -f "docker-compose.debug.yml" up -d

Windows que usa contêineres do Windows

Para gerar um certificado e configurar um computador local:

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

Nos comandos anteriores, substitua $CREDENTIAL_PLACEHOLDER$ por uma senha.

Crie um arquivo docker-compose.debug.yml com o seguinte conteúdo:

version: '3.4'

services:
  webapp:
    image: mcr.microsoft.com/dotnet/samples:aspnetapp
    ports:
      - 80
      - 443
    environment:
      - ASPNETCORE_ENVIRONMENT=Development
      - ASPNETCORE_URLS=https://+:443;http://+:80
      - ASPNETCORE_Kestrel__Certificates__Default__Password=password
      - ASPNETCORE_Kestrel__Certificates__Default__Path=C:\https\aspnetapp.pfx
    volumes:
      - ${USERPROFILE}\.aspnet\https:C:\https:ro

A senha especificada no arquivo do Docker Compose precisa corresponder à senha usada para o certificado.

Inicie o contêiner com o ASP.NET Core configurado para HTTPS:

docker-compose -f "docker-compose.debug.yml" up -d

Confira também