Redirecionando HTTP para HTTPS em aplicações Node.js. e em servidores

2 min de leitura
Patrocinado
Imagem de: Redirecionando HTTP para HTTPS em aplicações Node.js. e em servidores
Avatar do autor

Equipe TecMundo

@tec_mundo

Recentemente, tenho lidado com partes quebradas de minhas aplicações Node.js antigas que utilizavam serviços Watson e outros recursos da IBM Cloud que passaram por atualizações de segurança. Então, foram necessárias alterações para tornar minhas soluções compatíveis com esses updates.

Basicamente, essas falhas envolviam a necessidade de redirecionar HTTP para HTTPS, pois a web está adotando o protocolo de conexão HTTPS como padrão rapidamente. Tenha em mente que o mecanismo de redirecionamento de URL não suporta a ação para HTTPS.

Por isso, este passo a passo vai abordar quais implementações podem ser realizadas para resolver o problema. Também separei alguns links que podem ser úteis, caso você precise se aprofundar ainda mais no assunto.

For this reason, this how-to will cover what implementations can be done to fix this problem. I’ve also provided other useful links at the end of this how-to for additional deep dive information if needed.

Objetivos de aprendizado

Depois de completar este passo a passo, você poderá:

  • Entender as diferenças entre HTTP e HTTPS
  • Compreender a diferença entre redirecionamento de aplicação e redirecionamento de servidor
  • Aplicar correções no servidor
  • Aplicar correções no proxy para redirecionar aplicações Node.js

Requisitos

Conhecimento sobre estrutura de pastas Node.Js. Veja alguns pontos de partida:

Tempo estimado

Aproximadamente 30 minutos para acompanhar o passo a passo, ler e aplicar as alterações no código.

Passo a passo

Em Node.js, a aplicação é iniciada a partir de um arquivo do servidor e ouve um port dedicado (ex.: 3000) para estabelecer conexão. A aplicação trará respostas de solicitações feitas para a URL raiz (ex.: / ou /login). Se o caminho estiver errado, mostrará uma mensagem de erro (404 Not Found).

Utilizando proxies nos headers, podemos checar os pedidos de protocolo recebidos e redirecionar a página de acordo com o esperado. É preciso apenas implementar redirecionamento, não SSL ou qualquer tipo de criptografia, já que o HTTPS se comporta da mesma maneira que o HTTP, exceto pelo fato de que suas solicitações são transmitidas por uma conexão segura TLS/SSL. Isso significa que a negociação de criptografia e a resposta enviada de solicitação/recebimento entre cliente e web server são as mesmas, mas no HTTPS são feitas por TLS/SSL.

Há várias maneiras de direcionar a troca do proxy. Vamos listar algumas delas:

app.get("*", function(request, response){

  response.redirect("https://" + request.headers.host + request.url);

});

ou

app.use(function(request, response){

  if(!request.secure){

    response.redirect("https://" + request.headers.host + request.url);

  }

});

Outra maneira de fazer isso é empacotando o redirecionamento em if(request.protocol === "http"){} no lugar de if(!request.secure){} .

É possível, também, habilitar um proxy de confiança para utilizar headers x-Forwarded-* . Para isso, basta adicionar o seguinte código ao código demonstrado acima:

app.enable("trust proxy");

No servidor, é mais interessante executar o Node.js Express, principalmente de produção, por trás de um proxy reverso, como Nginx or HAProxy, já que nesse caso, normalmente, o bulk é realizado. No caso de Nginx, uma configuração SSL é necessária:

server {

  listen 443 ssl;

  server_name example.com www.example.com;

  # ssl configuration

  ssl on;

  ssl_certificate /path/to/certificate.crt;

  ssl_certificate_key /path/to/private.key;

  if ($http_host = www.example.com) {

    return 301 https://example.com$request_uri;

  }

}

É importante mencionar que as configurações acima mencionadas são utilizadas quando se executa a aplicação de produção. Ao rodar a aplicação localmente, é indicado desabilitar esses parâmetros.

Resumo

Há muitas maneiras de configurar o redirecionamento URL ou ajustar a rota de redirecionamento HTTP para HTTPS. Esperamos que este passo a passo ajude você a encontrar a mais apropriada para seu caso.

Continue acompanhando nossas dicas de soluções em outros guias para resolver esse problema com as soluções mais recentes, além das mencionadas aqui.

...

Quer ler mais conteúdo especializado de programação? Conheça a IBM Blue Profile e tenha acesso a matérias exclusivas, novas jornadas de conhecimento e testes personalizados. Confira agora mesmo, consiga as badges e dê um upgrade na sua carreira!

Comentários

Conteúdo disponível somente online
Redirecionando HTTP para HTTPS em aplicações Node.js. e em servidores