bg-tutorials

Come installare un certificato SSL su Node.js

In questo tutorial imparerai come installare un certificato SSL su Node.js utilizzando il modulo integrato https. A differenza di un web server come Apache o Nginx, Node.js carica il tuo certificato, la chiave privata e la catena CA direttamente in JavaScript, quindi l'”installazione” avviene all’interno del codice della tua applicazione.

Generare un codice CSR in Node.js

Se non hai ancora richiesto un certificato SSL, devi prima generare una CSR (Certificate Signing Request). La CSR è un piccolo blocco di testo codificato che contiene i tuoi dati di contatto e la chiave pubblica, e lo invii alla Certificate Authority al momento dell’ordine. Hai due opzioni:

Invia la CSR alla Certificate Authority durante il tuo ordine. Dopo che la CA l’ha validata e ha emesso il tuo certificato SSL, prosegui con l’installazione qui sotto.

Installare un certificato SSL su Node.js

Passo 1: Prepara i file del certificato

Dopo la validazione, la Certificate Authority ti invia via email i file del certificato. Estrai l’archivio. Dovresti avere:

  • yourdomain.crt, il certificato del tuo dominio principale.
  • yourdomain.ca-bundle, i certificati intermedi (e root) che compongono il CA bundle.
  • yourdomain.key, la chiave privata generata insieme alla CSR.

I browser devono ricevere la catena intermedia, non solo il certificato del tuo dominio, altrimenti alcuni client rifiuteranno la connessione. Il modo più pulito per servire la catena in Node.js è combinare il tuo certificato e il CA bundle in un unico file full-chain:

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

Posiziona i file fullchain.crt e yourdomain.key in un punto in cui la tua app possa leggerli, e mantieni la chiave privata leggibile solo dall’utente che esegue Node.js.

Passo 2: Crea un server HTTPS in Node.js

Crea un file server. Per questa dimostrazione lo chiameremo https_server.js, ma puoi usare qualsiasi nome file. L’esempio seguente utilizza CommonJS (require), che funziona in ogni versione supportata di Node.js. Sostituisci i percorsi in grassetto con i tuoi:

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);

Devi sostituire le parti in grassetto con le tue informazioni:

  • /path/to/private.key: il percorso completo del file della tua chiave privata.
  • /path/to/fullchain.crt: il percorso completo del file full-chain creato al Passo 1.

Nota sulla porta: HTTPS utilizza per impostazione predefinita la porta 443. Associarsi ad essa richiede privilegi elevati, quindi dietro un reverse proxy o in fase di sviluppo potresti preferire una porta alta come 8443. Basta cambiare il valore passato a listen().

Preferisci i moduli ES? Se il tuo progetto utilizza "type": "module" in package.json (o un file .mjs), usa invece la sintassi import. Le opzioni TLS sono identiche:

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);

In alternativa: passa la catena con l’opzione ca:. Se preferisci mantenere i file separati invece di creare un file full-chain, lascia che cert punti al certificato del tuo dominio e fornisci gli intermedi tramite un 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'
};

Usi Express? Passa la tua app Express come gestore delle richieste. Le opzioni del certificato restano esattamente le stesse:

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);

Passo 3: Avvia il tuo server HTTPS Node.js

Esegui il seguente comando per avviare l’app:

node https_server.js

La tua applicazione ora serve il traffico tramite HTTPS. Per un ambiente di produzione, eseguila sotto un process manager (ad esempio PM2 o un servizio systemd) in modo che si riavvii automaticamente e resista ai riavvii del sistema.

Passo 4: Verifica la tua installazione SSL

Verifica la tua installazione SSL per individuare eventuali errori o vulnerabilità utilizzando uno dei nostri strumenti SSL Checker. Puoi anche confermare la catena dalla riga di comando:

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

Questo stampa l’emittente del certificato e le date di validità, confermando che il tuo server Node.js sta presentando il certificato corretto.

Dove acquistare un certificato SSL per Node.js?

SSL Dragon è la tua fonte per tutte le tue esigenze SSL. Offriamo alcuni dei prezzi più bassi sul mercato in tutta la nostra gamma di prodotti SSL, e ci siamo associati con i migliori marchi SSL del settore per una sicurezza solida e un supporto dedicato. Tutti i nostri certificati SSL sono pienamente compatibili con le applicazioni Node.js.

Emissione rapida, crittografia forte, fiducia del browser al 99,99%, supporto dedicato e una garanzia di rimborso di 25 giorni.

Domande frequenti

Come abilito HTTPS in Node.js?

Utilizza il modulo integrato https. Leggi la tua chiave privata e il certificato full-chain con fs.readFileSync(), passali come opzioni key e cert a https.createServer(), e chiama .listen(443). Node.js gestisce l’handshake TLS per te; non c’è un web server separato da configurare.

Ho bisogno dell’opzione ca in Node.js?

È necessario che la catena intermedia venga servita, ma non è necessariamente indispensabile l’opzione ca per farlo. L’approccio più semplice è concatenare il certificato del tuo dominio e il CA bundle in un unico file full-chain e far puntare cert ad esso. Usa l’array ca solo se preferisci mantenere il certificato e gli intermedi in file separati.

Perché il mio server Node.js non riesce ad associarsi alla porta 443?

Su Linux e macOS, le porte inferiori a 1024 sono privilegiate. Associarsi direttamente alla porta 443 richiede permessi elevati, motivo per cui molte configurazioni eseguono Node.js su una porta alta come 8443 dietro un reverse proxy (Nginx o un load balancer) che termina o inoltra il TLS. Per lo sviluppo, basta cambiare il valore passato a listen().

Posso usare import invece di require per il server HTTPS?

Sì. CommonJS (require) funziona in ogni versione supportata di Node.js, ma se il tuo progetto è configurato come modulo ES (“type”: “module” in package.json o un file .mjs), puoi usare invece import https from ‘node:https’. Le opzioni TLS sono identiche in entrambi i casi.

Come verifico che il certificato SSL funzioni su Node.js?

Apri il tuo sito in un browser e controlla il lucchetto, eseguilo attraverso i nostri strumenti SSL Checker, oppure interrogalo dal terminale con echo | openssl s_client -connect yourdomain.com:443 -servername yourdomain.com per ispezionare il certificato presentato dal server.

Conclusione

Installare un certificato SSL su Node.js si riduce a costruire un certificato full-chain, leggerlo insieme alla tua chiave privata con fs.readFileSync(), passarli a https.createServer() con minVersion: ‘TLSv1.2’, e avviare l’app con node https_server.js.

Hai bisogno prima di un certificato? Sfoglia i nostri certificati SSL.

Risparmia il 10% sui certificati SSL ordinando oggi stesso da SSL Dragon!

Emissione rapida, crittografia avanzata, affidabilità del browser al 99,99%, assistenza dedicata e garanzia di rimborso entro 25 giorni. Codice coupon: SAVE10

Un'immagine dettagliata di un drago in volo
Scritto da

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.