Usar SSL para aplicativo conteinerizado ASP.NET Core
SSL (Secure Sockets Layer) fornece conexões seguras por HTTP (HTTPS). Esse método de proteção de conexões usa um certificado e, em um aplicativo conteinerizado, os mapeamentos de porta são diferentes para pontos de entrada seguros e não seguros.
As arquiteturas de aplicativos de vários contêineres variam de acordo com os requisitos de segurança. Alguns designs de aplicativo usam HTTPS para pontos de extremidade externos, mas HTTP para comunicação interna de um contêiner para outro. Ambientes de alta segurança podem usar HTTPS para todas as comunicações, mesmo entre contêineres que só podem ser acessados dentro de um perímetro externo seguro.
Portas e mapeamentos de portas
O Dockerfile contém diretivas para expor portas ao tráfego externo por HTTP não seguro ou HTTPS seguro. Além disso, o .NET 8 e posteriores executam o aplicativo conteinerizado como um usuário típico, mas em versões anteriores do .NET, os aplicativo conteinerizado são executados como administrador. Ao executar como administrador, os aplicativos têm acesso às portas privilegiadas 80 para tráfego HTTP e 443 tráfego HTTPS. Quando os aplicativos são executados como usuários sem privilégios elevados, eles usam as portas 8080 para HTTP e 8081 para HTTPS. As portas aparecem nos comandos EXPOSE no Dockerfile gerado pelo Visual Studio. As portas no contêiner especificado no Dockerfile são mapeadas para portas de host usando os mapeamentos especificados no arquivo de configurações de inicialização. Consulte Configurações de inicialização de ferramentas de contêiner Quando o contêiner está em execução, você pode exibir os mapeamentos de porta na janela Contêineres. Consulte Exibir e diagnosticar contêineres.
Certificados
As ferramentas de contêiner no Visual Studio permitem a depuração de um aplicativo do ASP.NET Core habilitado para SSL com um certificado de desenvolvimento, da mesma maneira que você esperaria que ele funcionasse sem contêineres. Para fazer isso acontecer, o Visual Studio adiciona mais algumas etapas para exportar o certificado e disponibilizá-lo para o contêiner. Este é o fluxo que o Visual Studio manipula para você ao depurar no contêiner:
Garante que o certificado de desenvolvimento local esteja presente e confiável no computador host por meio da ferramenta
dev-certs
.Exporta o certificado para
%APPDATA%\ASP.NET\Https
com uma senha segura armazenada no repositório de segredos do usuário para esse aplicativo específico.Montagens de volume nos seguintes diretórios:
*%APPDATA%\Microsoft\UserSecrets
*%APPDATA%\ASP.NET\Https
O ASP.NET Core procura um certificado que corresponda ao nome do assembly na pasta Https, por isso, ele é mapeado para o contêiner nesse caminho. O caminho do certificado e a senha podem ser definidos como alternativa usando variáveis de ambiente (ou seja, ASPNETCORE_Kestrel__Certificates__Default__Path
e ASPNETCORE_Kestrel__Certificates__Default__Password
) ou no arquivo json de segredos do usuário, por exemplo:
{
"Kestrel": {
"Certificates": {
"Default": {
"Path": "c:\\app\\mycert.pfx",
"Password": "strongpassword"
}
}
}
}
Se sua configuração permite builds conteinerizados e não conteinerizados, você deve usar as variáveis de ambiente, pois os caminhos são específicos para o ambiente de contêiner.
Para saber como usar o SSL com aplicativos ASP.NET Core em contêineres, confira Hospedagem de imagens do ASP.NET Core com o Docker via HTTPS.
Para obter um exemplo de código que demonstra a criação de certificados personalizados para um aplicativo de vários serviços que são confiáveis no host e nos contêineres para a comunicação HTTPS serviço a serviço, confira CertExample.