bg-tutorials

Como Instalar um Certificado SSL no Node.js

Neste tutorial, você aprenderá como instalar um certificado SSL no Node.js usando o módulo integrado https. Diferente de um servidor web como Apache ou Nginx, o Node.js carrega seu certificado, chave privada e cadeia de CA diretamente em JavaScript, portanto a “instalação” acontece dentro do código da sua aplicação.

Gerar um código CSR no Node.js

Se você ainda não solicitou um certificado SSL, primeiro precisa gerar um CSR (Certificate Signing Request). O CSR é um pequeno bloco de texto codificado que contém seus dados de contato e chave pública, e você o envia à Autoridade Certificadora ao fazer o pedido. Você tem duas opções:

Envie o CSR à Autoridade Certificadora durante o seu pedido. Depois que a CA validar e emitir seu certificado SSL, prossiga com a instalação abaixo.

Instalar um certificado SSL no Node.js

Etapa 1: Prepare seus arquivos de certificado

Após a validação, a Autoridade Certificadora envia por e-mail os arquivos do certificado. Extraia o arquivo compactado. Você deve ter:

  • yourdomain.crt, o certificado do seu domínio principal.
  • yourdomain.ca-bundle, os certificados intermediários (e raiz) que compõem o pacote de CA.
  • yourdomain.key, a chave privada que você gerou junto com o CSR.

Os navegadores devem receber a cadeia intermediária, não apenas o certificado do seu domínio, ou alguns clientes rejeitarão a conexão. A forma mais limpa de servir a cadeia no Node.js é combinar seu certificado e o pacote de CA em um único arquivo de cadeia completa:

cat yourdomain.crt yourdomain.ca-bundle > fullchain.crt

Coloque os arquivos fullchain.crt e yourdomain.key em um local que sua aplicação possa ler, e mantenha a chave privada legível apenas pelo usuário que executa o Node.js.

Etapa 2: Crie um servidor HTTPS no Node.js

Crie um arquivo de servidor. Para esta demonstração, o chamamos de https_server.js, mas você pode usar qualquer nome de arquivo. O exemplo abaixo usa CommonJS (require), que funciona em todas as versões suportadas do Node.js. Substitua os caminhos em negrito pelos seus próprios:

const https = require('https');
const fs = require('fs');

const options = {
  key: fs.readFileSync('/path/to/private.key'),
  cert: fs.readFileSync('/path/to/fullchain.crt'),
  // Recommended TLS hardening (2026): never negotiate below TLS 1.2
  minVersion: 'TLSv1.2'
};

https.createServer(options, (req, res) => {
  res.writeHead(200);
  res.end('Welcome to a Node.js HTTPS servern');
}).listen(443);

Você precisa substituir as partes em negrito pelas suas próprias informações:

  • /path/to/private.key: o caminho completo para o arquivo da sua chave privada.
  • /path/to/fullchain.crt: o caminho completo para o arquivo de cadeia completa criado na Etapa 1.

Nota sobre a porta: o HTTPS usa a porta 443 por padrão. Vincular-se a ela requer privilégios elevados, portanto, por trás de um proxy reverso ou em desenvolvimento, você pode preferir uma porta alta, como 8443. Basta alterar o valor passado para listen().

Prefere módulos ES? Se o seu projeto usa "type": "module" no package.json (ou um arquivo .mjs), use a sintaxe import. As opções de TLS são idênticas:

import https from 'node:https';
import fs from 'node:fs';

const options = {
  key: fs.readFileSync('/path/to/private.key'),
  cert: fs.readFileSync('/path/to/fullchain.crt'),
  minVersion: 'TLSv1.2'
};

https.createServer(options, (req, res) => {
  res.writeHead(200);
  res.end('Welcome to a Node.js HTTPS servern');
}).listen(443);

Alternativa: passe a cadeia com a opção ca:. Se preferir manter os arquivos separados em vez de criar um arquivo de cadeia completa, deixe cert apontando para o certificado do seu domínio e forneça os intermediários por meio de um array ca:

const options = {
  key: fs.readFileSync('/path/to/private.key'),
  cert: fs.readFileSync('/path/to/yourdomain.crt'),
  ca: [
    fs.readFileSync('/path/to/intermediate.crt'),
    fs.readFileSync('/path/to/ca_bundle.crt')
  ],
  minVersion: 'TLSv1.2'
};

Usando Express? Passe seu app Express como o manipulador de requisições. As opções do certificado permanecem exatamente as mesmas:

const express = require('express');
const https = require('https');
const fs = require('fs');

