Ejemplo de configuración de canal MQTT utilizando la autenticación TLS
Este ejemplo le guía a través de un ejemplo de configuración de un canal MQTT que utiliza la autenticación TLS. Configura un canal entre MQTT y Mosquitto.
El ejemplo utiliza un Docker contenedor para ambosIBM® MQ enRed Hat® Enterprise Linux® y Mosquitto en CentOS, pero aplica para cualquier tipo de servidor. (CentOS se ha utilizado para Mosquitto debido a titularidades de registro.)
En este ejemplo se presupone que conoce los cambios de configuración descritos en MQ Configuración del canal de telemetría para la autenticación del canal mediante TLS.
Configurar el almacén de claves y el canal de IBM MQ para TLS unidireccional
![[ MQ 9.4.0 Jun 2024]](ng940.gif)
Importante: Desde IBM MQ 9.4.0, los repositorios de claves CMS y los archivos stash no son compatibles con los canales AMQP y MQTT que utilizan SSL/TLS. Utilice los repositorios de claves PKCS #12 y proteja las contraseñas del repositorio de claves utilizando en su lugar el sistema de protección de contraseñas IBM MQ .![[ MQ 9.4.0 Jun 2024]](ng940.gif)
Cree un almacén de claves PKCS #12 en IBM MQ :runmqakm -keydb -create -db mqtt.p12 -pw "passw0rd" -type p12![[ MQ 9.4.0 Jun 2024]](ng940.gif)
Crear un certificado personal:
Puede utilizar el mandato siguiente para confirmar la creación del certificado:runmqakm -cert -create -db mqtt.p12 -pw "passw0rd" -size 2048 -dn "CN= mqm, OU=MQTest, O=MQSupport, C=US" -sig_alg SHA256_WITH_RSA -label ibmwebspheremqmqmrunmqakm -cert -list -v -db mqtt.p12 -pw "passw0rd"![[ MQ 9.4.0 Jun 2024]](ng940.gif)
Cree el canal MQTT introduciendo el siguiente comando en el indicador runmqsc:
Tenga en cuenta que el canal utiliza asignaciones de cifrado Java, consulte TLS CipherSpecs y CipherSuites en las clases IBM MQ para JMS.DEFINE CHANNEL(MQTTDEMO) CHLTYPE(MQTT) BACKLOG(4096) PORT(8883) MCAUSER('mqm') PROTOCOL(MQTTV311,MQTTV3,HTTP) SSLCAUTH(OPTIONAL) SSLCIPH('SSL_RSA_WITH_AES_256_CBC_SHA256') SSLKEYR('/var/mqm/mqtt/mqtt.p12') SSLKEYP('passw0rd') TRPTYPE(TCP)- Extraiga el certificado:
runmqakm -cert -extract -db mqtt.p12 -pw "passw0rd" -label ibmwebspheremqmqm -target serverCert.pem
Instalar Mosquitto en CentOS en un contenedor Docker
Complete los siguientes pasos para crear un Docker contenedor con Mosquitto funcionando CentOS:
docker pull centosdocker run -it centos /bin/bashdnf -y install epel-releasednf -y install mosquitto
Mover certificado de firmante a Mosquitto
- Vea los ID de contenedor en Docker:
docker container ls - Copie el archivo del contenedor de docker en el docker del sistema local
cp MQ_Container_ID:/var/mqm/mqtt/serverCert.pem serverCert.pem - Copie el archivo de la máquina local en el directorio raíz de la máquina centOS :
docker cp serverCert.pem CentOS_ContainerID:/serverCert.pem
Publicar con Mosquitto
mosquitto_pub -h 172.17.0.2 --cafile serverCert.pem --insecure -p 8883 -i mosquittoClient -t test -m 'test message' -dLos argumentos del mandato tienen los significados siguientes:- -h
- La dirección IP del host de Red Hat Enterprise Linux (se puede encontrar utilizando nslookup).
- --cafile
- El archivo que contiene el certificado de firmante.
- --insecure
- Esta opción se especifica porque el ejemplo utiliza un certificado autofirmado. No utilice esta opción cuando utilice certificados CA reales.
- -p
- Número de puerto.
- -i
- ID de cliente.
- -t
- El tema en el que se está publicando.
- -m
- El mensaje que se está publicando.
- -d
- Habilitar mensajes de depuración.
Configurar el canal MQTT para la autenticación TLS mutua
Especifique el mandato siguiente para volver a configurar el canal MQTT como SSLCAUTH (REQUIRED).
ALTER CHANNEL(MQTTDEMO) CHLTYPE(MQTT) SSLCAUTH(REQUIRED)
Cree un par de clave/certificado en el servidor Mosquitto y añádalo a IBM MQ
Especifique los mandatos siguientes para crear el par clave/certificado en Mosquitto:
- Utilice openSSL para crear el par clave/certificado para Mosquitto:
openssl req -x509 -newkey rsa:4096 -keyout mosquittoKey.pem -out mosquittoCert.pem -subj "/CN=Mosquitto" - Liste los ID de contenedor para los contenedores:
docker container ls - Copie el certificado Mosquitto en el docker del sistema local:
docker cp CentOS_ContainerID:mosquittoCert.pem . - Copie el certificado Mosquitto en IBM MQ:
docker cp mosquittoCert.pem MQ_Container_ID:/var/mqm/mqtt - Añada el certificado al almacén de claves de IBM MQ :
runmqakm -cert -add -db mqtt.p12 -pw "passw0rd" -file mosquittoCert.pem - Reinicie el canal MQTT .
Publicar con Mosquitto y autenticación mutua
- El mandato siguiente debe publicar correctamente un mensaje de prueba:
mosquitto_pub -h 172.17.0.2 --cafile serverCert.pem --insecure -p 8883 -i mosquittoClient -t test -m 'test message' -d --cert mosquittoCert.pem --key mosquittoKey.pem - El mandato siguiente no puede publicar un mensaje de prueba y generar un mensaje de error porque no envía un certificado personal desde Mosquitto:
mosquitto_pub -h 172.17.0.2 --cafile serverCert.pem --insecure -p 8883 -i mosquittoClient -t test -m 'test message' -d /var/mqm/qmgrs/mqttDemoQM/errors/ mqxr_0.log