Conexión de un dispositivo de bajada a una puerta de enlace Azure IoT Edge

Se aplica a:marca de verificación de IoT Edge 1.4 IoT Edge 1.4

Importante

IoT Edge 1.4 es la versión admitida. Si está usando una versión anterior, consulte Actualización de IoT Edge.

Aquí encontrará instrucciones para establecer una conexión de confianza entre dispositivos de bajada y las puertas de enlace transparentes de IoT Edge. En un escenario de puerta de enlace transparente, uno o varios dispositivos pueden pasar sus mensajes a través de un dispositivo de puerta de enlace único que mantiene la conexión con IoT Hub. Aquí, los términos puerta de enlace y puerta de enlace IoT Edge hacen referencia a un dispositivo IoT Edge configurado como una puerta de enlace transparente.

Nota:

Un dispositivo de bajada emite datos directamente a Internet o a dispositivos de puerta de enlace (habilitado o no para IoT Edge). Un dispositivo secundario puede ser un dispositivo de bajada o un dispositivo de puerta de enlace en una topología anidada.

Hay tres pasos generales para configurar una conexión de puerta de enlace transparente correcta. En este artículo se explica el tercer paso.

  1. Configure el dispositivo de puerta de enlace como servidor para que los dispositivos de bajada puedan conectarse a él de forma segura. Configure la puerta de enlace para recibir mensajes de los dispositivos de bajada y enrutarlos al destino adecuado. Para realizar esos pasos, consulte Configuración de un dispositivo IoT Edge para que actúe como puerta de enlace transparente.

  2. Cree una identidad de dispositivo para el dispositivo de bajada para que pueda autenticarse en IoT Hub. Configure el dispositivo de bajada para enviar mensajes a través del dispositivo de puerta de enlace. Para conocer estos pasos, consulte Autenticación de un dispositivo de bajada en Azure IoT Hub.

  3. Conecte el dispositivo de bajada al dispositivo de puerta de enlace y empiece a enviar mensajes.

Este artículo le ayuda a comprender los componentes de conexión de dispositivo de bajada, como:

  • Aspectos básicos de seguridad de la capa de transporte (TLS) y certificado.
  • Bibliotecas TLS que funcionan en diferentes sistemas operativos que controlan certificados de forma diferente.

A continuación, recorra los ejemplos de Azure IoT, en su idioma preferido, para que el dispositivo envíe mensajes a la puerta de enlace.

Requisitos previos

Adquiera lo siguiente para preparar el dispositivo de bajada:

Nota:

Los dispositivos IoT registrados en IOT Hub pueden usar módulos gemelos para aislar diferentes procesos, hardware o funciones en un único dispositivo. Las puertas de enlace de IoT Edge admiten conexiones de módulo inferiores mediante la autenticación de clave simétrica, pero no la autenticación de certificado X.509.

Descripción de los aspectos básicos del certificado y TLS

El desafío de una conexión segura de los dispositivos de bajada a IoT Edge es igual que en cualquier otra comunicación cliente/servidor segura que se produce en Internet. Un cliente y un servidor se comunican de forma segura en Internet mediante la Seguridad de la capa de transporte (TLS). TLS se ha creado mediante construcciones de Infraestructura de clave pública (PKI) estándar llamadas certificados. TLS es una especificación bastante compleja que aborda una amplia gama de temas relacionados con la protección de dos puntos de conexión. En esta sección se resumen los conceptos relevantes para que pueda conectar de forma segura los dispositivos a una puerta de enlace IoT Edge.

Cuando un cliente se conecta a un servidor, el servidor presenta una cadena de certificados llamada cadena de certificados de servidor. Una cadena de certificados normalmente consta de un certificado de entidad de certificación (CA) raíz, uno o varios certificados de entidad de certificación intermedios y, finalmente, el propio certificado del servidor. Un cliente establece la confianza con un servidor mediante la comprobación criptográfica de la cadena de certificados de servidor completa. Esta validación del cliente de la cadena de certificados de servidor se llama validación de la cadena del servidor. El cliente desafía al servidor para demostrar la posesión de la clave privada asociada al certificado de servidor en un proceso denominado prueba de posesión. La combinación de la validación de la cadena del servidor y la prueba de posesión se denomina autenticación de servidor. Para validar una cadena de certificados de servidor, un cliente necesita una copia del certificado de la entidad de certificación raíz que se usó para crear (o emitir) el certificado del servidor. Normalmente, al conectarse a sitios web, un explorador viene preconfigurado con certificados de entidad de certificación usados habitualmente para que el cliente tenga un proceso de conexión directo.

