Una volta ottenuto un certificato SSL con Let's Encrypt per nginx possiamo utilizzarlo in Node.js.
Otteniamo il certificato in questo modo:
sudo certbot --nginx -d esempio.com
Copiamo quindi i file ottenuti dopo essere diventati utenti root:
cp /etc/letsencrypt/live/esempio.com/fullchain.pem /home/esempio/app/fullchain.pem
chown esempio:esempio /home/esempio/app/fullchain.pem
cp /etc/letsencrypt/live/esempio.com/privkey.pem /home/esempio/app/privkey.pem
chown esempio:esempio /home/esempio/app/privkey.pem
A questo punto possiamo usare il certificato in Node:
'use strict';
const express = require('express');
const fs = require('fs');
const https = require('https');
const port = process.env.PORT || 8080;
const app = express();
const sslOptions = {
key: fs.readFileSync('privkey.pem'),
cert: fs.readFileSync('fullchain.pem')
};
https.createServer(sslOptions, app).listen(port);
Infine, gestiamo il rinnovo del certificato creando un cronjob per l'utente root ( crontab -e ) con i seguenti comandi al suo interno:
+ + + + + /usr/bin/certbot renew --quiet
+ + + + + cat /etc/letsencrypt/live/esempio.com/fullchain.pem > /home/esempio/app/fullchain.pem && chown esempio:esempio /home/esempio/app/fullchain.pem
+ + + + + cat /etc/letsencrypt/live/esempio.com/privkey.pem > /home/esempio/app/privkey.pem && chown esempio:esempio /home/esempio/app/privkey.pem
Sostituite il carattere + con i valori appropriati e quindi riavviate il demone cron.