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
Já 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:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Super DVD C# - Recursos de aprendizagens e vídeo aulas para C#
Curso Fundamentos da Programação Orientada a Objetos com VB .NET
Curso ASP .NET Core 2.0 - Vídeo Aulas - Macoratti
ASP .NET Core 2 - MiniCurso Básico - Macoratti
ASP .NET Core - Macoratti
ASP .NET Core - Implementando a segurança com ... - Macoratti
ASP .NET Core MVC - CRUD básico com ADO .NET - Macoratti
ASP .NET Core - Apresentando Razor Pages - Macoratti