Inicio rápido: Aprovisionamiento de un dispositivo simulado de certificado X.509

En este inicio rápido, crea un dispositivo simulado en una máquina Windows. El dispositivo simulado está configurado para usar el mecanismo de atestación de certificados X.509 para la autenticación. Después de configurar el dispositivo, aprovisiónelo en un centro de IoT mediante Azure IoT Hub Device Provisioning Service.

Si no conoce el proceso de aprovisionamiento, consulte la información general sobre el aprovisionamiento. Asegúrese de completar los pasos descritos en Configuración del servicio Azure IoT Hub Device Provisioning con Azure Portal antes de continuar.

En este inicio rápido se muestra una solución para una estación de trabajo basada en Windows. No obstante, también puede realizar los procedimientos en Linux. Para obtener un ejemplo de Linux, vea el Tutorial: Aprovisionamiento de la geolatencia.

Requisitos previos

Los siguientes requisitos previos corresponden a un entorno de desarrollo de Windows. En el caso de Linux o macOS, consulte la sección correspondiente en Preparación del entorno de desarrollo en la documentación del SDK.

  • Instale Visual Studio 2022 con la carga de trabajo "Desarrollo para el escritorio con C++" habilitada. También se admiten Visual Studio 2015, Visual Studio 2017 y Visual Studio 19. En el caso de Linux o macOS, consulte la sección correspondiente en Preparación del entorno de desarrollo en la documentación del SDK.

  • Instale el sistema de compilación de CMake más reciente. Asegúrese de comprobar la opción que agrega el ejecutable de CMake a la ruta de acceso.

    Importante

    Confirme que los requisitos previos de Visual Studio (Visual Studio y la carga de trabajo "Desarrollo para el escritorio con C++") estén instalados en la máquina antes de empezar la instalación de CMake. Una vez que los requisitos previos están en su lugar, y se ha comprobado la descarga, instale el sistema de compilación de CMake. Igualmente, tenga en cuenta que las versiones anteriores del sistema de compilación CMake no generan el archivo de solución que se usa en este artículo. Asegúrese de usar la versión más reciente de CMake.

Los siguientes requisitos previos corresponden a un entorno de desarrollo de Windows. En el caso de Linux o macOS, consulte la sección correspondiente en Preparación del entorno de desarrollo en la documentación del SDK.

  • Instale el SDK de .NET 6.0 o una versión posterior en una máquina con Windows. Para comprobar la versión, use el siguiente comando.

    dotnet --info
    

Los siguientes requisitos previos corresponden a un entorno de desarrollo de Windows. En el caso de Linux o macOS, consulte la sección correspondiente en Preparación del entorno de desarrollo en la documentación del SDK.

Los siguientes requisitos previos corresponden a un entorno de desarrollo de Windows.

Los siguientes requisitos previos corresponden a un entorno de desarrollo de Windows. En el caso de Linux o macOS, consulte la sección correspondiente en Preparación del entorno de desarrollo en la documentación del SDK.

  • Instale la última versión de Git. Asegúrese de que Git se ha agregado a las variables de entorno accesibles desde la ventana de comandos. Consulte las herramientas de cliente de Git de Software Freedom Conservancy para instalar la versión más reciente de las herramientas git, lo que incluye Git Bash, la aplicación de línea de comandos que puede usar para interactuar con su repositorio de Git local.

  • Asegúrese de que OpenSSL está instalado en la máquina. En Windows, la instalación de Git incluye una instalación de OpenSSL. Puede acceder a OpenSSL desde el símbolo del sistema de Git Bash. Para comprobar que OpenSSL está instalado, abra un símbolo del sistema de Git Bash y escriba openssl version.

    Nota:

    A menos que esté familiarizado con OpenSSL y ya lo tenga instalado en la máquina Windows, se recomienda usar OpenSSL desde el símbolo del sistema de Git Bash. Como alternativa, puede optar por descargar el código fuente y compilar OpenSSL. Para más información, consulte la página Descargas de OpenSSL. O bien, puede descargar la precompilación de OpenSSL de un tercero. Para más información, consulte la wiki de OpenSSL. Microsoft no garantiza la validez de los paquetes descargados de terceros. Si decide compilar o descargar OpenSSL, asegúrese de que se puede acceder al binario de OpenSSL en la ruta de acceso y de que la variable de entorno OPENSSL_CNF esté establecida en la ruta de acceso del archivo openssl.cnf.

  • Abra un símbolo del sistema de Windows y un símbolo del sistema de Git Bash.

    En los pasos de este inicio rápido se supone que usa una máquina Windows y la instalación de OpenSSL que se instala como parte de Git. Se usa el indicador Git Bash para emitir comandos OpenSSL y el indicador de comandos de Windows para todo lo demás. Si usa Linux, puede emitir todos los comandos desde un shell de Bash.

Preparación del entorno de desarrollo

En esta sección, preparará un entorno de desarrollo que se usa para compilar el SDK de Azure IoT para C. El código de ejemplo intenta aprovisionar el dispositivo durante la secuencia de arranque del dispositivo.

  1. Abra un explorador web y vaya a la página de la versión del SDK de Azure IoT para C.

  2. Seleccione la pestaña Etiquetas en la parte superior de la página.

  3. Copie el nombre de etiqueta de la versión más reciente del SDK de Azure IoT para C.

  4. En el símbolo del sistema de Windows, ejecute los siguientes comandos para clonar la versión más reciente del repositorio de GitHub del SDK de dispositivo loT de Azure para C. Reemplace <release-tag> con el nombre de la etiqueta que copió en el paso anterior, por ejemplo: lts_01_2023.

    git clone -b <release-tag> https://github.com/Azure/azure-iot-sdk-c.git
    cd azure-iot-sdk-c
    git submodule update --init
    

    Esta operación puede tardar varios minutos en completarse.

  5. Una vez completada la operación, ejecute los siguientes comandos desde el directorio azure-iot-sdk-c:

    mkdir cmake
    cd cmake
    
  6. El código de ejemplo usa un certificado X.509 para proporcionar atestación mediante la autenticación de X.509. Ejecute el siguiente comando para compilar una versión del SDK específica para su plataforma de desarrollo que incluya el cliente de aprovisionamiento de dispositivos. Se genera una solución de Visual Studio para el dispositivo simulado en el directorio cmake.

    Al especificar la ruta de acceso que se usa con -Dhsm_custom_lib en el comando siguiente, asegúrese de usar la ruta de acceso absoluta a la biblioteca en el directorio cmake que ha creado anteriormente. En la ruta de acceso que se muestra se supone que ha clonado el SDK de C en el directorio raíz de la unidad de C. Si usó otro directorio, ajuste la ruta de acceso según corresponda.

    cmake -Duse_prov_client:BOOL=ON -Dhsm_custom_lib=c:/azure-iot-sdk-c/cmake/provisioning_client/samples/custom_hsm_example/Debug/custom_hsm_example.lib ..
    

