3
respostas

Cadastro e login quebrados após mudança para HTTPS

Pessoal, estou com um problema e queria compartilhar tudo o que já fiz, porque mesmo assim continuo com erro.

Na parte de configurar o HTTPS no backend, eu consegui acompanhar a aula normalmente e, a princípio, estava tudo certo. Porém, depois de alterar o server.js de HTTP para HTTPS, o Postman parou de conseguir fazer requisições.

Comecei a revisar a aula, testar várias coisas e buscar ajuda. Foi aí que percebi que o problema não estava só no Postman: o front-end também parou de funcionar, não conseguia mais logar nem cadastrar usuário.

Investigando o projeto do front (curso-react-alurabooks), encontrei o arquivo:
src/http/index.ts

Ele estava assim:

const http = axios.create({
baseURL: 'http://localhost:8000
',
headers: {
Accept: 'application/json',
Content: 'application/json'
}
})

Como o backend agora está rodando com HTTPS, eu alterei para:

const http = axios.create({
baseURL: 'https://localhost:8000
',
headers: {
Accept: 'application/json',
Content: 'application/json'
}
})

Depois disso, interrompi os terminais, regerei os certificados e rodei tudo novamente. Mesmo assim, ainda continuo com erro e não consigo logar nem cadastrar usuários.

Vi que algumas pessoas conseguiram solucionar o problema apenas alterando a baseURL, porém, continuo sem sucesso.

O erro que aparece no console do navegador é: net::ERR_EMPTY_RESPONSE

Se alguém tiver uma solução para este problema, agradeço imensamente.

3 respostas

Oi, Renan! Como vai?

O problema aqui é que o front-end está chamando HTTPS, mas o backend pode não estar respondendo corretamente nesse protocolo. O erro net::ERR_EMPTY_RESPONSE indica que a conexão foi aberta e fechada sem resposta.

O que você precisa verificar para corrigir:

1) Backend realmente rodando em HTTPS
Confirme no terminal se o servidor subiu usando HTTPS e na porta 8000. Se ele ainda estiver em HTTP, o front em HTTPS não vai conseguir resposta.

2) Certificados válidos e carregados
Se houver erro ao ler key.pem ou cert.pem, o servidor cai silenciosamente. Veja se o terminal mostra erro ao iniciar o backend.

3) BaseURL do Axios sem quebra de linha
No código que você compartilhou, havia uma quebra de linha na string. Isso quebra a URL e causa erro de conexão.

Deixe assim:

baseURL: 'https://localhost:8000'

O que esse código faz: aponta o front exatamente para o backend HTTPS ativo.

4) Postman e navegador confiam no certificado
Como o certificado é local, o navegador pode bloquear a resposta. Para testar, confira se o Postman funciona com a verificação SSL desativada. Se funcionar, o problema está na confiança do certificado no navegador.

Seguindo esses pontos, o login e o cadastro voltam a funcionar assim que o front e o backend estiverem no mesmo protocolo (HTTPS) e com o servidor respondendo corretamente.

Espero ter ajudado. Conte com o apoio do Fórum na sua jornada. Fico à disposição.

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado

Olá Rafaela, boa noite! Obrigado pela sua ajuda.

Parece que o problema não está no código nem na configuração do servidor, e sim na confiança do cliente (navegador/Postman) em relação ao certificado HTTPS.

Digo isso porque, ao desativar o “SSL Certificate Verification” no Postman, a requisição para
https://localhost:8000 é concluída normalmente. Além disso, nenhum erro aparece no terminal do backend, o que indica que o servidor HTTPS está rodando e respondendo corretamente.

Ou seja:

  • O backend está funcionando com HTTPS
  • As rotas respondem
  • O erro só acontece quando a verificação de certificado está ativa

Portanto, para que a página de login e cadastro estejam funcionais, está sendo necessário utilizar o HTTP ao invés de HTTPS.

Oi, Renan!

Obrigada por trazer mais contexto.

Como o backend já está funcionando em HTTPS, o que falta é o navegador confiar no certificado local. Ajustando isso, é provável que o login e o cadastro voltem a funcionar normalmente.

Caminho 1: gerar um certificado confiável para uso local

A forma mais tranquila é usar o mkcert, que cria certificados locais já reconhecidos pelo sistema e pelo navegador.

  1. Instale o mkcert (e o nss, quando necessário):
  • Windows (Chocolatey)
    choco install mkcert

  • macOS (Homebrew)
    brew install mkcert nss

  • Linux
    Instale via gerenciador de pacotes da sua distro (mkcert + nss).

  1. Registre a autoridade certificadora local (passo que faz o navegador confiar):

mkcert -install
  1. Gere certificados para o localhost:

mkcert localhost 127.0.0.1 ::1

Isso gera dois arquivos (.pem e -key.pem) que serão usados no backend.

  1. Configure o backend para usar esses certificados, algo parecido com isso:

const https = require('https');
const fs = require('fs');
const app = require('./app'); // onde seu Express está configurado

const options = {
  key: fs.readFileSync('./certs/localhost+X-key.pem'),
  cert: fs.readFileSync('./certs/localhost+X.pem'),
};

https.createServer(options, app).listen(8000, () => {
  console.log('HTTPS rodando em https://localhost:8000');
});
  1. No front-end, confirme a URL sem quebra de linha:

const http = axios.create({
  baseURL: 'https://localhost:8000',
  headers: {
    Accept: 'application/json',
    'Content-Type': 'application/json'
  }
});

Com isso, o navegador passa a confiar no backend e o HTTPS funciona normalmente no front.

Caminho 2 (Windows/macOS/Linux): confiar manualmente no certificado que você já gerou

Se você já tem cert.pem, você precisa importar esse certificado como confiável no sistema:

  • Windows: certmgr.mscAutoridades de Certificação Raiz ConfiáveisCertificadosImportar o cert.pem
  • macOS: Acesso às ChavesSistemaImportar o cert.pem → abrir o certificado → Confiar = Sempre Confiar
  • Linux (Debian/Ubuntu): copiar para /usr/local/share/ca-certificates/ e rodar sudo update-ca-certificates

Depois disso, feche e abra o navegador, rode o backend novamente e teste o login e o cadastro.

Fico à disposição. Abraços e bons estudos!