Tutorial: Configuración del protocolo Enrollment over Secure Transport para Azure IoT Edge
Se aplica a: IoT Edge 1.5 IoT Edge 1.4
Importante
IoT Edge 1.5 LTS e 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
Requisitos previos
- Un dispositivo con IoT Edge que tenga instalado el runtime de Azure IoT Edge más reciente. Si necesita crear un dispositivo de prueba, complete Inicio rápido: Implementación del primer módulo de IoT Edge en un dispositivo virtual Linux.
- El dispositivo con IoT Edge requiere el runtime 1.2 de Azure IoT Edge, o cualquier versión posterior, para lograr compatibilidad con EST. Se requiere Azure IoT Edge runtime 1.3 o posterior para la renovación del certificado EST.
- IoT Hub Device Provisioning Service (DPS) vinculado a IoT Hub. Para obtener información sobre cómo configurar DPS, consulte Inicio rápido: Configuración de Azure IoT Hub Device Provisioning Service con Azure Portal.
Nota:
Para usar IoT Edge y EST para la emisión y renovación automáticas de certificados de identidad de dispositivo, que se recomienda para producción, IoT Edge deben aprovisionarse como parte de un grupo de inscripción basado en CA de DPS. Otros métodos de aprovisionamiento, incluido el aprovisionamiento manual de X.509 con IoT Hub y DPS con inscripción individual no admiten la renovación de certificados de identidad del dispositivo automática.
¿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.
Utilice, por ejemplo, el protocolo SSH para conectarse en el que ha instalado IoT Edge.
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
En el directorio que contiene
Dockerfile
, compile la imagen a partir del Dockerfile de ejemplo.sudo docker build . --tag est
Inicie el contenedor y exponga el puerto 8085 del contenedor al puerto 8085 del host.
sudo docker run -d -p 8085:8085 est
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
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.
En el dispositivo IoT Edge, cree el directorio
/var/aziot/certs
, si no existe, y cambie a dicho directorio.# 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
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 nombrecacert.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
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
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.
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 comandocat /var/aziot/certs/cacert.crt.pem
, copiar toda la salida y pegar el contenido en un nuevo archivo en el equipo de desarrollo.En Azure Portal, navegue hasta la instancia de IoT Hub Device Provisioning Service.
En Configuración, seleccione Certificados y, después, +Agregar.
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 Seleccione Guardar.
Creación del grupo de inscripción
En Azure Portal, navegue hasta la instancia de IoT Hub Device Provisioning Service.
En Configuración, seleccione Administrar inscripciones.
Seleccione Add enrollment group (Agregar grupo de inscripción) y, a continuación, 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 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 En la pestaña Centros de IoT, elija el IoT Hub de la lista.
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.
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.
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
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 ymyiotedgedevice
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 utiliza 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:
- 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.
- 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.
Ejecute
sudo iotedge config apply
para aplicar la nueva configuración.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.Vaya al dispositivo en IoT Hub. Se han agregado automáticamente huellas digitales del certificado al dispositivo mediante DPS y el servidor de EST.
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.
En el dispositivo IoT Edge, detenga el entorno de ejecución de Azure IoT Edge.
sudo iotedge system stop
Elimine 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 los certificados.
sudo iotedge config apply
Es posible que tenga que esperar unos minutos para que se inicie el entorno de ejecución.
Vaya al dispositivo en IoT Hub. Se han actualizado 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 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.
- 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.
- Intente ajustar el porcentaje en
threshold
para la renovación automática establecida enconfig.toml
(actualmente establecida en un 80 % en la configuración de ejemplo). Por ejemplo, establezca el valor en10%
y observe la renovación del certificado cada 2 horas aproximadamente. - Intente ajustar
threshold
a un entero seguido dem
(minutos). Por ejemplo, establezca el valor en60m
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:
Inicie sesión en Azure Portal y después 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, puede seleccionar cada recurso para eliminarlos individualmente.
Pasos siguientes
- Para usar el servidor de EST para emitir certificados de entidad de certificación de Edge, consulte la configuración de ejemplo.
- No se recomienda usar el nombre de usuario y la contraseña para arrancar la autenticación en el servidor de EST para producción. En su lugar, 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.
- El servidor de EST también se puede usar para emitir certificados para todos los dispositivos de una jerarquía. En función de que tenga requisitos de ISA-95, es posible que haya que ejecutar una cadena de servidores de EST, uno en cada nivel, o bien usar el módulo de proxy de API para reenviar las solicitudes. Para más información, consulte el blog de Kevin.
- Para las soluciones de nivel empresarial, considere: GlobalSign IoT Edge Enroll, Administrador de dispositivos de DigiCert IoT , y Keytos EZCA.
- Para más información sobre certificados, consulte Información sobre los certificados de Azure IoT Edge.