Sugerencia

Si cmake no encuentra el compilador de C++, es posible que aparezcan errores de compilación al ejecutar el comando anterior. Si eso sucede, pruebe a ejecutar este comando en el símbolo del sistema de Visual Studio.

  1. Una vez realizada la compilación, las últimas líneas de salida son similares a las siguientes:

    -- Building for: Visual Studio 17 2022
    -- Selecting Windows SDK version 10.0.19041.0 to target Windows 10.0.22000.
    -- The C compiler identification is MSVC 19.32.31329.0
    -- The CXX compiler identification is MSVC 19.32.31329.0
    
    ...
    
    -- Configuring done
    -- Generating done
    -- Build files have been written to: C:/azure-iot-sdk-c/cmake
    

En el símbolo del sistema de Windows, clone el repositorio de GitHub de los ejemplos de kit de desarrollo de software para internet de las cosas de Azure para C# mediante el comando siguiente:

git clone https://github.com/Azure/azure-iot-sdk-csharp.git

En el símbolo del sistema de Windows, clone el repositorio de GitHub del SDK de Azure IoT para Node.js mediante los siguientes comandos:

git clone https://github.com/Azure/azure-iot-sdk-node.git

En el símbolo del sistema de Windows, clone el repositorio de GitHub del SDK de dispositivo loT de Azure para Python con el comando siguiente:

git clone -b v2 https://github.com/Azure/azure-iot-sdk-python.git --recursive

Nota

Los ejemplos que se usan en este tutorial se encuentran en la rama v2 del repositorio azure-iot-sdk-python. La versión 3 del SDK de Python está disponible para su uso en la versión beta.

  1. En el símbolo del sistema de Windows, clone el repositorio de GitHub de los ejemplos de Azure IoT para Java:

    git clone https://github.com/Azure/azure-iot-sdk-java.git --recursive
    
  2. Vaya al directorio azure-iot-sdk-java raíz y compile el proyecto para descargar todos los paquetes necesarios.

    cd azure-iot-sdk-java
    mvn install -DskipTests=true
    

Creación de un certificado de dispositivo X.509 autofirmado

En esta sección, se usa OpenSSL para crear un certificado X.509 autofirmado y una clave privada. Este certificado se carga en su instancia de servicio de aprovisionamiento y es verificado por el servicio.

Precaución

Use certificados creados con OpenSSL en este inicio rápido solo para pruebas de desarrollo. No use estos certificados en producción. Estos certificados expiran después de 30 días y pueden contener contraseñas codificadas de forma rígida, como 1234. Para saber cómo obtener certificados adecuados para usarse en producción, consulte Cómo obtener un certificado de entidad de certificación X.509 en la documentación de Azure IoT Hub.

