Introducción

  • Queremos levantar un servidor HTTPS con Node.
  • Queremos usar certificados firmados por Let’s Encrypt (no autofirmados)
  • Usaremos el cliente acme.sh (en modo standalone) por su sencillez
  • Mejor ser root (aunque se supone que no es necesario serlo)

Pasos

  • Instalar el cliente acme
    https://github.com/Neilpang/acme.sh

  • Emitir un certificado para el dominio (en este ejemplo estaríamos solicitando un certificado para el dominio example.com)

acme.sh --issue --standalone -d example.com
  • Generar certificados pem
acme.sh --install-cert -d example.com \
--cert-file      /ruta/a/clave/publica/cert.pem  \
--key-file       /ruta/a/clave/privada/key.pem  \
--fullchain-file /ruta/a/toda/la/cadena/fullchain.pem
  • Copiar los ficheros cert.pem y key.pem al destino

  • Código mínimo javascript (cambiar la ruta de key.pem y cert.pem a la indicada en el punto anterior)

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

var options = {
  key: fs.readFileSync('key.pem'),
  cert: fs.readFileSync('cert.pem')
};

var app = express();

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

app.get("/", (req, res) => {
});

Posiles problemas

  • Si nuestro servidor está detrás de un router, es posible que sea necesario abrir el puerto 80 para conseguir el certificado.

  • Hay que revisar la renovación de los certificados

  • En el mismo equipo no debe haber otro servidor HTTP ya que puede interferir en el modo standalone de acme.sh

Referencias

https://github.com/Neilpang/acme.sh