Autenticación segura de dispositivos con certificados X.509 en Eclipse Hono
En los últimos meses, la cobertura mediática ha destacado dispositivos IoT inseguros que no cumplen estándares básicos de seguridad. Una preocupación recurrente es la confidencialidad de los datos transmitidos de dispositivos a servicios en la nube. Sorprendentemente, muchos dispositivos envían datos sobre redes públicas sin cifrar, aunque protocolos basados en TCP/IP como HTTP y MQTT soporten cifrado TLS.
Eclipse Hono ha habilitado TLS para sus adaptadores HTTP y MQTT desde el principio. El hito 0.9‑M2 ahora añade soporte para autenticación con certificado de cliente X.509 durante el handshake TLS, permitiendo a los dispositivos usar un par de claves en lugar de usuario/contraseña.
Llamada a todos los desarrolladores
El mayor hackathon IoT de Europa regresa a Berlín el 14‑15 de mayo de 2023. Únase a 700+ desarrolladores en retos específicos de dominio, aprenda, conecte y diviértase.
En esta guía recorremos un ejemplo completo: crear y registrar un ancla de confianza específica de tenant, generar un certificado de dispositivo, registrar su DN de sujeto y usar el certificado para autenticar el dispositivo contra el adaptador MQTT de Hono. Se asume conocimiento práctico de criptografía RSA y conceptos X.509 (RFC 5280).
¿Por qué certificados de cliente?
Usar contraseñas requiere almacenar un secreto por dispositivo en el servicio de Credenciales de Hono, que luego se compara con la contraseña suministrada por el dispositivo. Los certificados de cliente eliminan la necesidad de secretos por dispositivo. Al registrar una única ancla de confianza para un tenant, todos los certificados de dispositivo pueden validarse en el handshake TLS usando la clave pública del tenant.
Crear una autoridad de certificación de tenant
Genere el par de claves RSA del tenant y un certificado autofirmado. Estos firmarán todos los certificados de dispositivo.
$ openssl genrsa -out tenant-key.pem 4096
$ openssl req -x509 -key tenant-key.pem -out tenant-cert.pem -days 365 -subj "/O=ACME Inc./CN=Sensors"
Use solo atributos X.500 estándar (CN, L, ST, O, OU, C, STREET, DC, UID) para mantener el DN simple.
Registrar el tenant
Registre el ancla de confianza con Hono. El siguiente ejemplo usa Hono Sandbox (v0.9‑M2 o posterior). Reemplace ACME con un ID de tenant único para su instancia.
$ TENANT="ACME"
$ SUBJECT=$(openssl x509 -in tenant-cert.pem -noout -subject -nameopt RFC2253 | sed s/^subject=//)
$ PK=$(openssl x509 -in tenant-cert.pem -noout -pubkey | sed /^---/d | sed -z 's/\\n//g')
$ cat < tenant.json
{ "tenant-id": "$TENANT", "trusted-ca": { "subject-dn": "$SUBJECT", "public-key": "$PK" } }
EOS
$ curl -i -H "Content-Type: application/json" -H "Expect:" --data-binary @tenant.json https://hono.eclipse.org:28443/tenant
Crear un certificado de dispositivo
Genere un par de claves de dispositivo y un certificado firmado por la CA del tenant.
$ openssl genrsa -out device-key.pem 4096
$ openssl req -new -key device-key.pem -subj "\/O=ACME Inc.\/CN=Hot Fuzz Device" | \
openssl x509 -req -days 365 -out device-cert.pem -CA tenant-cert.pem -CAkey tenant-key.pem -CAcreateserial
Registrar el dispositivo
Registre un ID de dispositivo con el tenant.
$ curl -i -H "Content-Type: application/json" --data-binary '{"device-id":"hot-fuzz"}' https://hono.eclipse.org:28443/registration/$TENANT
Registrar el DN de sujeto del dispositivo
Asocie el DN de sujeto del certificado del dispositivo con el ID de dispositivo.
$ SUBJECT=$(openssl x509 -in device-cert.pem -noout -subject -nameopt RFC2253 | sed s/^subject=//)
$ cat < credentials.json
{ "device-id": "hot-fuzz", "type": "x509-cert", "auth-id": "$SUBJECT", "secrets": [{}] }
EOS
$ curl -i -H "Content-Type: application/json" --data-binary @credentials.json https://hono.eclipse.org:28443/credentials/$TENANT
Probar la conexión
Inicie un consumidor para el tenant y publique telemetría usando el certificado del dispositivo.
# Iniciar consumidor
java -jar hono-cli-*-exec.jar \
--hono.client.host=hono.eclipse.org \
--hono.client.port=15671 \
--hono.client.tlsEnabled=true \
--hono.client.username=consumer@HONO \
--hono.client.password=verysecret \
--spring.profiles.active=receiver \
--tenant.id=$TENANT
# Publicar telemetría vía MQTT
mosquitto_pub -h hono.eclipse.org -p 8883 \
--capath /etc/ssl/certs/ \
--cert device-cert.pem \
--key device-key.pem \
-q 1 -t telemetry -m "Hello there"
Si tiene éxito, la consola del consumidor mostrará el mensaje. También puede publicar vía HTTP:
curl -i --cert device-cert.pem --key device-key.pem \
-H "Content-Type: plain/text" -H "Expect:" \
--data-binary "Hello there" https://hono.eclipse.org:8443/telemetry
Tecnología de Internet de las cosas
- Sistema de control de temperatura basado en LM35 con microcontrolador AT89S52
- Teoría de Dispositivos de Estado Sólido: De la Física a Aplicaciones Prácticas
- Eclipse Hono lanza registro de dispositivos basado en MongoDB – Escalable, listo para producción
- Eclipse Hono 1.0.0 se lanza: Plataforma unificada open-source de conectividad IoT
- Soluciones fiables de encendido para dispositivos médicos operados por batería
- Avances en tecnología de dispositivos médicos: sensores, conectividad y seguridad
- Arm mejora conectividad y gestión de dispositivos IoT mediante la adquisición de Stream Technologies
- Vulnerabilidades en dispositivos IoT exponen hogares inteligentes al ataque: la amenaza de compromiso de credenciales
- Dispositivos IoT sin configurar: la amenaza oculta para tu hogar inteligente
- Hacking de Hardware Embebido para Dispositivos IoT: Herramientas, Técnicas e Implicaciones de Negocio
- Aproveche el IoT para Conectar y Gestionar Dispositivos Médicos de Forma Remota: Desbloquee Nuevos Modelos de Negocio Hoy