ASP .NET Core 2.x - Configurando o HTTPS


 Hoje veremos como 'configurar' o HTTPS na ASP .NET Core 2.1

O HTTPS já estava disponível na ASP .NET Core 1.1, mas não era tão simples usar e configurar. Na versão 2.1 ele faz parte da configuração padrão sendo vísivel e presente aos desenvolvedores quando da criação de um novo projeto.

Vamos então verificar como ele esta configurado e como podemos customizar essa configuração.

Criando um novo projeto ASP .NET Core 2.1

Vamos abrir um terminal de prompt de comandos (cmd) e iniciar verificando a versão do .NET SDK instalado digitando : dotnet --version

Agora vamos fazer o seguinte:

A seguir temos o resultado da execução do comando dotnet run que cria e executa uma nova aplicação chamada demohttps.

Foram usadas as configurações do ambiente de desenvolvimento e já temos habilitado o https para rodar a aplicação:



Observe que temos duas URLs distintas nas quais o Kestrel esta atendendo:

Abrindo o arquivo Startup.cs no Visual Studio Code, percebemos que no método Configure existem novos middlewares usados para preparar o projeto para usar o HTTPS.



No modo de ambiente de produção e armazenamento temporário, existe o middleware: app.UseHsts()

Ele habilita o HSTS (HTTP Strinct Transport Protocol), que é um recurso HTTP/2 para evitar ataques man-in-the-middle, e , informa ao navegador para armazenar em cache o certificado para os cabeçalhos de host específicos e para um intervalo de tempo específico. Se o certificado mudar antes que o intervalo de tempo terminar, algo estará errado com a página.

O próximo novo middleware redireciona todas as solicitações sem HTTPS para usar a versão HTTPS: app.UseHttpsRedirection()

Assim, se você invocar http://localhost:5000, será redirecionado imediatamente para https://localhost: 5001.Isso faz sentido se você quiser impor HTTPS.

Portanto, da perspectiva do ASP.NET Core, tudo é feito para executar sua aplicação usando HTTPS. Infelizmente, o certificado está faltando.

Para o modo de produção, você precisa comprar um certificado confiável válido e instalá-lo no armazenamento de certificados do Windows.

Para o modo de desenvolvimento, você pode criar um certificado de desenvolvimento usando o Visual Studio 2017 ou o .NET CLI.  (O VS 2017 cria um certificado para você automaticamente.)

Usando a ferramenta .NET CLI "dev-certs", você pode gerenciar seus certificados de desenvolvimento, como exportá-los, limpar todos os certificados de desenvolvimento, confiar no atual e assim por diante. Basta digitar o seguinte comando para obter informações mais detalhadas:

dotnet dev-certs https --help

o comando :  dotnet dev-certs https --trust

confia no certificado de desenvolvimento, adicionando-o ao armazenamento de certificados ou ao keychain no Mac. (No meu ambiente o certificado HTTPS já esta presente.)

No Windows, você deve usar o armazenamento de certificados para registrar o HTTPS certificado. Essa é a maneira mais segura em máquinas Windows.

Outra forma é armazenar o certificado protegido por senha diretamente na pasta da web ou em algum lugar no servidor da web. Isso torna muito fácil implantar o aplicativo em diferentes plataformas, porque o Linux e o Mac usam maneiras diferentes de armazenar o certificado.

Felizmente, existe uma maneira no ASP.NET Core de criar uma conexão HTTPS usando um certificado de arquivo armazenado no disco rígido. Podemos assim personalizar a configuração e substrituir o tratamento dado ao certificado padrão.

Para alterar o tratamento padrão, abra o Program.cs e dê uma olhada rápida no código, especialmente no método CreateWebHostBuilder:

Este método cria o WebHostBuilder padrão que possui muitas coisas pré-configuradas, e que funciona muito bem na maioria dos cenários.

Mas é possível substituir todas as configurações padrão por algumas configurações personalizadas. Precisamos informar ao servidor web do Kestrel qual host e porta ele precisa escutar e podemos configurar o ListenOptions para portas específicas. Neste ListenOptions, podemos usar HTTPS e passar o arquivo de certificado e uma senha para esse arquivo:

O código acima é apenas um exemplo para mostrar como fazer essa configuração, nele definimos o nome do certificado e a senha diretamente no código, o que não é uma boa prática. Seria melhor obtermos esses valores de um arquivo de configuração.

Natualmente você deve verificar para que o certificado seja protegido por senha usando uma senha longa ou, melhor ainda, uma frase-senha. Certifique-se de não armazenar a senha ou a frase secreta em um arquivo de configuração.

No modo de desenvolvimento, você deve usar o recurso user secrets para armazenar esses dados seguros e, no modo de produção, uma opção seria usar o Azure Key Vault.

Dessa forma a ASP .NET Core esta preparada para usar HTTPS e oferece opções de configurações fáceis de realizar.

(disse Jesus) - "E a vida eterna é esta: que te conheçam, a ti só, por único Deus verdadeiro, e a Jesus Cristo, a quem enviaste."
João 17:3

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

Referências:


José Carlos Macoratti