Share via


Tutorial: Configuración del protocolo Enrollment over Secure Transport para Azure IoT Edge

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

Importante

IoT Edge 1.5 LTS and IoT Edge 1.4 LTS son versiones compatibles. IoT Edge 1.4 LTS finaliza el ciclo de vida el 12 de noviembre de 2024. Si está en una versión anterior, consulte Actualización de IoT Edge.

Con Azure IoT Edge, puede configurar los dispositivos para que usen un servidor de Enrollment over Secure Transport (EST) para administrar certificados x509.

En este tutorial se explica cómo hospedar un servidor de EST de prueba y configurar un dispositivo con IoT Edge para la inscripción y renovación de certificados x509. En este tutorial, aprenderá a:

  • Crear y hospedar un servidor de EST de prueba
  • Configurar la inscripción de grupos de DPS
  • Configuración del dispositivo

Diagrama que muestra información general de alto nivel de los tres pasos necesarios para completar este tutorial.

Requisitos previos

¿Qué es Enrollment over Secure Transport?

Enrollment over Secure Transport (EST) es un protocolo criptográfico que automatiza la emisión de certificados x.509. Se usa para clientes de infraestructura de clave pública (PKI), como IoT Edge, que necesitan certificados de cliente asociados a una entidad de certificación (CA). EST reemplaza la necesidad de administración manual de certificados, tarea que puede ser arriesgada y propensa a errores.

Servidor de EST

Para la emisión y renovación de certificados, se necesita un servidor de EST al que los dispositivos puedan acceder.

Importante

Para las soluciones de nivel empresarial, considere: GlobalSign IoT Edge Inscribir o DigiCert IoT Device Manager.

Para la realización de pruebas y el desarrollo, puede usar un servidor de EST de prueba. En este tutorial, se va a crear un servidor de EST de prueba.

Ejecución del servidor de EST en el dispositivo

Para empezar rápidamente, en este tutorial se muestran los pasos necesarios para implementar un servidor de EST simple en un contenedor localmente en el dispositivo IoT Edge. Este método es el enfoque más sencillo para probarlo.

Dockerfile usa Ubuntu 18.04, una biblioteca de Cisco denominada libest y código de servidor de ejemplo. Tiene la siguiente configuración, que se puede cambiar:

  • Entidad de certificación raíz válida durante 20 años
  • Certificado de servidor de EST válido durante 10 años
  • Establezca los días predeterminados del certificado en 1 para probar la renovación de EST.
  • El servidor de EST se ejecuta localmente en el dispositivo IoT Edge en un contenedor

Precaución