Cuando un dispositivo se conecta a Azure IoT Hub, el dispositivo es el cliente y el servicio en la nube de IoT Hub es el servidor. El servicio en la nube de IoT Hub está respaldado por un certificado de entidad de certificación raíz llamado Baltimore CyberTrust Root, que es ampliamente utilizado y está disponible públicamente. Puesto que el certificado de entidad de certificación de IoT Hub ya está instalado en la mayoría de los dispositivos, muchas implementaciones de TLS (OpenSSL, Schannel, LibreSSL) lo utilizan automáticamente durante la validación de certificados de servidor. Sin embargo, un dispositivo que puede conectarse correctamente a IoT Hub puede tener problemas al intentar conectarse a una puerta de enlace IoT Edge.

Cuando un dispositivo se conecta a una puerta de enlace IoT Edge, el dispositivo de bajada es el cliente y el dispositivo de puerta de enlace es el servidor. Azure IoT Edge le permite crear cadenas de certificados de puerta de enlace como consideren oportuno. Puede usar un certificado de entidad de certificación pública, como Baltimore o usar un certificado de entidad de certificación de raíz autofirmado (o interno). Los certificados de entidad de certificación pública a menudo tienen un costo asociado, por lo que se utilizan normalmente en escenarios de producción. Los certificados de entidad de certificación autofirmados se prefieren para desarrollo y pruebas. Los certificados de demostración son certificados de entidad de certificación raíz autofirmados.

Cuando se usa un certificado de entidad de certificación raíz autofirmado para una puerta de enlace IoT Edge, este se debe instalar o proporcionar a todos los dispositivos de bajada que intentan conectarse a la puerta de enlace.

Captura de pantalla de la configuración del certificado de puerta de enlace.

Para más información acerca de los certificados de IoT Edge y algunas implicaciones de producción, consulte Detalles de uso de los certificados de IoT Edge.

Inclusión del certificado de entidad de certificación raíz

Para comprobar los certificados del dispositivo de puerta de enlace, el dispositivo de bajada necesita su propia copia del certificado de entidad de certificación raíz. Si ha usado los scripts proporcionados en el repositorio de Git de IoT Edge para crear certificados de prueba, el certificado de entidad de certificación raíz se denomina azure-iot-test-only.root.ca.cert.pem.

Si aún no lo ha hecho, mueva este archivo de certificado a cualquier directorio del dispositivo de bajada. Puede trasladar el archivo instalando el certificado CA en el almacén de certificados del sistema operativo o (para determinados idiomas) haciendo referencia al certificado dentro de las aplicaciones que utilizan los SDK de Azure IoT.

Para ello, puede usar un servicio como Azure Key Vault o una función como Protocolo de copia segura.

Instalación de certificados en el sistema operativo

Una vez que el certificado CA raíz esté en el dispositivo de bajada, asegúrese de que las aplicaciones que se conectan a la pasarela pueden acceder al certificado.

La instalación del certificado de entidad de certificación raíz en el almacén de certificados del sistema operativo generalmente permite que la mayoría de las aplicaciones lo usen. Hay algunas excepciones, como las aplicaciones de NodeJS, que no utilizan el almacén de certificados del sistema operativo y utilizan en su lugar el almacén de certificados interno del entorno de ejecución de Node. Si no puede instalar el certificado en el nivel de sistema operativo, continúe en Uso de certificados con los SDK de Azure IoT.

Instale el certificado de CA raíz en Ubuntu o Windows.

Los siguientes comandos son un ejemplo de cómo instalar un certificado de entidad de certificación en un host con Ubuntu. En este ejemplo se da por supuesto que usa el certificado azure-iot-test-only.root.ca.cert.pem de los artículos de requisitos previos y que ha copiado el certificado en una ubicación del dispositivo de bajada.

sudo cp <file path>/azure-iot-test-only.root.ca.cert.pem /usr/local/share/ca-certificates/azure-iot-test-only.root.ca.cert.pem.crt
sudo update-ca-certificates

