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.
Contenido
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
- 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:
// Thehttps
setting requires thefs
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:
- How to add SSL certification to NodeRED
- Instalar la última versión de OpenSSL en Centos 7
- Configurar y Securizar Node-RED
- Securing Node-Red with SSL and Username Authentication
- Cómo crear un certificado SSL autofirmado para Apache en Ubuntu 18.04