No use este Dockerfile en producción.

  1. Utilice, por ejemplo, el protocolo SSH para conectarse en el que ha instalado IoT Edge.

  2. Cree un archivo denominado Dockerfile (distingue mayúsculas de minúsculas) y agregue el contenido de ejemplo, para lo que puede usar el editor de texto que prefiera.

    Sugerencia

    Si desea hospedar UN servidor EST en Azure Container Instance, cambie myestserver.westus.azurecontainer.io al nombre DNS del servidor de EST. Al elegir un nombre DNS, tenga en cuenta que la etiqueta DNS de Azure Container Instance debe tener una longitud mínima de cinco caracteres.

    # DO NOT USE IN PRODUCTION - Use only for testing #
    
    FROM ubuntu:18.04
    
    RUN apt update && apt install -y apache2-utils git openssl libssl-dev build-essential && \
        git clone https://github.com/cisco/libest.git && cd libest && \
        ./configure --disable-safec && make install && \
        rm -rf /src && apt remove --quiet -y libssl-dev build-essential && \
        apt autoremove -y && apt clean -y && apt autoclean -y && \
        rm -rf /var/lib/apt /tmp/* /var/tmp/*
    
    WORKDIR /libest/example/server/
    
    # Setting the root CA expiration to 20 years
    RUN sed -i "s|-days 365|-days 7300 |g" ./createCA.sh
    
    ## If you want to host your EST server remotely (for example, an Azure Container Instance),
    ## change myestserver.westus.azurecontainer.io to the fully qualified DNS name of your EST server
    ## OR, change the IP address
    ## and uncomment the corresponding line.
    # RUN sed -i "s|DNS.2 = ip6-localhost|DNS.2 = myestserver.westus.azurecontainer.io|g" ./ext.cnf
    # RUN sed -i "s|IP.2 = ::1|IP.2 = <YOUR EST SERVER IP ADDRESS>|g" ./ext.cnf
    
    # Set EST server certificate to be valid for 10 years
    RUN sed -i "s|-keyout \$EST_SERVER_PRIVKEY -subj|-keyout \$EST_SERVER_PRIVKEY -days 7300 -subj |g" ./createCA.sh
    
    # Create the CA
    RUN echo 1 | ./createCA.sh
    
    # Set cert default-days to 1 to show EST renewal
    RUN sed -i "s|default_days   = 365|default_days   = 1 |g" ./estExampleCA.cnf
    
    # The EST server listens on port 8085 by default
    # Uncomment to change the port to 443 or something else. If changed, EXPOSE that port instead of 8085. 
    # RUN sed -i "s|estserver -c|estserver -p 443 -c |g" ./runserver.sh
    EXPOSE 8085
    CMD ./runserver.sh
    
  3. En el directorio que contiene Dockerfile, compile la imagen a partir del Dockerfile de ejemplo.

    sudo docker build . --tag est
    
  4. Inicie el contenedor y exponga el puerto 8085 del contenedor al puerto 8085 del host.

    sudo docker run -d -p 8085:8085 est
    
  5. El servidor de EST ya se está ejecutando y se puede acceder a él mediante localhost en el puerto 8085. Compruebe que está disponible, para lo que debe ejecutar un comando para ver su certificado de servidor.

    openssl s_client -showcerts -connect localhost:8085
    
  6. Debería ver -----BEGIN CERTIFICATE----- en la mitad de la salida. Al recuperar el certificado, se comprueba que se puede acceder al servidor y que se puede presentar su certificado.

Sugerencia

Para ejecutar este contenedor en la nube, compile la imagen e insértela en Azure Container Registry. Luego, siga las instrucciones del inicio rápido para realizar la implementación en Azure Container Instance.

Descarga del certificado de entidad de certificación

Cada dispositivo requiere el certificado de la entidad de certificación (CA) que esté asociado a un certificado de identidad del dispositivo.

  1. En el dispositivo IoT Edge, cree el directorio /var/aziot/certs, si no existe, y cambie a dicho directorio.

    # If the certificate directory doen't exist, create, set ownership, and set permissions
    sudo mkdir -p /var/aziot/certs
    sudo chown aziotcs:aziotcs /var/aziot/certs
    sudo chmod 755 /var/aziot/certs
    
    # Change directory to /var/aziot/certs
    cd /var/aziot/certs
    
  2. Recupere el certificado de la entidad de certificación del servidor de EST, que se encuentra en el directorio /var/aziot/certs, y asígnele el nombre cacert.crt.pem.

    openssl s_client -showcerts -verify 5 -connect localhost:8085 < /dev/null | sudo awk '/BEGIN/,/END/{ if(/BEGIN/){a++}; out="cert"a".pem"; print >out}' && sudo cp cert2.pem cacert.crt.pem
    
  3. Los certificados deberán ser propiedad del usuario del servicio de claves aziotcs. Establezca la propiedad en aziotcs para todos los archivos de certificado y establezca permisos. Para obtener más información sobre la propiedad y los permisos del certificado, consulte Requisitos de permisos.

    # Give aziotcs ownership to certificates
    sudo chown -R aziotcs:aziotcs /var/aziot/certs
    # Read and write for aziotcs, read-only for others
    sudo find /var/aziot/certs -type f -name "*.*" -exec chmod 644 {} \;
    

Aprovisionamiento de un dispositivo IoT Edge mediante DPS

El uso de Device Provisioning Service permite emitir y renovar automáticamente certificados de un servidor de EST en IoT Edge. Al usar el servidor de EST del tutorial, los certificados de identidad expiran en un día, lo que hace que el aprovisionamiento manual con IoT Hub sea poco práctico, ya que cada vez que expira el certificado, la huella digital debe actualizarse manualmente en IoT Hub. La autenticación de entidad de certificación de DPS con el grupo de inscripción permite renovar los certificados de identidad del dispositivo sin necesidad de ningún paso manual.

Carga del certificado de entidad de certificación a DPS

  1. Si Device Provisioning Service no está vinculado a IoT Hub, consulte Inicio rápido: Configuración de Azure IoT Hub Device Provisioning Service con Azure Portal.

  2. Transfiera el archivo cacert.crt.pem del dispositivo a un equipo con acceso a Azure Portal, como por ejemplo el equipo de desarrollo. Una manera sencilla de transferir el certificado es conectarse de forma remota al dispositivo, mostrar el certificado mediante el comando cat /var/aziot/certs/cacert.crt.pem, copiar toda la salida y pegar el contenido en un nuevo archivo en el equipo de desarrollo.

  3. En Azure Portal, navegue hasta la instancia de IoT Hub Device Provisioning Service.

  4. En Configuración, seleccione Certificados y, después, +Agregar.

    Captura de pantalla en la que se agrega un certificado de una entidad de certificación a Device Provisioning Service desde Azure Portal.

    Configuración Valor
    Nombre del certificado Especificar un nombre descriptivo para el certificado de la entidad de certificación
    Archivo .pem o .cer de certificado Vaya al archivo cacert.crt.pem desde el servidor de EST.
    Establecer el estado del certificado en comprobado al cargar Seleccionar la casilla
  5. Seleccione Guardar.

Creación del grupo de inscripción

  1. En Azure Portal, navegue hasta la instancia de IoT Hub Device Provisioning Service.

  2. En Configuración, seleccione Administrar inscripciones.

  3. Seleccione Add enrollment group (Agregar grupo de inscripción) y, a continuación, complete los pasos siguientes para configurar la inscripción.

  4. En la pestaña Registro y aprovisionamiento, elija la siguiente configuración:

    Captura de pantalla en la que se agregar un grupo de inscripción de DPS mediante Azure Portal.

    Configuración Valor
    Mecanismo de atestación Seleccione Certificados de cliente X.509 cargados en esta instancia de servicio de aprovisionamiento de dispositivos
    Certificado principal Elija el certificado en la lista desplegable.
    Nombre del grupo Especificar un nombre descriptivo para esta inscripción de grupo
    Estado de aprovisionamiento Active la casilla Habilitar esta inscripción
  5. En la pestaña Centros de IoT, elija el IoT Hub de la lista.

  6. En la pestaña Configuración del dispositivo, active la casilla Habilitar IoT Edge en dispositivos aprovisionados.

    Los restantes valores no son relevantes para el tutorial. Puede aceptar la configuración predeterminada.

  7. Seleccione Revisar + crear.

Ahora que existe una inscripción para el dispositivo, el runtime de IoT Edge puede administrar automáticamente los certificados de dispositivo para el IoT Hub vinculado.

Configurar un dispositivo IoT Edge.

En el dispositivo IoT Edge, actualice el archivo de configuración IoT Edge para usar certificados de dispositivo del servidor de EST.

  1. Abra el archivo de configuración de IoT Edge mediante un editor. Por ejemplo, use el editor nano para abrir el archivo /etc/aziot/config.toml.

    sudo nano /etc/aziot/config.toml
    
  2. Agregue o reemplace las secciones siguientes en el archivo de configuración. Estos valores de configuración usan inicialmente nombre de usuario y autenticación mediante contraseña para obtener el certificado del dispositivo del servidor de EST. El certificado del dispositivo se usa para autenticarse en el servidor EST para futuras renovaciones de certificados.

    Reemplace el texto del siguiente marcador de posición: <DPS-ID-SCOPE> por el ámbito de identificador del DPS vinculado a la instancia de IoT Hub que contiene el dispositivo registrado y myiotedgedevice por el identificador de dispositivo registrado en Azure IoT Hub. El valor de Ámbito de identificador se puede encontrar en la página Información general de DPS.

    # DPS provisioning with X.509 certificate
    # Replace with ID Scope from your DPS
    [provisioning]
    source = "dps"
    global_endpoint = "https://global.azure-devices-provisioning.net"
    id_scope = "<DPS-ID-SCOPE>"
    
    [provisioning.attestation]
    method = "x509"
    registration_id = "myiotedgedevice"
    
    [provisioning.attestation.identity_cert]
    method = "est"
    common_name = "myiotedgedevice"
    
    # Auto renewal settings for the identity cert
    # Available only from IoT Edge 1.3 and above
    [provisioning.attestation.identity_cert.auto_renew]
    rotate_key = false
    threshold = "80%"
    retry = "4%"
    
    # Trusted root CA certificate in the global EST options
    # Optional if the EST server's TLS certificate is already trusted by the system's CA certificates.
    [cert_issuance.est]
        trusted_certs = [
            "file:///var/aziot/certs/cacert.crt.pem",
        ]
    
    # The default username and password for libest
    # Used for initial authentication to EST server
    #
    # Not recommended for production
    [cert_issuance.est.auth]
    username = "estuser"
    password = "estpwd"
    
    [cert_issuance.est.urls]
    default = "https://localhost:8085/.well-known/est"
    

    Nota

    En este ejemplo, IoT Edge usa el nombre de usuario y la contraseña para realizar la autenticación en el servidor de EST cada vez que necesita obtener un certificado. Este método no se recomienda en producción porque 1) requiere almacenar un secreto en texto no cifrado y 2) IoT Edge debe usar un certificado de identidad para autenticarse también en el servidor de EST. Para modificar para producción:

    1. Considere la posibilidad de usar certificados de arranque de larga duración que se puedan almacenar en el dispositivo durante la fabricación, de forma similar a lo que se hace en el enfoque recomendado para DPS. Para ver cómo configurar el certificado de arranque para un servidor de EST, consulte el artículo en que se explica cómo autenticar un dispositivo mediante certificados emitidos dinámicamente a través de EST.
    2. Configure [cert_issuance.est.identity_auto_renew] con la misma sintaxis que la configuración de renovación automática del certificado de aprovisionamiento anterior.

    De este modo, el servicio de certificados de IoT Edge usa el certificado de arranque para la autenticación inicial con el servidor de EST y solicita un certificado de identidad para futuras solicitudes de EST al mismo servidor. Si, por algún motivo, el certificado de identidad de EST expira antes de la renovación, IoT Edge recurre al uso del certificado de arranque.

  3. Ejecute sudo iotedge config apply para aplicar la nueva configuración.

  4. Ejecute sudo iotedge check para comprobar la configuración del dispositivo IoT Edge. El resultado de todas las comprobaciones de configuración debe ser satisfactorio. Para este tutorial, puede omitir los errores y advertencias de preparación de producción, las advertencias del servidor DNS y las comprobaciones de conectividad.

  5. Vaya al dispositivo en IoT Hub. Se han agregado automáticamente huellas digitales del certificado al dispositivo mediante DPS y el servidor de EST.

    Captura de pantalla de la configuración de un dispositivo IoT Hub en Azure Portal. Los campos de las huellas digitales del certificado muestran valores.

    Nota

    Al crear un dispositivo IoT Edge, muestra el código de estado 417 -- The device's deployment configuration is not set in the Azure portal.. Este estado es normal y significa que el dispositivo está listo para recibir una implementación del módulo.

Prueba de renovación de certificado

Puede volver a emitir inmediatamente los certificados de identidad del dispositivo. Para ello, debe quitar los certificados y claves existentes del dispositivo y, después, aplicar la configuración de IoT Edge. IoT Edge detecta los archivos que faltan y solicita nuevos certificados.

  1. En el dispositivo IoT Edge, detenga el entorno de ejecución de Azure IoT Edge.

    sudo iotedge system stop
    
  2. Elimine los certificados y claves existentes.

    sudo sh -c "rm /var/lib/aziot/certd/certs/*"
    sudo sh -c "rm /var/lib/aziot/keyd/keys/*"
    
  3. Aplique la configuración de IoT Edge para renovar los certificados.

    sudo iotedge config apply
    

    Es posible que tenga que esperar unos minutos para que se inicie el entorno de ejecución.

  4. Vaya al dispositivo en IoT Hub. Se han actualizado las huellas digitales del certificado.

    Captura de pantalla de la configuración de un dispositivo IoT Hub en Azure Portal. Los campos de las huellas digitales del certificado muestran valores nuevos.

  5. Enumere los archivos de certificado mediante el comando sudo ls -l /var/lib/aziot/certd/certs. Debería ver fechas de creación recientes en los archivos de certificado de dispositivo.

  6. Use el comando openssl para comprobar el nuevo contenido del certificado. Por ejemplo:

    sudo openssl x509 -in /var/lib/aziot/certd/certs/deviceid-bd732105ef89cf8edd2606a5309c8a26b7b5599a4e124a0fe6199b6b2f60e655.cer -text -noout
    

    Reemplace el nombre del archivo de certificado de dispositivo (.cer) por el archivo de certificado del dispositivo.

    Debe observar que el intervalo de fechas de validez del certificado ha cambiado.

A continuación se muestran otras formas opcionales de probar la renovación de certificados. Estas comprobaciones muestran cómo IoT Edge renueva los certificados del servidor de EST cuando expiran o faltan. Tras cada prueba, puede comprobar las huellas digitales nuevas en Azure Portal y usar el comando openssl para comprobar el nuevo certificado.

  1. Pruebe a esperar un día, para que el certificado expire. El servidor de EST de prueba está configurado para crear certificados que expiren al cabo de un día. IoT Edge renueva automáticamente el certificado.
  2. Intente ajustar el porcentaje en threshold para la renovación automática establecida en config.toml (actualmente establecida en un 80 % en la configuración de ejemplo). Por ejemplo, establezca el valor en 10% y observe la renovación del certificado cada 2 horas aproximadamente.
  3. Intente ajustar threshold a un entero seguido de m (minutos). Por ejemplo, establezca el valor en 60m y observe la renovación del certificado 1 hora antes de la expiración.

Limpieza de recursos

Puede conservar los recursos y configuraciones que creó en este tutorial y reutilizarlos. En caso contrario, para evitar gastos, puede eliminar las configuraciones locales y los recursos de Azure que creó en este artículo.

Eliminación de recursos de Azure

La eliminación de los recursos de Azure y de los grupos de recursos es un proceso irreversible. Asegúrese de no eliminar por accidente el grupo de recursos o los recursos equivocados. Si ha creado el centro de IoT en un grupo de recursos ya existente que tiene recursos que desea conservar, elimine solo el recurso del centro de IoT en sí en lugar de eliminar todo el grupo de recursos.

Para eliminar los recursos:

  1. Inicie sesión en Azure Portal y después seleccione Grupos de recursos.

  2. Seleccione el nombre del grupo de recursos que contiene los recursos de prueba de IoT Edge.

  3. Revise la lista de los recursos contenidos en el grupo de recursos. Si desea eliminar todos ellos, puede seleccionar Eliminar grupo de recursos. Si desea eliminar solo algunos de ellos, puede hacer clic en cada recurso para eliminarlos individualmente.

Pasos siguientes