Generar un certificado SSL autofirmado para nodered (o cualquier aplicación)

En esta entrada vamos a explicar el paso a paso de generar un certificado SSL y su utilización en nodered. La creación es común para cualquier aplicación, después tienes que tener en cuenta que estos certificados no te servirán generalmente al ser autogenerados.

OpenSSL es una biblioteca de software, con todas las funciones que contiene una implementación de código abierto de los protocolos de Seguridad de la capa de transporte (TLS) y de la Capa de sockets seguros (SSL), que se utiliza para proteger la información transmitida a través de redes informáticas.

Instalar comando openssl en Centos 7

Lo que vamos ha necesitar es instalar el comando openssl, para ello vamos a instalarlo desde la fuentes.

Descargamos la última versión de OpenSSL (Para descargar la última versión solo hemos de visitar su página web e ir a la sección de descargas.)

wget https://ftp.openssl.org/source/old/1.1.1/openssl-1.1.1.tar.gz

Insalamos la herramientas necesarias para compilar:

yum install -y make gcc perl pcre-devel zlib-devel

Descomprimimos

tar xvf openssl-1.1.1.tar.gz

Accedemos al directorio

cd openssl-1.1.1

Indicamos los parametros de configuración, el comando consiste: prefix y openssldir establece las rutas de salida para OpenSSL.shared fuerza la creación de bibliotecas compartidas y zlib significa que la compresión se realizará mediante el uso de la biblioteca zlib

./config --prefix=/usr --openssldir=/etc/ssl \
--libdir=lib no-shared zlib-dynamic

Procedemos a compilar

make
make test

E instalamos

sudo make install

Para que funcione correctamente y no tengamos problemas con librerías, debemos exportar varias rutas:

export LD_LIBRARY_PATH=/usr/local/lib:/usr/local/lib64

Para que quede de manera permanente, se debe añadir al fichero .bashrc, de la siguiente manera:

echo "export LD_LIBRARY_PATH=/usr/local/lib:/usr/local/lib64" >> ~/.bashrc

Si todo ha ido bien ya puedes ver la versión:

openssl version

Generar el certificado SSL

  1. Creamos la private key
openssl genrsa -out privatekey.pem 2048

2. Creamos el certificate Request

openssl req -new -sha256 -key privatekey.pem -out private-csr.pem

Cuidado con el segundo comando que te pedira información esencial para generar el certificado:

  • country name: ES
  • state or province: Valencia
  • Locality: Valencia
  • Organization name: AMWEB
  • Organizational Unit name: IT
  • Common Name: (la ip)
  • Email address: [email protected]
  • Challege password: elquesea

Preste atención al campo Common Name Este debe ser la IP de tu NodeRED o un dominio (IP externa sin el puerto o DNS si usas uno).

3. Por ultimo firmamos el certificado con la private key para crear el «self signed certificate»

openssl x509 -req -days 365 -in private-csr.pem -signkey privatekey.pem -out certificate.pem

Ahora tienes 2 archivos generados en un directorio raíz (a menos que ejecutes los comandos en otro directorio). Los archivos son:

  • private-csr.pem
  • privatekey.pem

Ya has generado un certificado SSL autogenerado o «self signed».

Configurar nodered para que cargue el certificado

El primer paso debes descomentar:

// The https setting requires the fs module. Uncomment the following
// to make it available:
var fs = require("fs");
requireHttps: true,

Descomentar y configurar:

// The following property can be used to enable HTTPS
// See http://nodejs.org/api/https.html#https_https_createserver_options_requestlistener
// for details on its contents.
// See the comment at the top of this file on how to load the `fs` module used by
// this setting.
//
https: {
    key: fs.readFileSync('/data/privatekey.pem'),
    cert: fs.readFileSync('/data/certificate.pem')
},

El último paso es segurizar con usuario y contraseña:

// Securing Node-RED
// -----------------
// To password protect the Node-RED editor and admin API, the following
// property can be used. See http://nodered.org/docs/security.html for details.
adminAuth: {
    type: "credentials",
    users: [{
        username: "[email protected]",
        password: "$2a$08$KwEsnjvNPSEQjbYO4Z4uCujUAhEadE/Is2xLpkN.1nqKGXgK7IDlC",
        permissions: "*"
    }]
},

Solo quedará reiniciar el docker o node-red y probar que tienes acceso por https. Verás un mensaje de advertencia de que el certificado no ha sido creado por una autoridad certificadora.

Los certificados autogenerados son una brecha de seguridad porque no estan certificados por ninguna autoridad, deberás consentir acceder vía https aunque el navegador te diga que es inseguro.

Los fuentes de este artículo:

Deja un comentario