Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial Internet of Things >> Tecnología de Internet de las cosas

Autenticación de dispositivo basada en X.509 en Eclipse Hono

Durante los últimos meses, los medios de comunicación han estado llenos de informes sobre inseguros Dispositivos de IoT que no cumplían ni siquiera con los requisitos de seguridad más básicos. Una de las preocupaciones planteadas fue la confidencialidad de los datos que se transfieren desde los dispositivos a los servicios en la nube proporcionados por los fabricantes. En muchos casos, los datos se envían a través de redes públicas completamente sin cifrar, lo cual es bastante sorprendente, dado que todos los protocolos de transporte populares basados ​​en TCP / IP que se utilizan en los dispositivos de IoT actuales (por ejemplo, HTTP y MQTT) admiten la negociación y el uso de un canal de transporte seguro (cifrado) mediante Transport Layer Security (TLS).

Eclipse Hono ha admitido el uso de TLS en sus adaptadores de protocolo HTTP y MQTT desde el principio. El hito 0.9-M2 lanzado recientemente ha agregado soporte para la autenticación de dispositivos que utilizan un certificado de cliente X.509 como parte del protocolo de enlace TLS tanto para el adaptador HTTP como para el MQTT. Esto permite que los dispositivos utilicen un par de claves pública / privada en lugar de un nombre de usuario y contraseña para autenticarse en los adaptadores de protocolo.

Llamando a todos los desarrolladores

El hackathon de IoT más grande de Europa regresa a Berlín del 14 al 15 de mayo de 2019. ¡Únase a más de 700 desarrolladores en varios desafíos de pirateo específicos de dominio para piratear, jugar, aprender, divertirse y hacer nuevos amigos de todo el mundo!

Únase al hackathon de IoT

En esta publicación de blog, lo guiaré a través de un ejemplo completo de cómo crear y registrar un anclaje de confianza específico para inquilinos. , crea un certificado para un dispositivo, registra su nombre distinguido del sujeto y, finalmente, utilice el certificado para autenticar el dispositivo en el adaptador de protocolo MQTT de Hono. En el resto de esta publicación, asumiré que tiene un conocimiento general de la criptografía basada en RSA y, en particular, las funciones que desempeñan las claves públicas y privadas. Como referencia, RFC 5280 define todos los detalles técnicos de X.509.

¿Por qué certificados de cliente?

Al emplear contraseñas para autenticar dispositivos, la contraseña de cada dispositivo debe registrarse con el servicio de Credenciales de Hono para que los adaptadores de protocolo puedan comparar la contraseña presentada por el dispositivo durante la autenticación con el hash de la contraseña registrado.

Una de las ventajas de usar certificados de cliente para autenticar dispositivos es que ya no es necesario registrar secretos individuales (contraseñas) para dispositivos con Hono. En su lugar, basta con registrar un único anclaje de confianza . para un inquilino que luego se puede usar para verificar la identidad de todos los dispositivos que pertenecen al inquilino como parte del protocolo de enlace de TLS. Para que esto funcione, los certificados de cliente utilizados por los dispositivos deben contener una firma digital que se pueda validar utilizando la clave pública que sirve como ancla de confianza del inquilino.

Cree una autoridad de certificación de inquilinos

Por lo tanto, el primer paso es crear el par de claves pública / privada del inquilino que se utilizará para firmar los certificados de cliente utilizados por los dispositivos del inquilino.

$ 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"

El nombre distinguido del sujeto establecido mediante el parámetro `-subj` puede contener cualquier nombre distinguido X.500 válido. Sin embargo, para simplificar las cosas, debes abstenerte de utilizar cualquier tipo de atributo que no sea `CN`,` L`, `ST`,` O`, `OU`,` C`, `STREET`,` DC`, `UID`.

Registre al inquilino

Ahora que se han creado las claves, podemos registrar un inquilino utilizando la clave pública como ancla de confianza.

Para mayor comodidad, usaremos Hono Sandbox. Sin embargo, cualquier otra instalación (local) que ejecute la versión 0.9-M2 o posterior también debería funcionar.

