Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Se aplica a:
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:
- Un dispositivo IoT Edge existente con la última versión del runtime de Azure IoT Edge instalado. Si necesita crear un dispositivo de prueba, complete el Quickstart: Implemente el primer módulo de IoT Edge en un dispositivo Linux virtual.
- El dispositivo IoT Edge requiere Azure IoT Edge runtime 1.2 o posterior para la compatibilidad con EST. La renovación de certificados EST requiere Azure IoT Edge runtime 1.3 o posterior.
- IoT Hub Device Provisioning Service (DPS) vinculado a IoT Hub. Para obtener información sobre cómo configurar DPS, consulte Quickstart: Configuración del servicio de aprovisionamiento de dispositivos de IoT Hub con el portal de Azure.
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.
Conéctese al dispositivo, por ejemplo, mediante SSH, donde instaló IoT Edge.
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.ioal 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.shEn el directorio que contiene
Dockerfile, compile la imagen a partir del dockerfile de ejemplo.sudo docker build . --tag estInicie el contenedor y exponga el puerto 8085 del contenedor al puerto 8085 del host.
sudo docker run -d -p 8085:8085 estAhora, el servidor EST se está ejecutando y se puede acceder a él mediante
localhostel 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:8085Deberí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.
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/certsRecupere 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.pemEl 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
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.
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.En el portal Azure, vaya a la instancia del Servicio de Aprovisionamiento de Dispositivos de IoT Hub.
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.pemdesde el servidor EST.Establecer el estado del certificado en comprobado al cargar Seleccionar la casilla. Haga clic en Guardar.
Creación del grupo de inscripción
En el portal Azure, vaya a su instancia de IoT Hub Device Provisioning Service.
En Configuración, seleccione Administrar inscripciones.
Seleccione Agregar grupo de inscripción y complete los pasos siguientes para configurar la inscripción.
En la pestaña Registro y aprovisionamiento , elija la siguiente configuración:
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. En la pestaña Centros de IoT , elija su centro de IoT en la lista.
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.
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.
Abra el archivo de configuración IoT Edge mediante un editor. Por ejemplo, use el
nanoeditor para abrir el archivo /etc/aziot/config.toml :sudo nano /etc/aziot/config.tomlAgregue 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 ymyiotedgedevicepor 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:
- 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.
- 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.
Ejecute
sudo iotedge config applypara aplicar la nueva configuración.Ejecute
sudo iotedge checkpara 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.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.
En el dispositivo IoT Edge, detenga el entorno de ejecución de IoT Edge.
sudo iotedge system stopElimine los certificados y claves existentes.
sudo sh -c "rm /var/lib/aziot/certd/certs/*" sudo sh -c "rm /var/lib/aziot/keyd/keys/*"Aplique la configuración de IoT Edge para renovar certificados.
sudo iotedge config applyEs posible que tenga que esperar unos minutos para que se inicie el entorno de ejecución.
Vaya a su dispositivo en IoT Hub. Se actualizan las huellas digitales del certificado.
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.Use el
opensslcomando para comprobar el nuevo contenido del certificado. Por ejemplo:sudo openssl x509 -in /var/lib/aziot/certd/certs/deviceid-bd732105ef89cf8edd2606a5309c8a26b7b5599a4e124a0fe6199b6b2f60e655.cer -text -nooutReemplace 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.
- 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.
- Ajuste el porcentaje de
thresholdpara la renovación automática establecida en config.toml (actualmente establecido en 80% en la configuración de ejemplo). Por ejemplo, establézcalo en10%y observe la renovación de certificados aproximadamente cada 2 horas. - Ajuste el
thresholda un número entero seguido dem(minutos). Por ejemplo, establézcalo en60my 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:
- Inicie sesión en el portal Azure y seleccione Grupos de recursos.
- Seleccione el nombre del grupo de recursos que contiene los recursos de prueba de IoT Edge.
- 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
- Para usar el servidor EST para emitir certificados de CA perimetrales, consulte la configuración de example.
- No se recomienda usar un nombre de usuario y una contraseña para arrancar la autenticación en el servidor EST para producción. En su lugar, considere la posibilidad de usar certificados de arranque de larga duración que se pueden almacenar en el dispositivo durante la fabricación similar al enfoque recomendado para DPS. Para obtener información sobre 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.
- El servidor de EST también se puede usar para emitir certificados para todos los dispositivos de una jerarquía. En función de si tiene requisitos de ISA-95, es posible que sea necesario ejecutar una cadena de servidores EST con uno en cada nivel o usar el módulo de proxy de API para reenviar las solicitudes. Para obtener más información, consulte el blog de Kevin.
- Para las soluciones de nivel empresarial, considere: GlobalSign IoT Edge Enroll, DigiCert IoT Device Manager y Keytos EZCA.
- Para obtener más información sobre los certificados, vea Understand cómo Azure IoT Edge usa certificados.