Realice los pasos de esta sección en el símbolo del sistema de Git Bash.

  1. En el símbolo del sistema de Git Bash, vaya a un directorio donde le gustaría crear los certificados.

  2. Ejecute el comando siguiente:

    winpty openssl req -outform PEM -x509 -sha256 -newkey rsa:4096 -keyout device-key.pem -out device-cert.pem -days 30 -extensions usr_cert -addext extendedKeyUsage=clientAuth -subj "//CN=my-x509-device"
    

    Importante

    La barra diagonal adicional que se proporciona para el nombre de firmante (//CN=my-x509-device) solo es necesaria para escapar la cadena con Git en plataformas Windows.

  3. Cuando se le pida que Enter PEM pass phrase: (Escriba la frase de contraseña de PEM:) use la frase de contraseña 1234.

  4. Cuando se le pregunte de nuevo Verifying - Enter PEM pass phrase: (Verificando: escriba la fase de contraseña de PEM), use de nuevo la frase de contraseña 1234.

    Ahora se deben generar un archivo de certificado de clave pública (device-cert.pem) y un archivo de clave privada (device-key.pem) en el directorio donde ejecutó el comando openssl.

    El archivo de certificado tiene su nombre común de sujeto (CN) establecido en my-x509-device. En el caso de las inscripciones basadas en X.509, el identificador de registro se establece en el nombre común. El identificador de registro es una cadena que no distingue mayúsculas de minúsculas de caracteres alfanuméricos más los caracteres especiales: '-', '.', '_', ':'. El último carácter debe ser alfanumérico o un guion ('-'). El nombre común debe respetar este formato. DPS admite identificadores de registro de hasta 128 caracteres; sin embargo, la longitud máxima del nombre común del firmante en un certificado X.509 es de 64 caracteres. El identificador de registro, por lo tanto, se limita a 64 caracteres cuando se utilizan certificados X.509.

  5. El archivo de certificado está codificado en Base 64. Para ver el nombre común del firmante (CN) y otras propiedades del archivo de certificado, escriba el siguiente comando:

    winpty openssl x509 -in device-cert.pem -text -noout
    
    Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            77:3e:1d:e4:7e:c8:40:14:08:c6:09:75:50:9c:1a:35:6e:19:52:e2
        Signature Algorithm: sha256WithRSAEncryption
        Issuer: CN = my-x509-device
        Validity
            Not Before: May  5 21:41:42 2022 GMT
            Not After : Jun  4 21:41:42 2022 GMT
        Subject: CN = my-x509-device
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                RSA Public-Key: (4096 bit)
                Modulus:
                    00:d2:94:37:d6:1b:f7:43:b4:21:c6:08:1a:d6:d7:
                    e6:40:44:4e:4d:24:41:6c:3e:8c:b2:2c:b0:23:29:
                    ...
                    23:6e:58:76:45:18:03:dc:2e:9d:3f:ac:a3:5c:1f:
                    9f:66:b0:05:d5:1c:fe:69:de:a9:09:13:28:c6:85:
                    0e:cd:53
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Basic Constraints:
                CA:FALSE
            Netscape Comment:
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier:
                63:C0:B5:93:BF:29:F8:57:F8:F9:26:44:70:6F:9B:A4:C7:E3:75:18
            X509v3 Authority Key Identifier:
                keyid:63:C0:B5:93:BF:29:F8:57:F8:F9:26:44:70:6F:9B:A4:C7:E3:75:18
    
            X509v3 Extended Key Usage:
                TLS Web Client Authentication
    Signature Algorithm: sha256WithRSAEncryption
         82:8a:98:f8:47:00:85:be:21:15:64:b9:22:b0:13:cc:9e:9a:
         ed:f5:93:b9:4b:57:0f:79:85:9d:89:47:69:95:65:5e:b3:b1:
         ...
         cc:b2:20:9a:b7:f2:5e:6b:81:a1:04:93:e9:2b:92:62:e0:1c:
         ac:d2:49:b9:36:d2:b0:21
    
  1. El código de ejemplo requiere una clave privada que no está cifrada. Ejecute el siguiente comando para crear una clave privada sin cifrar:

    winpty openssl rsa -in device-key.pem -out unencrypted-device-key.pem
    
  2. Cuando aparezca el mensaje Escriba la frase de contraseña para device-key.pem:, use la misma frase de contraseña que utilizó anteriormente: 1234.

Mantenga abierto el símbolo del sistema de Git Bash. Lo necesitará más adelante en esta guía rápida.

El código de ejemplo de C# está configurado para usar los certificados X.509 almacenados en un archivo con formato PKCS#12 protegido con contraseña (certificate.pfx). Todavía necesita el archivo de certificado de clave pública con formato PEM (device-cert.pem) que acaba de crear para crear una entrada de inscripción individual más adelante en este inicio rápido.

  1. Para generar el archivo con formato PKCS12 que el ejemplo espera, escriba el siguiente comando:

    winpty openssl pkcs12 -inkey device-key.pem -in device-cert.pem -export -out certificate.pfx
    
  2. Cuando aparezca el mensaje Escriba la frase de contraseña para device-key.pem:, use la misma frase de contraseña que utilizó anteriormente: 1234.

  3. Cuando aparezca el mensaje Escriba la contraseña de exportación: use la contraseña 1234.

  4. Cuando aparezca el mensaje Comprobando. Escriba la contraseña de exportación:, use la contraseña 1234 de nuevo.

    Ahora se debe generar un archivo de certificado con formato PKCS12 (certificate.pfx) en el directorio donde ejecutó el comando openssl.

  5. Copie el archivo de certificado con formato PKCS12 en el directorio del proyecto para el ejemplo de aprovisionamiento de dispositivos X.509. La ruta de acceso especificada es relativa a la ubicación donde descargó el repositorio de ejemplo.

    cp certificate.pfx ./azure-iot-sdk-csharp/provisioning/device/samples/"Getting Started"/X509Sample
    

No necesita el indicador Git Bash para el resto de este inicio rápido. Sin embargo, es posible que desee mantenerlo abierto para comprobar el certificado si tiene problemas en pasos posteriores.

  1. El código de ejemplo requiere una clave privada que no está cifrada. Ejecute el siguiente comando para crear una clave privada sin cifrar:

    winpty openssl rsa -in device-key.pem -out unencrypted-device-key.pem
    
  2. Cuando aparezca el mensaje Escriba la frase de contraseña para device-key.pem:, use la misma frase de contraseña que utilizó anteriormente: 1234.

  3. Copie el certificado del dispositivo y la clave privada no cifrada en el directorio del proyecto para el ejemplo de aprovisionamiento de dispositivos X.509. La ruta de acceso especificada es relativa a la ubicación donde descargó el SDK.

    cp device-cert.pem ./azure-iot-sdk-node/provisioning/device/samples
    cp unencrypted-device-key.pem ./azure-iot-sdk-node/provisioning/device/samples
    

No necesita el indicador Git Bash para el resto de este inicio rápido. Sin embargo, es posible que desee mantenerlo abierto para comprobar el certificado si tiene problemas en pasos posteriores.

  1. Copie el certificado de dispositivo y la clave privada en el directorio del proyecto para el ejemplo de aprovisionamiento de dispositivos X.509. La ruta de acceso especificada es relativa a la ubicación donde descargó el SDK.

    cp device-cert.pem ./azure-iot-sdk-python/samples/async-hub-scenarios
    cp device-key.pem ./azure-iot-sdk-python/samples/async-hub-scenarios
    

No necesita el indicador Git Bash para el resto de este inicio rápido. Sin embargo, es posible que desee mantenerlo abierto para comprobar el certificado si tiene problemas en pasos posteriores.

  1. El código de ejemplo de Java requiere una clave privada que no está cifrada. Ejecute el siguiente comando para crear una clave privada sin cifrar:

    winpty openssl pkey -in device-key.pem -out unencrypted-device-key.pem
    
  2. Cuando aparezca el mensaje Escriba la frase de contraseña para device-key.pem:, use la misma frase de contraseña que utilizó anteriormente: 1234.

Mantenga abierto el símbolo del sistema de Git Bash. Lo necesitará más adelante en esta guía rápida.

Creación de una inscripción de dispositivos

Azure IoT Hub Device Provisioning Service admite dos tipos de inscripciones:

En este artículo se muestra una inscripción de un dispositivo que se va a aprovisionar con un centro de IoT.

  1. Inicie sesión en Azure Portal y vaya a la instancia de Device Provisioning Service.

  2. Seleccione Administrar inscripciones de la sección Configuración del menú de navegación.

  3. Seleccione la pestaña Inscripciones individuales y, después, Agregar inscripción individual.

    Screenshot that shows the add individual enrollment option.

  4. En Registro y aprovisionamiento de la página Agregar inscripción, proporcione la siguiente información para configurar los detalles de inscripción:

    Campo Descripción
    Atestación Seleccione Certificados de cliente X.509 como Mecanismo de atestación.
    Configuración del certificado X.509 Cargue uno o dos certificados que se usarán para comprobar el dispositivo para esta inscripción.
    Estado de aprovisionamiento Active la casilla Habilitar esta inscripción si desea que esta inscripción esté disponible para aprovisionar su dispositivo. Desactive esta casilla si desea que la inscripción esté deshabilitada. Podrá cambiar esta configuración más adelante.
    Directiva de reaprovisionamiento Elija una directiva de reaprovisionamiento que refleje cómo desea que DPS controle los dispositivos que soliciten el reaprovisionamiento. Para obtener más información, consulte Directivas de reaprovisionamiento.
  5. Seleccione Siguiente: centros de IoT.

  6. En la pestaña Centros de IoT de la página Agregar inscripción, proporcione la siguiente información para determinar qué centros de IoT pueden aprovisionar dispositivos de inscripción para:

    Campo Descripción
    Centros de IoT de destino Seleccione uno o varios de los centros de IoT vinculados o agregue un nuevo vínculo a un centro de IoT. Para más información sobre cómo vincular centros de IoT a la instancia de DPS, consulte Vinculación y administración de centros de IoT.
    Directiva de asignación Si seleccionó más de un centro de IoT vinculado, seleccione cómo quiere asignar dispositivos a los distintos centros. Para más información sobre las directivas de asignación, consulte Uso de directivas de asignación.

    Si seleccionó solo un centro de IoT vinculado, se recomienda usar la directiva Distribución uniformemente ponderada.
  7. Seleccione Siguiente: configuración del dispositivo

  8. En la pestaña Configuración del dispositivo de la página Agregar inscripción, proporcione la siguiente información para definir cómo se configurarán los dispositivos recién aprovisionados:

    Campo Descripción
    Id. de dispositivo Proporcione un id. de dispositivo que se asignará al dispositivo aprovisionado en IoT Hub. Si no proporciona un id. de dispositivo, se usará el id. de registro.
    IoT Edge Compruebe la opción Habilitar IoT Edge en los dispositivos aprovisionados si el dispositivo aprovisionado ejecutará Azure IoT Edge. Desactive esta casilla si esta inscripción es para un dispositivo no habilitado para IoT Edge.
    Etiquetas de dispositivo Use este cuadro de texto para proporcionar las etiquetas que quiera aplicar al dispositivo gemelo del dispositivo aprovisionado.
    Propiedades deseadas Use este cuadro de texto para proporcionar las propiedades deseadas que quiera aplicar al dispositivo gemelo del dispositivo aprovisionado.

    Para más información, consulte Información y uso de dispositivos gemelos en IoT Hub.

  9. Seleccione Siguiente: Review + create (Revisar y crear).

  10. En la pestaña Revisar y crear, compruebe todos los valores y seleccione Crear.

Preparación y ejecución del código de aprovisionamiento de dispositivos

En esta sección, usted actualiza el código de ejemplo para enviar la secuencia de arranque del dispositivo a la instancia del servicio de aprovisionamiento de dispositivos. Esta secuencia de arranque hace que el dispositivo se reconozca y se asigne a un centro de IoT vinculado a la instancia de DPS.

En esta sección, usted usa el símbolo del sistema de Git Bash y el IDE de Visual Studio.

Configuración del código del dispositivo de aprovisionamiento

En esta sección, actualizará el código de ejemplo con la información de la instancia de Device Provisioning Service.

  1. En Azure Portal, seleccione la pestaña Información general de Device Provisioning Service.

  2. Copie el valor de del Ámbito de id.

    Screenshot of the ID scope on Azure portal.

  3. Inicie Visual Studio y abra el nuevo archivo de solución que se creó en el directorio cmake que creó en el directorio raíz del repositorio de Git azure-iot-sdk-c. El archivo de solución se llama azure_iot_sdks.sln.

  4. En el Explorador de soluciones de Visual Studio, vaya a Provisioning_Samples > prov_dev_client_sample > Archivos de código fuente y abra prov_dev_client_sample.c.

  5. Busque la constante id_scope y reemplace el valor por el valor de Ámbito de id. que copió en el paso 2.

    static const char* id_scope = "0ne00000A0A";
    
  6. Busque la definición de la función main() en el mismo archivo. Asegúrese de que la variable hsm_type está establecida en SECURE_DEVICE_TYPE_X509.

    SECURE_DEVICE_TYPE hsm_type;
    //hsm_type = SECURE_DEVICE_TYPE_TPM;
    hsm_type = SECURE_DEVICE_TYPE_X509;
    //hsm_type = SECURE_DEVICE_TYPE_SYMMETRIC_KEY;
    
  7. Guarde los cambios.

  8. Haga clic con el botón derecho en el proyecto prov_dev_client_sample y seleccione Establecer como proyecto de inicio.

Configuración del código auxiliar del HSM personalizado

Los detalles de la interacción con el almacenamiento seguro real basado en hardware varían en función del hardware. Como resultado, el certificado y la clave privada usados por el dispositivo simulado en este inicio rápido están codificados en el código stub personalizado del Módulo de Seguridad de Hardware (HSM).

Para actualizar el código auxiliar del HSM personalizado con el fin de simular la identidad del dispositivo con el identificador my-x509-device:

  1. En el Explorador de soluciones de Visual Studio, vaya a Provisioning_Samples > custom_hsm_example > Archivos de código fuente y abra custom_hsm_example.c.

  2. Actualice el valor de cadena de la constante de cadena COMMON_NAME con el nombre común que utilizó al generar el certificado de dispositivo: my-x509-device.

    static const char* const COMMON_NAME = "my-x509-device";
    
  3. Actualice el valor de cadena de la cadena constante CERTIFICATE mediante el certificado de dispositivo, device-cert.pem, que generó anteriormente.

    La sintaxis del texto del certificado del ejemplo debe seguir el siguiente patrón, sin espacios adicionales ni análisis realizados por Visual Studio.

    static const char* const CERTIFICATE = "-----BEGIN CERTIFICATE-----\n"
    "MIIFOjCCAyKgAwIBAgIJAPzMa6s7mj7+MA0GCSqGSIb3DQEBCwUAMCoxKDAmBgNV\n"
        ...
    "MDMwWhcNMjAxMTIyMjEzMDMwWjAqMSgwJgYDVQQDDB9BenVyZSBJb1QgSHViIENB\n"
    "-----END CERTIFICATE-----";        
    

    La actualización manual de este valor de cadena puede ser propensa a errores. Para generar la sintaxis correcta, puede copiar y pegar el siguiente comando en el símbolo del sistema de Git Bash y presione ENTRAR. Este comando genera la sintaxis para el valor de constante de la cadena CERTIFICATE y la escribe en la salida.

    sed -e 's/^/"/;$ !s/$/""\\n"/;$ s/$/"/' device-cert.pem
    

    Copie y pegue el texto del certificado de salida para el valor de constante.

  4. Actualice el valor de cadena de la constante PRIVATE_KEY con la clave privada sin cifrar para el certificado de dispositivo: uncrypted-device-key.pem.

    La sintaxis del texto de la clave privada debe seguir el siguiente patrón, sin espacios adicionales ni análisis realizados por Visual Studio.

    static const char* const PRIVATE_KEY = "-----BEGIN RSA PRIVATE KEY-----\n"
    "MIIJJwIBAAKCAgEAtjvKQjIhp0EE1PoADL1rfF/W6v4vlAzOSifKSQsaPeebqg8U\n"
        ...
    "X7fi9OZ26QpnkS5QjjPTYI/wwn0J9YAwNfKSlNeXTJDfJ+KpjXBcvaLxeBQbQhij\n"
    "-----END RSA PRIVATE KEY-----";
    

    La actualización manual de este valor de cadena puede ser propensa a errores. Para generar la sintaxis correcta, puede copiar y pegar el siguiente comando en el símbolo del sistema de Git Bash y presione ENTRAR. Este comando genera la sintaxis para el valor de constante de la cadena PRIVATE_KEY y la escribe en la salida.

    sed -e 's/^/"/;$ !s/$/""\\n"/;$ s/$/"/' unencrypted-device-key.pem
    

    Copie y pegue el texto de la clave privada de salida para el nuevo valor de la constante.

  5. Guarde los cambios.

  6. Haga clic con el botón derecho en el proyecto custom_hsm_-_example y seleccione Compilar.

    Importante

    Debe compilar el proyecto custom_hsm_example antes de compilar el resto de la solución en la sección siguiente.

Ejecución del ejemplo

  1. En el menú de Visual Studio, seleccione Depurar>Iniciar sin depurar para ejecutar la solución. Si se le pida que recompile el proyecto, seleccione para recompilar el proyecto antes de su ejecución.

    La salida siguiente es un ejemplo de arranque correcto del dispositivo simulado my-x509-device y su conexión al servicio de aprovisionamiento. El dispositivo se ha asignado a un centro de IoT y se ha registrado:

    Provisioning API Version: 1.8.0
    
    Registering Device
    
    Provisioning Status: PROV_DEVICE_REG_STATUS_CONNECTED
    Provisioning Status: PROV_DEVICE_REG_STATUS_ASSIGNING
    
    Registration Information received from service: contoso-iot-hub-2.azure-devices.net, deviceId: my-x509-device
    Press enter key to exit:
    

En esta sección, se usa el símbolo del sistema de Windows.

  1. En Azure Portal, seleccione la pestaña Información general de Device Provisioning Service.

  2. Copie el valor de del Ámbito de id.

    Screenshot of the ID scope on Azure portal.

  3. En el símbolo del sistema de Windows, cambie al directorio X509Sample. Este directorio se encuentra en el directorio .\azure-iot-sdk-csharp\provisioning\device\samples\getting started\X509Sample fuera del directorio donde ha clonado los ejemplos en el equipo.

  4. Escriba el siguiente comando para compilar y ejecutar el ejemplo de aprovisionamiento de dispositivos X.509 (reemplace el valor <IDScope> por el ámbito de id. que copió en la sección anterior). El archivo de certificado es de manera predeterminada ./certificate.pfx y solicita la contraseña .pfx.

    dotnet run -- -s <IDScope>
    

    Si desea pasar el certificado y la contraseña como un parámetro, puede usar el siguiente formato.

    Nota

    Se pueden usar más parámetros mientras se ejecuta la aplicación para cambiar TransportType (-t) y GlobalDeviceEndpoint (-g).

    dotnet run -- -s 0ne00000A0A -c certificate.pfx -p 1234
    
  5. El dispositivo se conecta a DPS y se asigna a un centro de IoT. A continuación, el dispositivo envía un mensaje de telemetría al centro de IoT.

    Loading the certificate...
    Enter the PFX password for certificate.pfx:
    ****
    Found certificate: A33DB11B8883DEE5B1690ACFEAAB69E8E928080B CN=my-x509-device; PrivateKey: True
    Using certificate A33DB11B8883DEE5B1690ACFEAAB69E8E928080B CN=my-x509-device
    Initializing the device provisioning client...
    Initialized for registration Id my-x509-device.
    Registering with the device provisioning service...
    Registration status: Assigned.
    Device my-x509-device registered to MyExampleHub.azure-devices.net.
    Creating X509 authentication for IoT Hub...
    Testing the provisioned device with IoT Hub...
    Sending a telemetry message...
    Finished.
    

En esta sección, se usa el símbolo del sistema de Windows.

  1. En Azure Portal, seleccione la pestaña Información general de Device Provisioning Service.

  2. Copie el valor de del Ámbito de id.

    Screenshot of the ID scope on Azure portal.

  3. En el símbolo del sistema de Windows, vaya al directorio de ejemplo e instale los paquetes necesarios para el ejemplo. La ruta de acceso que se muestra es relativa a la ubicación en la que ha clonado el SDK.

    cd .\azure-iot-sdk-node\provisioning\device\samples
    npm install
    

    En el ejemplo se usan cinco variables de entorno para autenticar y aprovisionar un dispositivo IoT mediante DPS. Estas variables de entorno son:

    Nombre de la variable Descripción
    PROVISIONING_HOST Punto de conexión que se va a usar para conectarse a la instancia de DPS. Para esta guía de inicio rápido, use el punto de conexión global, global.azure-devices-provisioning.net.
    PROVISIONING_IDSCOPE Ámbito de identificador de la instancia de DPS.
    PROVISIONING_REGISTRATION_ID El identificador de registro del dispositivo. Debe coincidir con el nombre común del firmante en el certificado de dispositivo.
    CERTIFICATE_FILE Ruta de acceso al archivo de certificado del dispositivo.
    KEY_FILE Ruta de acceso al archivo de clave privada del dispositivo.
  4. Agregue las variables de entorno para el punto de conexión del dispositivo global y el ámbito de id. Reemplace <id-scope> por el valor que copió en el paso 2.

    set PROVISIONING_HOST=global.azure-devices-provisioning.net
    set PROVISIONING_IDSCOPE=<id-scope>
    
  5. Establezca la variable de entorno del identificador de registro del dispositivo. El identificador de registro del dispositivo IoT debe coincidir con el nombre común del firmante que aparece en su certificado de dispositivo. Si ha seguido los pasos en esta guía de inicio rápido para generar un certificado de prueba autofirmado, my-x509-device es el nombre del firmante y el id. de registro del dispositivo.

    set PROVISIONING_REGISTRATION_ID=my-x509-device
    
  6. Establezca las variables de entorno para los archivos de clave privada de dispositivo (sin cifrar) y el certificado del dispositivo.

    set CERTIFICATE_FILE=.\device-cert.pem
    set KEY_FILE=.\unencrypted-device-key.pem
    
  7. Ejecute el ejemplo y compruebe que el dispositivo se haya aprovisionado correctamente.

    node register_x509.js
    

    Debería ver una salida similar al ejemplo siguiente:

    registration succeeded
    assigned hub=contoso-hub-2.azure-devices.net
    deviceId=my-x509-device
    Client connected
    send status: MessageEnqueued
    

En esta sección, se usa el símbolo del sistema de Windows.

  1. En Azure Portal, seleccione la pestaña Información general de Device Provisioning Service.

  2. Copie los valores del Ámbito de id. y el Punto de conexión global del dispositivo.

    Screenshot of the ID scope and global device endpoint on Azure portal.

  3. En el símbolo del sistema de Windows, vaya al directorio del ejemplo provision_x509.py. La ruta de acceso que se muestra es relativa a la ubicación en la que ha clonado el SDK.

    cd ./azure-iot-sdk-python/samples/async-hub-scenarios
    

    En este ejemplo se usan seis variables de entorno para autenticar y aprovisionar un dispositivo IoT mediante DPS. Estas variables de entorno son:

    Nombre de la variable Descripción
    PROVISIONING_HOST El punto de conexión global que se usa para conectarse a la instancia de DPS.
    PROVISIONING_IDSCOPE Ámbito de identificador de la instancia de DPS.
    DPS_X509_REGISTRATION_ID El identificador de registro del dispositivo. También debe coincidir con el nombre del firmante en el certificado del dispositivo.
    X509_CERT_FILE Ruta de acceso al archivo de certificado del dispositivo.
    X509_KEY_FILE Ruta de acceso al archivo de clave privada del certificado de dispositivo.
    PASS_PHRASE La frase de contraseña usada para cifrar el certificado y el archivo de clave privada (1234).
  4. Agregue las variables de entorno para el punto de conexión del dispositivo global y el ámbito de id.

    set PROVISIONING_HOST=global.azure-devices-provisioning.net
    set PROVISIONING_IDSCOPE=<ID scope for your DPS resource>
    
  5. Establezca la variable de entorno del identificador de registro. El identificador de registro del dispositivo IoT debe coincidir con el nombre del firmante que aparece en su certificado de dispositivo. Si ha seguido los pasos en esta guía de inicio rápido para generar un certificado de prueba autofirmado, my-x509-device es el nombre del firmante y el id. de registro del dispositivo.

    set DPS_X509_REGISTRATION_ID=my-x509-device
    
  6. Establezca las variables de entorno del archivo de certificado, el archivo de clave privada y la frase de contraseña.

    set X509_CERT_FILE=./device-cert.pem
    set X509_KEY_FILE=./device-key.pem
    set PASS_PHRASE=1234
    
  7. Revise el código del archivo provision_x509.py. Si no usa la versión 3.7 de Python o una posterior, realice el cambio en el código mencionado aquí para reemplazar asyncio.run(main()) y guarde los cambios.

  8. Ejecute el ejemplo. El ejemplo se conecta a DPS, que aprovisiona el dispositivo a un centro de IoT. Una vez aprovisionado el dispositivo, el ejemplo envía algunos mensajes de prueba al centro de IoT.

    $ python azure-iot-sdk-python/samples/async-hub-scenarios/provision_x509.py
    RegistrationStage(RequestAndResponseOperation): Op will transition into polling after interval 2.  Setting timer.
    The complete registration result is
    my-x509-device
    TestHub12345.azure-devices.net
    initialAssignment
    null
    Will send telemetry from the provisioned device
    sending message #4
    sending message #7
    sending message #2
    sending message #8
    sending message #5
    sending message #9
    sending message #1
    sending message #6
    sending message #10
    sending message #3
    done sending message #4
    done sending message #7
    done sending message #2
    done sending message #8
    done sending message #5
    done sending message #9
    done sending message #1
    done sending message #6
    done sending message #10
    done sending message #3
    

En esta sección, usted usa tanto el símbolo del sistema de Windows como el símbolo del sistema de Git Bash.

  1. En Azure Portal, seleccione la pestaña Información general de Device Provisioning Service.

  2. Copie los valores del Ámbito de id. y el Punto de conexión global del dispositivo.

    Screenshot of the ID scope and global device endpoint on Azure portal.

  3. En el símbolo del sistema de Windows, vaya a la carpeta del proyecto de ejemplo. La ruta de acceso que se muestra es relativa a la ubicación en la que ha clonado el SDK.

    cd .\azure-iot-sdk-java\provisioning\provisioning-device-client-samples\provisioning-X509-sample
    
  4. Escriba la información del servicio de aprovisionamiento y de la identidad X.509 en el código de ejemplo. esta información se utiliza durante el aprovisionamiento para la atestación del dispositivo simulado, antes del registro de dispositivo.

    1. Abra el archivo .\src\main\java\samples\com\microsoft\azure\sdk\iot\ProvisioningX509Sample.java en el editor que prefiera.

    2. Actualice los valores siguientes con el ámbito de id. y el punto de conexión global del servicio de aprovisionamiento que copió anteriormente.

      private static final String idScope = "[Your ID scope here]";
      private static final String globalEndpoint = "[Your Provisioning Service Global Endpoint here]";
      private static final ProvisioningDeviceClientTransportProtocol PROVISIONING_DEVICE_CLIENT_TRANSPORT_PROTOCOL = ProvisioningDeviceClientTransportProtocol.HTTPS;
      
      
    3. Actualice el valor de la cadena de constante leafPublicPem con el valor del certificado, device-cert.pem.

      La sintaxis del texto del certificado debe seguir el siguiente patrón, sin espacios adicionales ni caracteres.

      private static final String leafPublicPem = "-----BEGIN CERTIFICATE-----\n" +
      "MIIFOjCCAyKgAwIBAgIJAPzMa6s7mj7+MA0GCSqGSIb3DQEBCwUAMCoxKDAmBgNV\n" +
          ...
      "MDMwWhcNMjAxMTIyMjEzMDMwWjAqMSgwJgYDVQQDDB9BenVyZSBJb1QgSHViIENB\n" +
      "-----END CERTIFICATE-----";        
      

      La actualización manual de este valor de cadena puede ser propensa a errores. Para generar la sintaxis correcta, puede copiar y pegar el siguiente comando en el símbolo del sistema de Git Bash y presione ENTRAR. Este comando genera la sintaxis para el valor de constante de la cadena leafPublicPem y la escribe en la salida.

      sed 's/^/"/;$ !s/$/\\n" +/;$ s/$/"/' device-cert.pem
      

      Copie y pegue el texto del certificado de salida para el valor de constante.

    4. Actualice el valor de cadena de la constante leafPrivateKey con la clave privada sin cifrar para el certificado de dispositivo: uncrypted-device-key.pem.

      La sintaxis del texto de la clave privada debe seguir el siguiente patrón, sin espacios adicionales ni caracteres.

      private static final String leafPrivateKey = "-----BEGIN PRIVATE KEY-----\n" +
      "MIIJJwIBAAKCAgEAtjvKQjIhp0EE1PoADL1rfF/W6v4vlAzOSifKSQsaPeebqg8U\n" +
          ...
      "X7fi9OZ26QpnkS5QjjPTYI/wwn0J9YAwNfKSlNeXTJDfJ+KpjXBcvaLxeBQbQhij\n" +
      "-----END PRIVATE KEY-----";
      

      La actualización manual de este valor de cadena puede ser propensa a errores. Para generar la sintaxis correcta, puede copiar y pegar el siguiente comando en el símbolo del sistema de Git Bash y presione ENTRAR. Este comando genera la sintaxis para el valor de constante de la cadena leafPrivateKey y la escribe en la salida.

      sed 's/^/"/;$ !s/$/\\n" +/;$ s/$/"/' unencrypted-device-key.pem
      

      Copie y pegue el texto de la clave privada de salida para el nuevo valor de la constante.

    5. Guarde los cambios.

  5. Compile el ejemplo y luego vaya a la carpeta target.

    mvn clean install
    cd target
    
  6. La compilación genera el archivo .jar en la carpeta target con el siguiente formato de archivo: provisioning-x509-sample-{version}-with-deps.jar; por ejemplo: provisioning-x509-sample-1.8.1-with-deps.jar. Ejecute el archivo .jar. Es posible que tenga que reemplazar la versión en el comando siguiente.

    java -jar ./provisioning-x509-sample-1.8.1-with-deps.jar
    

    El ejemplo se conecta a DPS, que aprovisiona el dispositivo a un centro de IoT. Una vez aprovisionado el dispositivo, el ejemplo envía algunos mensajes de prueba al centro de IoT.

    Starting...
    Beginning setup.
    WARNING: sun.reflect.Reflection.getCallerClass is not supported. This will impact performance.
    2022-05-11 09:42:05,025 DEBUG (main) [com.microsoft.azure.sdk.iot.provisioning.device.ProvisioningDeviceClient] - Initialized a ProvisioningDeviceClient instance using SDK version 2.0.0
    2022-05-11 09:42:05,027 DEBUG (main) [com.microsoft.azure.sdk.iot.provisioning.device.ProvisioningDeviceClient] - Starting provisioning thread...
    Waiting for Provisioning Service to register
    2022-05-11 09:42:05,030 INFO (global.azure-devices-provisioning.net-6255a8ba-CxnPendingConnectionId-azure-iot-sdk-ProvisioningTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.ProvisioningTask] - Opening the connection to device provisioning service...
    2022-05-11 09:42:05,252 INFO (global.azure-devices-provisioning.net-6255a8ba-Cxn6255a8ba-azure-iot-sdk-ProvisioningTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.ProvisioningTask] - Connection to device provisioning service opened successfully, sending initial device registration message
    2022-05-11 09:42:05,286 INFO (global.azure-devices-provisioning.net-6255a8ba-Cxn6255a8ba-azure-iot-sdk-RegisterTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.RegisterTask] - Authenticating with device provisioning service using x509 certificates
    2022-05-11 09:42:06,083 INFO (global.azure-devices-provisioning.net-6255a8ba-Cxn6255a8ba-azure-iot-sdk-ProvisioningTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.ProvisioningTask] - Waiting for device provisioning service to provision this device...
    2022-05-11 09:42:06,083 INFO (global.azure-devices-provisioning.net-6255a8ba-Cxn6255a8ba-azure-iot-sdk-ProvisioningTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.ProvisioningTask] - Current provisioning status: ASSIGNING
    Waiting for Provisioning Service to register
    2022-05-11 09:42:15,685 INFO (global.azure-devices-provisioning.net-6255a8ba-Cxn6255a8ba-azure-iot-sdk-ProvisioningTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.ProvisioningTask] - Device provisioning service assigned the device successfully
    IotHUb Uri : MyExampleHub.azure-devices.net
    Device ID : java-device-01
    2022-05-11 09:42:25,057 INFO (main) [com.microsoft.azure.sdk.iot.device.transport.ExponentialBackoffWithJitter] - NOTE: A new instance of ExponentialBackoffWithJitter has been created with the following properties. Retry Count: 2147483647, Min Backoff Interval: 100, Max Backoff Interval: 10000, Max Time Between Retries: 100, Fast Retry Enabled: true
    2022-05-11 09:42:25,080 INFO (main) [com.microsoft.azure.sdk.iot.device.transport.ExponentialBackoffWithJitter] - NOTE: A new instance of ExponentialBackoffWithJitter has been created with the following properties. Retry Count: 2147483647, Min Backoff Interval: 100, Max Backoff Interval: 10000, Max Time Between Retries: 100, Fast Retry Enabled: true
    2022-05-11 09:42:25,087 DEBUG (main) [com.microsoft.azure.sdk.iot.device.DeviceClient] - Initialized a DeviceClient instance using SDK version 2.0.3
    2022-05-11 09:42:25,129 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.MqttIotHubConnection] - Opening MQTT connection...
    2022-05-11 09:42:25,150 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.Mqtt] - Sending MQTT CONNECT packet...
    2022-05-11 09:42:25,982 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.Mqtt] - Sent MQTT CONNECT packet was acknowledged
    2022-05-11 09:42:25,983 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.Mqtt] - Sending MQTT SUBSCRIBE packet for topic devices/java-device-01/messages/devicebound/#
    2022-05-11 09:42:26,068 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.Mqtt] - Sent MQTT SUBSCRIBE packet for topic devices/java-device-01/messages/devicebound/# was acknowledged
    2022-05-11 09:42:26,068 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.MqttIotHubConnection] - MQTT connection opened successfully
    2022-05-11 09:42:26,070 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - The connection to the IoT Hub has been established
    2022-05-11 09:42:26,071 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Updating transport status to new status CONNECTED with reason CONNECTION_OK
    2022-05-11 09:42:26,071 DEBUG (main) [com.microsoft.azure.sdk.iot.device.DeviceIO] - Starting worker threads
    2022-05-11 09:42:26,073 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Invoking connection status callbacks with new status details
    2022-05-11 09:42:26,074 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Client connection opened successfully
    2022-05-11 09:42:26,075 INFO (main) [com.microsoft.azure.sdk.iot.device.DeviceClient] - Device client opened successfully
    Sending message from device to IoT Hub...
    2022-05-11 09:42:26,077 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Message was queued to be sent later ( Message details: Correlation Id [54d9c6b5-3da9-49fe-9343-caa6864f9a02] Message Id [28069a3d-f6be-4274-a48b-1ee539524eeb] )
    Press any key to exit...
    2022-05-11 09:42:26,079 DEBUG (MyExampleHub.azure-devices.net-java-device-01-ee6c362d-Cxn7a1fb819-e46d-4658-9b03-ca50c88c0440-azure-iot-sdk-IotHubSendTask) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Sending message ( Message details: Correlation Id [54d9c6b5-3da9-49fe-9343-caa6864f9a02] Message Id [28069a3d-f6be-4274-a48b-1ee539524eeb] )
    2022-05-11 09:42:26,422 DEBUG (MQTT Call: java-device-01) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - IotHub message was acknowledged. Checking if there is record of sending this message ( Message details: Correlation Id [54d9c6b5-3da9-49fe-9343-caa6864f9a02] Message Id [28069a3d-f6be-4274-a48b-1ee539524eeb] )
    2022-05-11 09:42:26,425 DEBUG (MyExampleHub.azure-devices.net-java-device-01-ee6c362d-Cxn7a1fb819-e46d-4658-9b03-ca50c88c0440-azure-iot-sdk-IotHubSendTask) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Invoking the callback function for sent message, IoT Hub responded to message ( Message details: Correlation Id [54d9c6b5-3da9-49fe-9343-caa6864f9a02] Message Id [28069a3d-f6be-4274-a48b-1ee539524eeb] ) with status OK
    Message sent!
    