const app = express();
app.get('/', (req, res) => res.send('Hello over HTTPS'));

const options = {
  key: fs.readFileSync('/path/to/private.key'),
  cert: fs.readFileSync('/path/to/fullchain.crt'),
  minVersion: 'TLSv1.2'
};

https.createServer(options, app).listen(443);

Etapa 3: Inicie seu servidor HTTPS Node.js

Execute o seguinte comando para iniciar a aplicação:

node https_server.js

Sua aplicação agora serve tráfego via HTTPS. Para uma implantação em produção, execute-a sob um gerenciador de processos (por exemplo, PM2 ou um serviço systemd) para que ela reinicie automaticamente e sobreviva a reinicializações.

Etapa 4: Teste sua instalação SSL

Teste sua instalação SSL em busca de possíveis erros ou vulnerabilidades usando uma de nossas ferramentas de verificação SSL. Você também pode confirmar a cadeia pela linha de comando:

echo | openssl s_client -connect yourdomain.com:443 -servername yourdomain.com 2>/dev/null | openssl x509 -noout -issuer -dates

Isso exibe o emissor do certificado e as datas de validade, confirmando que seu servidor Node.js está apresentando o certificado correto.

Onde comprar um certificado SSL para Node.js?

A SSL Dragon é sua fonte para todas as suas necessidades de SSL. Oferecemos alguns dos preços mais baixos do mercado em toda a nossa linha de produtos SSL, e fizemos parceria com as melhores marcas de SSL do setor para garantir forte segurança e suporte dedicado. Todos os nossos certificados SSL são totalmente compatíveis com aplicações Node.js.

Emissão rápida, criptografia forte, 99,99% de confiança dos navegadores, suporte dedicado e garantia de reembolso de 25 dias.

Perguntas Frequentes

Como habilito o HTTPS no Node.js?

Use o módulo integrado https. Leia sua chave privada e o certificado de cadeia completa com fs.readFileSync(), passe-os como as opções key e cert para https.createServer() e chame .listen(443). O Node.js cuida do handshake TLS para você; não há um servidor web separado para configurar.

Preciso da opção ca no Node.js?

Você precisa que a cadeia intermediária seja servida, mas não necessariamente precisa da opção ca para isso. A abordagem mais simples é concatenar o certificado do seu domínio e o pacote de CA em um único arquivo de cadeia completa e apontar cert para ele. Use o array ca apenas se preferir manter o certificado e os intermediários em arquivos separados.

Por que meu servidor Node.js falha ao se vincular à porta 443?

No Linux e no macOS, portas abaixo de 1024 são privilegiadas. Vincular-se diretamente à porta 443 requer permissões elevadas, motivo pelo qual muitas configurações executam o Node.js em uma porta alta, como 8443, atrás de um proxy reverso (Nginx ou um balanceador de carga) que termina ou encaminha o TLS. Para desenvolvimento, basta alterar o valor passado para listen().

Posso usar import em vez de require para o servidor HTTPS?

Sim. O CommonJS (require) funciona em todas as versões suportadas do Node.js, mas se o seu projeto estiver configurado como um módulo ES (“type”: “module” no package.json ou um arquivo .mjs), você pode usar import https from ‘node:https’ em vez disso. As opções de TLS são idênticas de qualquer forma.

Como verifico se o certificado SSL está funcionando no Node.js?

Abra seu site em um navegador e verifique o cadeado, execute-o através de nossas ferramentas de verificação SSL, ou consulte a partir do terminal com echo | openssl s_client -connect yourdomain.com:443 -servername yourdomain.com para inspecionar o certificado que o servidor apresenta.

Conclusão

Instalar um certificado SSL no Node.js resume-se a construir um certificado de cadeia completa, lê-lo junto com sua chave privada com fs.readFileSync(), passá-los para https.createServer() com minVersion: ‘TLSv1.2’, e iniciar a aplicação com node https_server.js.

Precisa de um certificado primeiro? Confira nossos certificados SSL.

Economize 10% em certificados SSL ao fazer seu pedido hoje!

Emissão rápida, criptografia forte, 99,99% de confiança no navegador, suporte dedicado e garantia de reembolso de 25 dias. Código do cupom: SAVE10

Uma imagem detalhada de um dragão em voo
Escrito por

Redator de conteúdo experiente, especializado em certificados SSL. Transformação de tópicos complexos de segurança cibernética em conteúdo claro e envolvente. Contribua para melhorar a segurança digital por meio de narrativas impactantes.