Comunicação segura entre cliente e servidor através do protocolo de segurança TLS usando Mosquitto Broker: IOT Parte 42

Comunicación segura entre cliente y servidor a través del protocolo de seguridad TLS usando Mosquitto Broker: IOT Parte 42

Transport Layer Security (TLS) es un protocolo de seguridad que utiliza cifrado simétrico para proteger los datos. En este tutorial, la comunicación cliente-servidor se configurará utilizando el protocolo TLS para que los datos se puedan intercambiar de forma segura entre ellos. El corredor Mosquitto se utiliza para proporcionar seguridad TLS. El corredor Mosquitto utiliza el puerto 8883 como puerto de transmisión cifrado para intercambiar datos de forma segura entre clientes.
Para obtener más información sobre los estándares y protocolos de IoT, consulte el siguiente tutorial:
Estándares y protocolos de IoT
Obtenga más información sobre los protocolos de la capa de transporte en el siguiente tutorial:
Protocolos de capa de transporte
Imagem mostrando comunicação segura entre cliente e servidor através do protocolo TLS usando Mosquitto Broker

Fig. 1: Imagen que muestra la comunicación cliente-servidor segura a través del protocolo TLS utilizando Mosquitto Broker

Software requerido –
• Plataforma – Linux
• Corrector de mosquitos instalado
• Cliente espía MQTT o Terminal Linux.
Protocolo TLS –
El protocolo TLS ofrece las siguientes características:
1) Cifrado de datos: los datos se cifran de extremo a extremo para que, aparte de las dos partes que intercambian la información, nadie pueda entenderlos.
2) Integridad de los datos: nadie puede manipular los datos cifrados.
3) Autenticación: una parte puede enviar datos a otra parte solo cuando tiene autenticidad para enviar datos a esa parte.
En la seguridad TLS, el Cliente o Broker utiliza una clave pública para cifrar mensajes, una clave privada para descifrar mensajes y un certificado para firmar el mensaje. Para habilitar la seguridad TLS, un cliente requiere lo siguiente:
1) Certificado de cliente certificado por CA (autoridad de certificación)
2) Clave privada del cliente para descifrado
3) Certificado de CA que firmó el certificado del servidor.
Para habilitar la seguridad TLS, el servidor requiere lo siguiente:
1) Certificado de servidor certificado por CA
2) Clave privada del servidor para descifrado
3) Certificado de CA que firmó el certificado del cliente.
openssl se utiliza para crear su propia autoridad de certificación (CA), claves de cliente, claves de servidor y certificados. openssl se puede instalar con los siguientes comandos:
Captura de tela do comando para instalar o Openssl
Fig. 2: Captura de pantalla del comando para instalar Openssl
Luego cree una carpeta (cualquier nombre) en su directorio de inicio y vaya a ese directorio a través de la terminal. Ahora siga los pasos a continuación para generar las claves y los certificados.
1) Cree el par de claves pública y privada de CA ejecutando el siguiente comando en la terminal:
Captura de tela do comando para criar pares de chaves públicas e privadas de CA
Fig. 3: Captura de pantalla del comando para crear pares de claves públicas y privadas de CA
En el comando anterior –
genrsa: Genera una clave privada RSA
-des3: Usaremos el cifrado DES3 para generar la clave (contraseña)
tamaño_de_clave_privada_en_bits es 2048
-out: especifica el nombre del archivo para la clave (.key)
Este comando generará un archivo de clave privada de CA. Le pedirá que guarde la contraseña definida por el usuario. Esta contraseña se utilizará más adelante cuando el certificado de CA se firme con esta clave privada.
2) Cree un certificado de CA utilizando la clave de CA ejecutando el siguiente comando:
Captura de tela do comando para criar certificado CA
Fig. 4: Captura de pantalla del comando para crear un certificado de CA
En el comando anterior,
req: es una solicitud de certificado
-nuevo: genera un nuevo certificado y solicitará al usuario varios campos de entrada.
-x509: crea un certificado autofirmado.
-días: especifica el número de días que el certificado es válido.
-key: es el archivo de clave con la clave privada que se utilizará para firmar
-out: especifica el nombre del archivo del certificado (.crt)
3) Ahora cree el par de claves del servidor ejecutando el siguiente comando:
Captura de tela do comando para criar par de chaves do servidor
Fig. 5: Captura de pantalla del comando para crear un par de claves del servidor
opensslgenrsa -out mosquitto_server.keytamaño de la clave privada en bits.
Aquí no está protegido con contraseña. En el comando anterior,
genrsa: genera una clave privada RSA
-out: especifica el nombre del archivo para la clave (.key)
tamaño_de_clave_privada_en_bits es 2048
4) Ahora cree una solicitud de certificado para el servidor utilizando la clave privada del servidor ejecutando el siguiente comando:
Captura de tela do comando para criar uma solicitação de certificado para servidor
Fig. 6: Captura de pantalla del comando para crear una solicitud de certificado de servidor
En el comando anterior –
req: es una solicitud de certificado
-nuevo: genera un nuevo certificado y solicitará al usuario varios campos de entrada.
-key: es el archivo de clave con la clave privada que se utilizará para firmar
-out: especifica el nombre del archivo del certificado (.csr)
5) Luego use el certificado de CA para firmar la solicitud de certificado del corredor ejecutando el siguiente comando:
Captura de tela do comando para assinar o certificado do corretor
Fig. 7: Captura de pantalla del comando para firmar el certificado del corredor
En el comando anterior,
x509: crea un certificado autofirmado.
-req: solicitud de certificado
-in: es el archivo de entrada del certificado
-CA: especifica el archivo a firmar
-CAkey: es la clave privada de la CA para firmar el certificado
-CAcreateserial: es el archivo de número de serie que se crea si no existe
-out: especifica el nombre del archivo del certificado (.crt)
-días: especifica el número de días que el certificado es válido.
6) Para el cliente, se sigue el mismo procedimiento para generar la clave privada del cliente, la solicitud de certificado del cliente y luego firmar la solicitud de certificado mediante certificado de CA.
El par de claves del cliente se genera mediante el siguiente comando:
Captura de tela do comando para gerar par de chaves do cliente
Fig. 8: Captura de pantalla del comando para generar el par de claves del cliente
La solicitud de certificado de cliente se realiza ejecutando el siguiente comando:
opensslreq -new -out mosquitto_client.csr -key mosquitto_client.key
El certificado de CA para firmar el certificado del cliente se genera ejecutando el siguiente comando:
Captura de tela do comando para assinar certificado de cliente por certificado CA
Fig. 9: Captura de pantalla del comando para firmar el certificado de cliente mediante certificado CA
Ahora hay un total de 9 archivos creados con los siguientes nombres:
– CA.key: archivo de clave CA (pública y privada)
– CA.crt: certificado CA
– CA.srl: archivo de número de serie de CA
– mosquitto_server.key: clave del servidor
– mosquitto_server.csr: solicitud de certificado de servidor
– mosquitto_server.crt: certificado de servidor
– mosquitto_client.key: clave de cliente
– mosquitto_client.csr: solicitud de certificado de cliente
– mosquitto_client.crt: certificado de cliente
A continuación, también es necesario habilitar la autenticación del cliente. A partir de este momento, los clientes se conectarán al servidor MQTT solo cuando conozcan el nombre de usuario y la contraseña del servidor MQTT. Siga los pasos a continuación para habilitar la autenticación:
1) Cree el archivo server_password.txt en cualquier lugar y dentro de este archivo cree el nombre de usuario y la contraseña de la siguiente manera:
Captura de tela do comando para criar server_password.txt
Fig. 10: Captura de pantalla del comando para crear server_password.txt
2) Luego cifre este archivo usando el siguiente comando:
Captura de tela do comando para criptografar o arquivo Server_password.txt
Fig. 11: Captura de pantalla del comando para cifrar el archivo Server_password.txt
3) Luego instale el corredor Mosquitto. Dado que se utiliza Linux, para instalar el intermediario, primero agregue el repositorio Mosquitto ejecutando el siguiente comando e instale el intermediario mosquito:
Captura de tela do Mosquito Broker em execução na porta criptografada 8883
Fig. 12: Captura de pantalla del comando para instalar Mosquito Broker
Luego instale los clientes Mosquitto para PC instalando las bibliotecas de desarrollador de Mosquitto y el paquete de cliente Mosquitto de la siguiente manera:
Captura de tela do comando para instalar clientes Mosquitto
Fig. 13: Captura de pantalla del comando para instalar clientes Mosquito
mqtt-spy también se puede utilizar junto con el cliente MQTT. Para utilizar el espía MQTT, omita los pasos anteriores. Ahora el broker está instalado junto con el cliente y también los certificados.
Mosquitto está configurado de forma predeterminada para ejecutarse en el puerto 1883. Por lo tanto, es necesario un puerto TLS, es decir, 8883. La configuración del agente Mosquitto se puede cambiar para escuchar en el puerto cifrado. Pero antes de eso, de los 9 archivos generados, copie los siguientes 3 archivos y péguelos en la carpeta /etc/mosquitto/
• CA.crt: pegue este archivo en /etc/mosquitto/ca_certificates. Si esta carpeta no está presente, podemos crear una carpeta y pegar el archivo.
• mosquitto_server.crt: pegue este archivo en /etc/mosquitto/certs.
• mosquitto_server.key: pegue este archivo en /etc/mosquitto/certs
Ahora copie el archivo de contraseña “server_password.txt” y péguelo en la ruta /etc/mosquitto. Ahora está el archivo de configuración predeterminado. Cambie el archivo – mosquitto.conf de la siguiente manera –
Captura de tela das alterações no arquivo de configuração padrão
Fig. 14: Captura de pantalla de cambios en el archivo de configuración predeterminado
Ahora el archivo de configuración ha sido configurado. Es hora de ejecutar el broker Mosquitto con este archivo de configuración. Ejecútelo como superusuario con los siguientes comandos:
sudomosquitto –c mosquito.conf –v
Se puede ver que el corredor Mosquitto se ejecuta en el puerto 8883 con seguridad TLS de la siguiente manera:
Captura de tela do Mosquito Broker em execução na porta criptografada 8883
Fig. 15: Captura de pantalla de Mosquito Broker ejecutándose en el puerto cifrado 8883
Es hora de probar el corredor con clientes MQTT. Para publicar los datos en el corredor Mosquitto, ejecute el siguiente comando:
Captura de tela do comando para instalar o Mosquito Broker
Fig. 16: Captura de pantalla del comando para publicar datos en Mosquito Broker
Y para suscribirse al tema del corredor MQTT ejecutando el siguiente comando:
Captura de tela do comando para assinar o tópico do corretor MQTT
Fig. 17: Captura de pantalla del comando para suscribirse al tema MQTT Broker
Se puede ver que todo lo que el editor envía en el broker MQTT lo recibe el suscriptor. Esta comunicación cliente-servidor se realiza de forma altamente cifrada.
Captura de tela da comunicação cliente-servidor usando o MQTT Broker
Fig. 18: Captura de pantalla de la comunicación cliente-servidor utilizando el broker MQTT

contenido relacionado

Regresar al blog

Deja un comentario

Ten en cuenta que los comentarios deben aprobarse antes de que se publiquen.