.NET

30 out, 2018

Desenvolvendo em ASP.NET Core com HTTPS e certificados auto-assinados

Publicidade

E aí, pessoal! Tudo bem?

Faz um tempo já que vejo notícias sobre o Google Chrome passar a considerar sites que ainda não utilizam HTTPS como inseguros, como nos links abaixo:

Agora, nada mais justo que já começarmos a trabalhar com https durante o desenvolvimento, correto? O ASP.NET Core, a partir da versão 2.1 facilita muito isso, mas temos alguns detalhes que acabam atrapalhando ou gerando um certo incômodo em nosso dia a dia.

Normalmente, queremos que nosso ambiente de desenvolvimento seja o mais próximo possível do ambiente de produção, incluindo URL e conteúdo, assim como trabalhar com HTTPS.

Incômodo

Trabalho com o Google Chrome no meu dia a dia, e tem momentos que o alerta de site não seguro dele, para meus sites locais, me irrita um pouco.

Assim como também atrapalha enquanto desenvolvo testes de UI, com o SpecFlow em modo headless, por exemplo, pois a tela de falha do certificado não permite que os testes sejam executados com sucesso.

Investigando um pouco na internet, encontrei uma solução dentro do próprio .NET Core para isso.

Solução

Vamos criar uma aplicação de exemplo, para validar a solução, com o comando abaixo:

Criando aplicação ASP.NET Core 2.1

Feito isso, subiremos a aplicação, entrando no diretório dela e executando o comando abaixo:

Executando a aplicação criada

Assim que a aplicação é carregada, podemos verificar no console que temos duas URLs para acesso: uma com bind em HTTP e outra HTTPS, conforme indicação em azul na imagem abaixo:

Aplicação em execução, com bind tanto em HTTP como HTTPS

Ao abrir a URL HTTPS no navegador, temos a mensagem de que o certificado do site não é confiável:

Chrome apresentando alerta sobre certificado não confiável para o ambiente de desenvolvimento.

Para resolver isso, vamos utilizar uma ferramenta já inclusa no CLI do .NET Core, que irá instalar os certificados de desenvolvimento como confiáveis na máquina. Para isso, basta executar o comando dotnet dev-certs. Abaixo temos o resultado da documentação do comando:

Comando dotnet dev-certs, para podermos manipular os certificados de desenvolvimento

Segundo a documentação, apenas precisamos executar o comando abaixo para que o sistema confie no certificado de desenvolvimento:

Habilitando os certificados de desenvolvimento como confiáveis

Ao executar o comando acima, temos um diálogo de confirmação de segurança, informando que o Windows não pode validar se o certificado pertence a uma autoridade de certificação conhecida, pois ele utiliza localhost como sendo essa entidade. Podemos confirmar a instalação clicando em “Sim”:

Confirmando a instalação dos certificados de desenvolvimento

Feito isso, vamos executar novamente nossa aplicação e acessar a URL HTTPS no browser. Desta vez, o navegador identificará o certificado como confiável, e não teremos a tela de alerta do Chrome, que em casos como uso do SpecFlow, pode atrapalhar o desenvolvimento de testes, além de ser bem irritante ter que ficar clicando para ignorar o certificado enquanto estamos desenvolvendo e testando nossa aplicação.

Aplicação em execução, agora com o certificado sendo reconhecido como seguro

Apenas reforçando, esta dica vale apenas para um ambiente local de desenvolvimento. Em caso de servidores ou exposição da aplicação na rede/internet, devemos sempre utilizar certificados adquiridos através de uma entidade certificadora confiável.

Bom, pessoal, esta foi uma dica rápida que achei interessante compartilhar com todos, visto que sofri um pouco com isso durante a criação de testes de UI automatizados.

Caso tenham dúvidas, não deixem de comentar.

Um abraço e até a próxima!