Compartir a través de


Tutorial: Configuración de la inscripción a través del servidor de transporte seguro para Azure IoT Edge

Se aplica a:IoT Edge 1.5 checkmark IoT Edge 1.5

Importante

IoT Edge 1.5 LTS es la versión compatible. IoT Edge 1.4 LTS alcanzó el final del ciclo de vida el 12 de noviembre de 2024. Si usa una versión anterior, consulte Update IoT Edge.

Al utilizar Azure IoT Edge, puede configurar los dispositivos para que usen un servidor de Inscripción sobre Transporte Seguro (EST) para administrar certificados x.509.

Este tutorial le guía por el hospedaje de un servidor EST de prueba y la configuración de un dispositivo IoT Edge para la inscripción y renovación de certificados x509 de identidad de dispositivo. En este tutorial, aprenderá a:

  • Creación y hospedaje de un servidor EST de prueba para certificados de identidad de dispositivo
  • Configurar la inscripción de grupos de DPS
  • Configuración del dispositivo

Requisitos previos

Asegúrese de que cumple los siguientes requisitos previos antes de empezar:

Nota:

Para usar EST y IoT Edge para la emisión y renovación automáticas de certificados de identidad de dispositivo, que se recomienda para producción, IoT Edge debe aprovisionarse como parte de un grupo de inscripción basado en CA de DPS. Otros métodos de aprovisionamiento, incluido el aprovisionamiento manual X.509 con IoT Hub y DPS con inscripción individual, no admiten la renovación automática de certificados de identidad de dispositivo.

¿Qué es Inscripción a través de Transporte Seguro?

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 instancias 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, los dispositivos necesitan acceso a un servidor EST.

Importante

Para producción, use GlobalSign IoT Edge Enroll o DigiCert IoT Device Manager.

Para obtener más información sobre el uso del servicio EST de GlobalSign, consulte Automatic IoT Edge Certificate Management with GlobalSign EST.

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

Ejecución del servidor de EST en el dispositivo

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

El Dockerfile utiliza Ubuntu 18.04, una biblioteca de Cisco llamada libest y código de servidor de ejemplo. Se configura con las siguientes opciones que puede cambiar:

  • Autoridad 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 EST se ejecuta localmente en el dispositivo IoT Edge en un contenedor

Precaución

No use este Dockerfile en producción.

  1. Conéctese al dispositivo, por ejemplo, mediante SSH, donde instaló IoT Edge.

  2. Cree un archivo denominado Dockerfile (distingue mayúsculas de minúsculas) y agregue el contenido de ejemplo mediante su editor de texto favorito.

    Sugerencia

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

    # 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 use the EST server to issue Edge CA certificates, 
    ## uncomment the RUN sed section after this comment block. 
    ## The sed commands add special extensions for Edge CA certificates. For more information see: 
    ## https://learn.microsoft.com/azure/iot-edge/how-to-manage-device-certificates?tabs=windows#edge-ca-in-production
    ##
    ## IMPORTANT:
    ##   DO NOT issue Edge CA certificates in production.
    ##   For production, use digital certificates from a trusted CA.
    ##   See https://techcommunity.microsoft.com/blog/iotblog/automatic-iot-edge-certificate-management-with-globalsign-est/4384385
    ##
    ##   Using EST for Edge CA is for demonstration and learning purposes only.
    ##
    # RUN sed -i "s|basicConstraints=CA:FALSE|basicConstraints=critical,CA:TRUE,pathlen:0|g" ./estExampleCA.cnf && \
    #     sed -i "s|keyUsage=digitalSignature|keyUsage=critical,digitalSignature,keyCertSign|g" ./estExampleCA.cnf && \
    #     sed -i "s|authorityKeyIdentifier=keyid|authorityKeyIdentifier=keyid:always|g" ./estExampleCA.cnf
    
    ## 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 lines.
    # 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. Ahora, el servidor EST se está ejecutando y se puede acceder a él mediante localhost 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ías ver -----BEGIN CERTIFICATE----- en medio del resultado. 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 y push la imagen en Azure Container Registry. A continuación, siga el quickstart para implementar en Azure Container Instance.

Descarga del certificado de entidad de certificación

Cada dispositivo requiere el certificado de entidad de certificación (CA) asociado a un certificado de identidad de dispositivo.

  1. En el dispositivo IoT Edge, cree el directorio /var/aziot/certs si no existe y, a continuación, cambie el directorio a él.

    # If the certificate directory doesn'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 CA del servidor EST en el directorio /var/aziot/certs y asígneles cacert.crt.pemel nombre .

    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. El usuario de servicio clave aziotcs debe poseer los certificados. 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 {} \;
    

Aprovisionar dispositivo IoT Edge mediante DPS

Mediante device Provisioning Service, puede emitir y renovar automáticamente certificados de un servidor EST en IoT Edge. Al usar el servidor 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 de identidad, debe actualizar manualmente la huella digital en IoT Hub. La autenticación de CA de DPS con el grupo de inscripción permite renovar los certificados de identidad del dispositivo sin necesidad de pasos manuales.

Carga del certificado de entidad de certificación a DPS

  1. Si no tiene un servicio Device Provisioning vinculado a IoT Hub, consulte Quickstart: Configuración del servicio de aprovisionamiento de dispositivos IoT Hub con el portal de Azure.

  2. Transfiera el archivo cacert.crt.pem desde el dispositivo a un equipo con acceso al portal de Azure, como el equipo de desarrollo. Una manera fácil 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 el portal Azure, vaya a la instancia del Servicio de Aprovisionamiento de Dispositivos de IoT Hub.

  4. En Configuración, seleccione Certificados y, a continuación, seleccione +Agregar.

    Captura de pantalla al agregar un certificado de entidad de certificación al servicio Device Provisioning mediante el portal de Azure.

    Configuración Valor
    Nombre del certificado Escriba un nombre amigable para el certificado de autoridad de certificación.
    Archivo de certificado .pem o .cer Navegue hasta cacert.crt.pem desde el servidor EST.
    Establecer el estado del certificado en comprobado al cargar Seleccionar la casilla.
  5. Haga clic en Guardar.