Verá un mensaje que dice "Updating certificates in /etc/ssl/certs... 1 added, 0 removed; done." (Actualizando certificados en /etc/ssl/certs...1 agregado, 0 quitados, listo)

Uso de certificados con los SDK de Azure IoT

Los SDK de IoT de Azure se conectan a un dispositivo IoT Edge mediante sencillas aplicaciones de ejemplo. El objetivo de los ejemplos es conectar el cliente del dispositivo y enviar mensajes de telemetría a la puerta de enlace y, a continuación, cerrar la conexión y salir.

Antes de usar los ejemplos de nivel de aplicación, obtenga los siguientes elementos:

  • La cadena de conexión de IoT Hub, desde el dispositivo de bajada, se modificó para que apunte al dispositivo de puerta de enlace.

  • Los certificados necesarios para autenticar el dispositivo de bajada en IoT Hub. Para más información, consulte Autenticación de un dispositivo de bajada en Azure IoT Hub.

  • La ruta de acceso completa del certificado de entidad de certificación raíz que ha copiado y guardado en algún lugar del dispositivo de bajada.

    Por ejemplo: <file path>/azure-iot-test-only.root.ca.cert.pem.

Ahora está listo para usar certificados con un ejemplo en el idioma que prefiera:

Esta sección proporciona una aplicación de ejemplo para conectar un cliente de dispositivo de NodeJS de Azure IoT a una puerta de enlace IoT Edge. En el caso de las aplicaciones de NodeJS, debe instalar el certificado de entidad de certificación raíz en el nivel de aplicación, tal como se muestra aquí. Las aplicaciones de NodeJS no usan el almacén de certificados del sistema.

  1. Puede obtener el ejemplo para edge_downstream_device.js desde el repositorio de ejemplos del SDK de dispositivo IoT de Azure para Node.js.
  2. Asegúrese de que tiene todos los requisitos previos para ejecutar el ejemplo; para ello, revise el archivo readme.md.
  3. En el archivo edge_downstream_device.js, actualice las variables connectionString y edge_ca_cert_path.
  4. Consulte la documentación del SDK para obtener instrucciones sobre cómo ejecutar el ejemplo en el dispositivo.

Para entender el ejemplo que se está ejecutando, el siguiente fragmento de código contiene el modo en el que el SDK de cliente lee el archivo de certificado y lo usa para establecer una conexión TLS segura:

// Provide the Azure IoT device client via setOptions with the X509
// Edge root CA certificate that was used to setup the Edge runtime
var options = {
    ca : fs.readFileSync(edge_ca_cert_path, 'utf-8'),
};

Prueba de la conexión de puerta de enlace

Use este comando de ejemplo para probar que el dispositivo de bajada para probar que puede conectarse al dispositivo de puerta de enlace:

openssl s_client -connect mygateway.contoso.com:8883 -CAfile <CERTDIR>/certs/azure-iot-test-only.root.ca.cert.pem -showcerts

Este comando prueba la conexión a través de MQTTS (puerto 8883). Si usa un protocolo diferente, ajuste el comando según sea necesario para AMQPS (5671) o HTTPS (443).

La salida de este comando puede ser larga, incluida la información sobre todos los certificados de la cadena. Si la conexión se realiza correctamente, verá una línea como Verification: OK o Verify return code: 0 (ok).

Captura de pantalla de cómo comprobar una conexión de puerta de enlace.

Solución de problemas de la conexión de puerta de enlace

Si la conexión de dispositivo de bajada a su dispositivo de puerta de enlace es inestable, tenga en cuenta estas preguntas para una resolución.

  • ¿El nombre de host de la puerta de enlace en la cadena de conexión es el mismo que el valor de hostname en el archivo de configuración de IoT Edge del dispositivo de puerta de enlace?
  • ¿Se puede resolver el nombre de host de la puerta de enlace en una dirección IP? Puede resolver conexiones intermitentes mediante el uso de DNS o bien mediante la incorporación de una entrada de archivo de host en el dispositivo bajada.
  • ¿Están abiertos los puertos de comunicación en el firewall? Debe ser posible la comunicación basada en el protocolo usado (MQTTS:8883/AMQPS:5671/HTTPS:433) entre el dispositivo de bajada y el dispositivo IoT Edge transparente.

Pasos siguientes

Obtenga información sobre cómo puede extender IoT Edge las funcionalidades sin conexión en los dispositivos de bajada.