Confirmación del registro de aprovisionamiento de dispositivos

Para ver en qué centro de IoT se aprovisionó el dispositivo, examine los detalles de registro de la inscripción individual que creó anteriormente:

  1. En Azure Portal, vaya al servicio de aprovisionamiento de dispositivos.

  2. En el menú de Configuración, seleccione Administrar inscripciones.

  3. Seleccione Inscripciones individuales. La entrada de inscripción X.509 que creó anteriormente, my-x509-device, debería aparecer en la lista.

  4. Seleccione la entrada de inscripción. El centro de IoT al que se asignó el dispositivo y cuyo id. de dispositivo aparecen en Estado de registro.

Para comprobar el dispositivo en el centro de IoT:

  1. En Azure Portal, vaya al centro de IoT al que se asignó el dispositivo.

  2. En el menú Administración de dispositivos, seleccione Dispositivos.

  3. Si el dispositivo se aprovisionó correctamente, su id. de dispositivo (my-x509-device) debe aparecer en la lista y el valor Estado establecido como habilitado. Si no ve el dispositivo, seleccione Actualizar.

    Screenshot that shows the device is registered with the IoT hub in Azure portal.

Importante

Si ha cambiado el valor predeterminado de Estado inicial del dispositivo gemelo en la entrada de inscripción para el dispositivo, el dispositivo puede extraer el estado gemelo deseado desde el centro y actuar en consecuencia. Para más información, consulte Información y uso de dispositivos gemelos en IoT Hub