En los siguientes comandos, reemplace el identificador de inquilino `ACME` con un identificador de su propia elección. Esto es importante porque Hono refuerza la unicidad de los identificadores de inquilinos. Por lo tanto, cada identificador se puede registrar una sola vez por instancia Hono.

Los primeros tres comandos definen algunas variables para su uso posterior:el identificador de inquilino, el nombre distinguido del sujeto del certificado y la clave pública codificada en Base64. Luego, las variables se utilizan en el comando para registrar el ancla de confianza con el nuevo inquilino.

$ 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", "trust-ca":{"subject-dn":"$ SUBJECT", "public-key":"$ PK"}} EOS $ curl -i -H 'Tipo de contenido:aplicación / json' -H 'Espera:' --data-binary @ tenant.json https://hono.eclipse.org:28443/tenant

Cree un certificado de dispositivo

El siguiente paso es crear un par de claves para el dispositivo y su certificado de cliente correspondiente, que está firmado por la clave privada del inquilino.

$ 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

Nuevamente, asegúrese de no usar ningún tipo de atributo aparte de `CN`,` L`, `ST`,` O`, `OU`,` C`, `STREET`,` DC`, `UID` en el asunto nombre distinguido.

Registre el dispositivo

Ahora podemos usar un identificador de dispositivo arbitrario para registrar el dispositivo con el inquilino.

$ curl -i -H 'Content-Type:application / json' --data-binary '{"device-id":"hot-fuzz"}' https://hono.eclipse.org:28443/registration/$ INQUILINO

Registre el DN del asunto del dispositivo

El último paso es registrar el nombre distinguido del sujeto del dispositivo. Nuevamente, asegúrese de utilizar los mismos identificadores de inquilinos y dispositivos que se indicaron anteriormente.

$ 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 'Tipo de contenido:aplicación / json' --data-binary @ credentials.json https://hono.eclipse.org:28443/credentials/$TENANT

Pruebe la conexión

Ahora que se ha registrado el dispositivo, es hora de conectarse al adaptador MQTT utilizando el certificado de cliente recién creado y publicar algunos datos.

Primero, iniciamos un consumidor para el inquilino para el que registramos el dispositivo. Puede descargar el cliente desde el sitio web de Hono:

$ java -jar hono-cli - * - exec.jar --hono.client.host =hono.eclipse.org --hono.client.port =15671 --hono.client.tlsEnabled =true --hono.client. username =consumidor @ HONO --hono.client.password =verysecret --spring.profiles.active =receptor --tenant.id =$ TENANT

En el paso final, usamos el cliente de línea de comando Eclipse Mosquitto para publicar algunos datos de telemetría:

$ 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 "Hola"

Si todo va bien, debería poder ver los datos que se registran en la consola en la terminal donde inició el consumidor.

El dispositivo también puede usar HTTP para publicar datos:

$ curl -i --cert device-cert.pem --key device-key.pem -H 'Tipo de contenido:plano / texto' -H 'Expect:' --data-binary 'Hola' https:// hono.eclipse.org:8443/telemetry

Tecnología de Internet de las cosas

  1. Introducción a la teoría de dispositivos de estado sólido
  2. Lanzamiento del nuevo registro de dispositivos basado en MongoDB en Eclipse Hono
  3. Lanzamiento de Eclipse Hono 1.0.0:una plataforma de conectividad IoT abierta
  4. Encendido confiable de un dispositivo médico que funciona con baterías
  5. Supervisión de los avances de los dispositivos médicos
  6. Sistema de control de dispositivo basado en temperatura usando LM35
  7. Arm amplía la conectividad de IoT y las capacidades de administración de dispositivos con la adquisición de Stream Technologies
  8. Las vulnerabilidades de las aplicaciones dejan los dispositivos de IoT abiertos al ataque
  9. Ajustar y olvidar:la amenaza que representa el IoT no configurado
  10. Una introducción a la piratería de hardware integrado en dispositivos IoT
  11. Por qué ahora es el momento de utilizar tecnologías avanzadas para conectar de forma remota sus dispositivos médicos