Creación del grupo de inscripción

  1. En el portal Azure, vaya a su instancia de IoT Hub Device Provisioning Service.

  2. En Configuración, seleccione Administrar inscripciones.

  3. Seleccione Agregar grupo de inscripción y complete los pasos siguientes para configurar la inscripción.

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

    Screenshot que muestra cómo agregar el grupo de inscripción de DPS mediante el portal de Azure.

    Configuración Valor
    Mecanismo de atestación Seleccione certificados X.509 cargados en esta instancia del servicio de aprovisionamiento de dispositivos.
    Certificado principal Elija el certificado en la lista desplegable.
    Nombre del grupo Proporcione un nombre amigable para este registro de grupo.
    Estado de aprovisionamiento Seleccione la casilla Habilitar esta inscripción.
  5. En la pestaña Centros de IoT , elija su centro de IoT en la lista.

  6. En la pestaña Configuración de dispositivos, active la casilla Enable IoT Edge en dispositivos aprovisionados. Los restantes valores no son relevantes para el tutorial. Puede aceptar la configuración predeterminada.

  7. Selecciona Revisar + crear.

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

Configuración del dispositivo IoT Edge

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

  1. Abra el archivo de configuración IoT Edge mediante un editor. Por ejemplo, use el nano editor 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. Estas opciones de configuración usan inicialmente la autenticación de nombre de usuario y contraseña para obtener el certificado de dispositivo del servidor EST. El certificado de dispositivo se autentica en el servidor EST para futuras renovaciones de certificados.

    Reemplace el siguiente texto de marcador de posición: <DPS-ID-SCOPE> por el ámbito de ID del DPS vinculado al centro de IoT que contiene el dispositivo registrado y myiotedgedevice por el identificador de dispositivo registrado en Azure IoT Hub. Puede encontrar el valor Ámbito de ID 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 autenticarse en el servidor EST cada vez que necesita obtener un certificado. Este método no se recomienda en producción porque requiere almacenar un secreto en texto no cifrado. Además, IoT Edge debe usar un certificado de identidad para autenticarse en el servidor EST. Para modificar para producción:

    1. Considere la posibilidad de usar certificados de arranque de larga duración que se almacenan en el dispositivo durante la fabricación similar al enfoque recomendado para DPS. Para ver cómo configurar el certificado de arranque para el servidor EST, consulte Authenticate un dispositivo mediante certificados emitidos dinámicamente a través de EST.
    2. Configura [cert_issuance.est.identity_auto_renew] utilizando la misma sintaxis que la configuración de renovación automática del certificado de aprovisionamiento que se muestra en el ejemplo anterior.

    De este modo, IoT Edge servicio de certificados usa el certificado de arranque para la autenticación inicial con el servidor EST y solicita un certificado de identidad para futuras solicitudes EST al mismo servidor. Si, por algún motivo, el certificado de identidad 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. Todas las comprobaciones de configuración deben realizarse correctamente. 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. Navegue a su dispositivo en el IoT Hub. Las huellas digitales de certificado se agregan automáticamente al dispositivo mediante DPS y el servidor EST.

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

    Nota:

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

Renovación de certificado de prueba

Puede volver a emitir inmediatamente los certificados de identidad del dispositivo quitando los certificados y claves existentes del dispositivo y aplicando 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 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 certificados.

    sudo iotedge config apply
    

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

  4. Vaya a su dispositivo en IoT Hub. Se actualizan las huellas digitales del certificado.

    Una captura de pantalla de la configuración del dispositivo de IoT Hub en el portal de Azure. Los campos de huellas digitales de certificado muestran nuevos valores.

  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 openssl comando 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.

Las siguientes pruebas opcionales muestran cómo IoT Edge renueva los certificados del servidor EST cuando expiran o faltan. Después de cada prueba, puede comprobar las nuevas huellas digitales en el portal de Azure y usar el comando openssl para comprobar el nuevo certificado.

  1. Espere un día para que expire el certificado. 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. Ajuste el porcentaje de threshold para la renovación automática establecida en config.toml (actualmente establecido en 80% en la configuración de ejemplo). Por ejemplo, establézcalo en 10% y observe la renovación de certificados aproximadamente cada 2 horas.
  3. Ajuste el threshold a un número entero seguido de m (minutos). Por ejemplo, establézcalo 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. De lo contrario, elimine las configuraciones locales y los recursos de Azure que usó en este artículo para evitar cargos.

Eliminación de recursos de Azure

No se puede deshacer la eliminación de recursos de Azure ni de grupos de recursos. Asegúrese de no eliminar por accidente el grupo de recursos o los recursos equivocados. Si creó el IoT Hub dentro de un grupo de recursos existente que tiene recursos que desea conservar, elimine solo el recurso IoT Hub, no el grupo de recursos.

Para eliminar los recursos:

  1. Inicie sesión en el portal Azure y 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 recursos que contiene el grupo de recursos. Si desea eliminar todos ellos, puede seleccionar Eliminar grupo de recursos. Si desea eliminar solo algunos de ellos, seleccione cada recurso para eliminarlos individualmente.

Pasos siguientes