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

I've been building and managing websites for over 20 years, with a heavy focus on the technical side of the cybersecurity, VPN, and SaaS industries. I know how sites are built from the ground up, which means I know how to secure them. Here at SSL Dragon, I write about web architecture, encryption, and keeping your infrastructure safe.

Avatar of Sergiu Rosca
Technical Review by Sergiu Rosca

Sergiu Rosca is the core web developer behind SSL Dragon. He manages the technical infrastructure, platform performance, and backend integrations that keep the site running smoothly and securely. At SSL Dragon, Sergiu shares practical insights on web development, site optimization, and technical troubleshooting.

All SSL Dragon installation guides are tested on live server environments and undergo a strict peer-review process to ensure your infrastructure remains secure. Read our full Editorial Policy.