Limpieza de recursos

Si planea seguir trabajando con el ejemplo de cliente de dispositivo y explorándolo, no quite los recursos que se hayan creado en esta guía de inicio rápido. Si no va a continuar, use el siguiente comando para eliminar todos los recursos que se hayan creado en la guía de inicio rápido.

Eliminación de la inscripción de dispositivos

  1. Cierre la ventana de salida de ejemplo del cliente del dispositivo en su máquina.

  2. En Azure Portal, seleccione Todos los recursos en el menú de la izquierda.

  3. Seleccione la instancia de Device Provisioning Service.

  4. En el menú de Configuración, seleccione Administrar inscripciones.

  5. Seleccione la pestaña Inscripciones individuales.

  6. Active la casilla situada junto al campo Id. de registro del dispositivo que registró en este inicio rápido.

  7. En la parte superior de la página, seleccione Eliminar.

Elimine el registro del dispositivo de IoT Hub

  1. En Azure Portal, seleccione Todos los recursos en el menú de la izquierda.

  2. Seleccione IoT Hub.

  3. En el menú Exploradores, seleccione Dispositivos de IoT.

  4. Active la casilla situada junto al campo Id. de dispositivo del dispositivo que registró en este inicio rápido.

  5. En la parte superior de la página, seleccione Eliminar.

Pasos siguientes

En este inicio rápido, ha aprovisionado un único dispositivo en el centro de IoT mediante una inscripción individual. Luego, obtenga información sobre cómo aprovisionar múltiples dispositivos en varios centros.