Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Sugestão] Implementação do HTTPS

Boa noite a todos!

Gostaria de contribuir em caso de mais estudantes ter o mesmo problema que me ocorreu.

Estou usando Ubuntu 24.04 numa VMWare Fusion 17 Pro.

Ao executar os códigos sugeridos pelo professor dentro do arquivo "server.js" obtia os seguintes erros:

node: internal/tls/secure-context:70 context. setCert(cert);

Error: error: 0480006C:PEM routines::no start line at node:internal/tls/secure-context:70:13 at Array. forEach (<anonymous») setCerts (node:internal/tls/secure-context:68:3) at configSecureContext (node:internal/tls/secure-context:186:5) at Object. createSecureContext (node:_tls_common:116:3) at Server.setSecureContext (node:_tls_wrap: 1486:27) at Server (node:_tls_wrap: 1350:8) at new Server (node:https:75:3) at Object.createServer (node:https:133:10) at Object. (/home/rschaskos/Desktop/DevOps/2-DevOps_Trafego_Segur •_Web/01. Comunicao_web/02.Preparando_Ambiente/api-alurabooks/server.js: 361:7) { library: 'PEM routines reason: 'no start line' code: "'ERR_OSSL_PEM_NO_START_LINE"

Node. js v20.13.1

Após muito pesquisar descobri que se tratava de um erro na forma que os arquivos do certificado eram criados. Sendo assim, utilizei a seguinte motologia na criação dos certificados de segurança:

Comando 1

openssl req -newkey rsa:2048 -new -nodes -keyout key.pem -out server.pem

Comando 2

openssl x509 -req -days 365 -in csr.pem -signkey key.pem -out server.crt

Dentro do arquivo "server.js" ao final acrescentei os devidos códigos com as alterações abaixo que ficaram dessa forma:

https.createServer(
{
  key: fs.readFileSync('./server.pem', 'utf8'),
  cert: fs.readFileSync('./server.crt', 'utf8')
}, server).listen(8000, () => 
{
  console.log("API disponível em https://localhost:8000")
})

Espero ter contribuido de forma positiva.

1 resposta
solução!

Olá Roney!

Muito obrigado por compartilhar sua experiência e solução detalhada.

O problema que você encontrou é bastante comum quando se trata de manipulação de certificados e chaves. A mensagem de erro no start line geralmente indica que o formato do arquivo não está correto ou que o arquivo não contém o tipo esperado de dados.

Sua solução de criar os certificados com os comandos do OpenSSL foi excelente e certamente ajudará outros estudantes que enfrentarem o mesmo problema. Vale ressaltar que a forma como você leu os arquivos de chave e certificado no server.js está correta e é uma prática comum para configurar um servidor HTTPS em Node.js.

Para reforçar, aqui estão os passos que você seguiu:

  1. Gerar uma nova chave e um certificado usando OpenSSL:

    openssl req -newkey rsa:2048 -new -nodes -keyout key.pem -out server.pem
    openssl x509 -req -days 365 -in csr.pem -signkey key.pem -out server.crt
    
  2. Modificar o arquivo server.js para utilizar os novos arquivos de chave e certificado:

    const https = require('https');
    const fs = require('fs');
    
    https.createServer({
      key: fs.readFileSync('./server.pem', 'utf8'),
      cert: fs.readFileSync('./server.crt', 'utf8')
    }, server).listen(8000, () => {
      console.log("API disponível em https://localhost:8000");
    });
    

Essas alterações garantem que o servidor está configurado corretamente para utilizar HTTPS.

Bons estudos!