Tutorial: Provisionar vários dispositivos X.509 usando grupos de registro

Neste tutorial, você aprenderá a provisionar grupos de dispositivos IoT que usam certificados X.509 para autenticação. O código de dispositivo de exemplo do SDK do Azure IoT será executado em sua máquina de desenvolvimento para simular o provisionamento de dispositivos X.509. Em dispositivos reais, o código do dispositivo seria implantado e executado a partir do dispositivo IoT.

O Serviço de Provisionamento de Dispositivo do Hub IoT do Azure dá suporte a dois tipos de registros para dispositivos de provisionamento:

  • Grupos de inscrição: utilizados para inscrever vários dispositivos relacionados. Este tutorial demonstra o provisionamento com grupos de inscrição.
  • Inscrições individuais: usadas para registrar um único dispositivo.

O Serviço de Provisionamento de Dispositivo do Hub IoT do Azure dá suporte a três formas de autenticação para dispositivos de provisionamento:

  • Certificados X.509 - Este tutorial demonstra o atestado de certificado X.509
  • Módulo de plataforma confiável (TPM)
  • Chaves simétricas

Em cenários de produção, um HSM (Hardware Security Module) é usado para armazenamento seguro e baseado em hardware de segredos de dispositivos. Um HSM pode ser usado com chave simétrica, certificado X.509 ou atestado TPM para fornecer armazenamento seguro para segredos. Recomenda-se o armazenamento baseado em hardware de segredos do dispositivo para ajudar a proteger informações confidenciais, como a chave privada do certificado do dispositivo.

Neste tutorial, você conclui os seguintes objetivos:

  • Crie uma cadeia de confiança de certificados para organizar um conjunto de dispositivos usando certificados X.509.
  • Crie um novo registro de grupo que use a cadeia de certificados.
  • Configure o ambiente de desenvolvimento.
  • Provisione dispositivos usando a cadeia de certificados usando código de exemplo no SDK de dispositivo IoT do Azure.

Pré-requisitos

Os pré-requisitos a seguir são para um ambiente de desenvolvimento do Windows usado para simular os dispositivos. Para Linux ou macOS, consulte a seção apropriada em Prepare your development environment na documentação do SDK.

  • Instale o Visual Studio 2022 com a carga de trabalho 'Desenvolvimento de área de trabalho com C++' habilitada. Visual Studio 2015, Visual Studio 2017 e Visual Studio 19 também são suportados.

  • Instale o sistema de compilação CMake mais recente. Certifique-se de marcar a opção que adiciona o executável CMake ao seu caminho.

    Importante

    Confirme se os pré-requisitos do Visual Studio (Visual Studio e a carga de trabalho 'Desenvolvimento de área de trabalho com C++') estão instalados em sua máquina antes de iniciar a CMake instalação. Depois de os pré-requisitos estarem assegurados e a transferência verificada, instale o sistema de compilação CMake. Além disso, esteja ciente de que as versões mais antigas do sistema de compilação CMake não conseguem gerar o arquivo de solução usado neste tutorial. Certifique-se de usar a versão mais recente do CMake.

Os pré-requisitos a seguir são para um ambiente de desenvolvimento do Windows. Para Linux ou macOS, consulte a seção apropriada em Prepare your development environment na documentação do SDK.

  • Instale o .NET SDK 6.0 ou posterior em sua máquina baseada no Windows. Você pode usar o seguinte comando para verificar sua versão.

    dotnet --info
    

Os pré-requisitos a seguir são para um ambiente de desenvolvimento do Windows. Para Linux ou macOS, consulte a seção apropriada em Prepare your development environment na documentação do SDK.

Os pré-requisitos a seguir são para um ambiente de desenvolvimento do Windows.

Os pré-requisitos a seguir são para um ambiente de desenvolvimento do Windows. Para Linux ou macOS, consulte a seção apropriada em Prepare your development environment na documentação do SDK.

  • Instale a versão mais recente do Git. Certifique-se de que o Git é adicionado às variáveis de ambiente acessíveis à janela de comando.

  • Certifique-se de que o OpenSSL está instalado na sua máquina. No Windows, sua instalação do Git inclui uma instalação do OpenSSL. Você pode acessar o OpenSSL a partir do prompt do Git Bash. Para verificar se o OpenSSL está instalado, abra um prompt do Git Bash e digite openssl version.

    Nota

    A menos que você esteja familiarizado com o OpenSSL e já o tenha instalado em sua máquina Windows, recomendamos usar o OpenSSL no prompt do Git Bash. Como alternativa, você pode optar por baixar o código-fonte e construir OpenSSL. Se você optar por construir ou baixar o OpenSSL, certifique-se de que o binário OpenSSL esteja acessível em seu caminho e que a OPENSSL_CNF variável de ambiente esteja definida como o caminho do arquivo openssl.cnf .

Preparar o ambiente de desenvolvimento

Nesta seção, você prepara um ambiente de desenvolvimento usado para criar o SDK do Azure IoT C. O SDK inclui código de exemplo e ferramentas usadas pelo provisionamento de dispositivos com DPS.

  1. Em um navegador da Web, vá para a página Versão do SDK do Azure IoT C.

  2. Copie o nome da marca para a versão mais recente do Azure IoT C SDK, por exemplo: lts_03_2024.

  3. Abra um prompt de comando do Windows e execute os seguintes comandos para clonar a versão mais recente do SDK do Dispositivo IoT do Azure para o repositório C GitHub. Substitua <release-tag> pela tag copiada na etapa anterior.

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

    Esta operação pode levar vários minutos para ser concluída.

  4. Quando a operação estiver concluída, execute os seguintes comandos a azure-iot-sdk-c partir do diretório:

    mkdir cmake
    cd cmake
    
  5. O exemplo de código utiliza um certificado X.509 para fornecer um atestado através da autenticação X.509. Execute o comando a seguir para criar uma versão do SDK específica para sua plataforma de desenvolvimento que inclua o cliente de provisionamento de dispositivo. Uma solução do Visual Studio para o dispositivo simulado cmake é gerada no diretório.

    Substitua <path pelo caminho absoluto para o C SDK que você clonou.

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

    Gorjeta

    Se cmake não encontrar seu compilador C++, você pode obter erros de compilação ao executar o comando acima. Se isso acontecer, tente executar o comando no prompt de comando do Visual Studio.

  6. Quando a compilação é bem-sucedida, as últimas linhas de saída são semelhantes à seguinte saída:

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

Abra um prompt de comando do Windows e clone o repositório GitHub do SDK do Azure IoT para C# usando o seguinte comando:

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

Abra um prompt de comando do Windows e clone o SDK do Azure IoT para Node.js repositório GitHub usando o seguinte comando:

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

Abra um prompt de comando do Windows e clone o SDK do Dispositivo IoT do Azure para o repositório GitHub do Python usando o seguinte comando:

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

Nota

Os exemplos usados neste tutorial estão na ramificação v2 do repositório azure-iot-sdk-python. V3 do Python SDK está disponível para uso em beta.

  1. Abra um prompt de comando do Windows e clone o repositório Azure IoT Samples for Java GitHub usando o seguinte comando:

    git clone https://github.com/Azure/azure-iot-sdk-java.git --recursive
    
  2. Vá para o diretório raiz azure-iot-sdk-java e construa o projeto para baixar todos os pacotes necessários.

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

Criar uma cadeia de certificados X.509

Nesta seção, você gera uma cadeia de certificados X.509 de três certificados para testar cada dispositivo com este tutorial. Os certificados têm a seguinte hierarquia.

Diagram that shows relationship of root C A, intermediate C A, and device certificates.

Certificado raiz Você carrega e verifica o certificado raiz com DPS. Essa verificação permite que o DPS confie nesse certificado e verifique os certificados assinados por ele.

Certificado intermediário: é comum usar certificados intermediários para agrupar dispositivos logicamente por linhas de produtos, divisões da empresa ou outros critérios. Este tutorial usa uma cadeia de certificados com um certificado intermediário, mas em um cenário de produção você pode ter vários. O certificado intermediário nesta cadeia é assinado pelo certificado raiz. Este certificado é fornecido ao grupo de inscrição criado no DPS. Essa configuração permite gerenciar um grupo inteiro de dispositivos que têm certificados de dispositivo assinados pelo mesmo certificado intermediário.

Certificados de dispositivo: um certificado de dispositivo (às vezes chamado de certificado folha) é assinado pelo certificado intermediário e armazenado no dispositivo junto com sua chave privada. Idealmente, esses itens sensíveis seriam armazenados de forma segura com um HSM. Vários certificados de dispositivo podem ser assinados pelo mesmo certificado intermediário. Cada dispositivo apresenta seu certificado e chave privada, juntamente com a cadeia de certificados, ao tentar o provisionamento.

Para obter mais informações sobre cadeias de certificados, consulte Atestado de certificado X.509.

Configurar o ambiente X.509 OpenSSL

Nesta seção, você cria os arquivos de configuração do Openssl, a estrutura de diretórios e outros arquivos usados pelos comandos do Openssl.

  1. Abra um prompt de comando do Git Bash e navegue até uma pasta onde você deseja gerar os certificados e chaves X.509 para este tutorial.

  2. Crie um arquivo de configuração OpenSSL chamado openssl_root_ca.cnf para seu certificado de autoridade de certificação raiz. Os arquivos de configuração OpenSSL contêm políticas e definições que são consumidas pelos comandos OpenSSL. Copie e cole o seguinte texto no arquivo openssl_root_ca.cnf :

    # OpenSSL root CA configuration file.
    
    [ ca ]
    default_ca = CA_default
    
    [ CA_default ]
    # Directory and file locations.
    dir               = .
    certs             = $dir/certs
    crl_dir           = $dir/crl
    new_certs_dir     = $dir/newcerts
    database          = $dir/index.txt
    serial            = $dir/serial
    RANDFILE          = $dir/private/.rand
    
    # The root key and root certificate.
    private_key       = $dir/private/azure-iot-test-only.root.ca.key.pem
    certificate       = $dir/certs/azure-iot-test-only.root.ca.cert.pem
    
    # For certificate revocation lists.
    crlnumber         = $dir/crlnumber
    crl               = $dir/crl/azure-iot-test-only.intermediate.crl.pem
    crl_extensions    = crl_ext
    default_crl_days  = 30
    
    # SHA-1 is deprecated, so use SHA-2 instead.
    default_md        = sha256
    
    name_opt          = ca_default
    cert_opt          = ca_default
    default_days      = 375
    preserve          = no
    policy            = policy_loose
    
    [ policy_strict ]
    # The root CA should only sign intermediate certificates that match.
    countryName             = optional
    stateOrProvinceName     = optional
    organizationName        = optional
    organizationalUnitName  = optional
    commonName              = supplied
    emailAddress            = optional
    
    [ policy_loose ]
    # Allow the intermediate CA to sign a more diverse range of certificates.
    countryName             = optional
    stateOrProvinceName     = optional
    localityName            = optional
    organizationName        = optional
    organizationalUnitName  = optional
    commonName              = supplied
    emailAddress            = optional
    
    [ req ]
    default_bits        = 2048
    distinguished_name  = req_distinguished_name
    string_mask         = utf8only
    
    # SHA-1 is deprecated, so use SHA-2 instead.
    default_md          = sha256
    
    # Extension to add when the -x509 option is used.
    x509_extensions     = v3_ca
    
    [ req_distinguished_name ]
    # See <https://en.wikipedia.org/wiki/Certificate_signing_request>.
    countryName                     = Country Name (2 letter code)
    stateOrProvinceName             = State or Province Name
    localityName                    = Locality Name
    0.organizationName              = Organization Name
    organizationalUnitName          = Organizational Unit Name
    commonName                      = Common Name
    emailAddress                    = Email Address
    
    # Optionally, specify some defaults.
    countryName_default             = US
    stateOrProvinceName_default     = WA
    localityName_default            =
    0.organizationName_default      = My Organization
    organizationalUnitName_default  =
    emailAddress_default            =
    
    [ v3_ca ]
    # Extensions for a typical CA.
    subjectKeyIdentifier = hash
    authorityKeyIdentifier = keyid:always,issuer
    basicConstraints = critical, CA:true
    keyUsage = critical, digitalSignature, cRLSign, keyCertSign
    
    [ v3_intermediate_ca ]
    # Extensions for a typical intermediate CA.
    subjectKeyIdentifier = hash
    authorityKeyIdentifier = keyid:always,issuer
    basicConstraints = critical, CA:true
    keyUsage = critical, digitalSignature, cRLSign, keyCertSign
    
    [ usr_cert ]
    # Extensions for client certificates.
    basicConstraints = CA:FALSE
    nsComment = "OpenSSL Generated Client Certificate"
    subjectKeyIdentifier = hash
    authorityKeyIdentifier = keyid,issuer
    keyUsage = critical, nonRepudiation, digitalSignature, keyEncipherment
    extendedKeyUsage = clientAuth
    
    [ server_cert ]
    # Extensions for server certificates.
    basicConstraints = CA:FALSE
    nsComment = "OpenSSL Generated Server Certificate"
    subjectKeyIdentifier = hash
    authorityKeyIdentifier = keyid,issuer:always
    keyUsage = critical, digitalSignature, keyEncipherment
    extendedKeyUsage = serverAuth
    
    [ crl_ext ]
    # Extension for CRLs.
    authorityKeyIdentifier=keyid:always
    
    [ ocsp ]
    # Extension for OCSP signing certificates.
    basicConstraints = CA:FALSE
    subjectKeyIdentifier = hash
    authorityKeyIdentifier = keyid,issuer
    keyUsage = critical, digitalSignature
    extendedKeyUsage = critical, OCSPSigning
    
  3. Crie um arquivo de configuração OpenSSL chamado openssl_device_intermediate_ca.cnf para usar para certificados intermediários e de dispositivo. Copie e cole o seguinte texto no arquivo openssl_device_intermediate_ca.cnf :

    # OpenSSL root CA configuration file.
    
    [ ca ]
    default_ca = CA_default
    
    [ CA_default ]
    # Directory and file locations.
    dir               = .
    certs             = $dir/certs
    crl_dir           = $dir/crl
    new_certs_dir     = $dir/newcerts
    database          = $dir/index.txt
    serial            = $dir/serial
    RANDFILE          = $dir/private/.rand
    
    # The root key and root certificate.
    private_key       = $dir/private/azure-iot-test-only.intermediate.key.pem
    certificate       = $dir/certs/azure-iot-test-only.intermediate.cert.pem
    
    # For certificate revocation lists.
    crlnumber         = $dir/crlnumber
    crl               = $dir/crl/azure-iot-test-only.intermediate.crl.pem
    crl_extensions    = crl_ext
    default_crl_days  = 30
    
    # SHA-1 is deprecated, so use SHA-2 instead.
    default_md        = sha256
    
    name_opt          = ca_default
    cert_opt          = ca_default
    default_days      = 375
    preserve          = no
    policy            = policy_loose
    
    [ policy_strict ]
    # The root CA should only sign intermediate certificates that match.
    countryName             = optional
    stateOrProvinceName     = optional
    organizationName        = optional
    organizationalUnitName  = optional
    commonName              = supplied
    emailAddress            = optional
    
    [ policy_loose ]
    # Allow the intermediate CA to sign a more diverse range of certificates.
    countryName             = optional
    stateOrProvinceName     = optional
    localityName            = optional
    organizationName        = optional
    organizationalUnitName  = optional
    commonName              = supplied
    emailAddress            = optional
    
    [ req ]
    default_bits        = 2048
    distinguished_name  = req_distinguished_name
    string_mask         = utf8only
    
    # SHA-1 is deprecated, so use SHA-2 instead.
    default_md          = sha256
    
    # Extension to add when the -x509 option is used.
    x509_extensions     = v3_ca
    
    [ req_distinguished_name ]
    # See <https://en.wikipedia.org/wiki/Certificate_signing_request>.
    countryName                     = Country Name (2 letter code)
    stateOrProvinceName             = State or Province Name
    localityName                    = Locality Name
    0.organizationName              = Organization Name
    organizationalUnitName          = Organizational Unit Name
    commonName                      = Common Name
    emailAddress                    = Email Address
    
    # Optionally, specify some defaults.
    countryName_default             = US
    stateOrProvinceName_default     = WA
    localityName_default            =
    0.organizationName_default      = My Organization
    organizationalUnitName_default  =
    emailAddress_default            =
    
    [ v3_ca ]
    # Extensions for a typical CA.
    subjectKeyIdentifier = hash
    authorityKeyIdentifier = keyid:always,issuer
    basicConstraints = critical, CA:true
    keyUsage = critical, digitalSignature, cRLSign, keyCertSign
    
    [ v3_intermediate_ca ]
    # Extensions for a typical intermediate CA.
    subjectKeyIdentifier = hash
    authorityKeyIdentifier = keyid:always,issuer
    basicConstraints = critical, CA:true
    keyUsage = critical, digitalSignature, cRLSign, keyCertSign
    
    [ usr_cert ]
    # Extensions for client certificates.
    basicConstraints = CA:FALSE
    nsComment = "OpenSSL Generated Client Certificate"
    subjectKeyIdentifier = hash
    authorityKeyIdentifier = keyid,issuer
    keyUsage = critical, nonRepudiation, digitalSignature, keyEncipherment
    extendedKeyUsage = clientAuth
    
    [ server_cert ]
    # Extensions for server certificates.
    basicConstraints = CA:FALSE
    nsComment = "OpenSSL Generated Server Certificate"
    subjectKeyIdentifier = hash
    authorityKeyIdentifier = keyid,issuer:always
    keyUsage = critical, digitalSignature, keyEncipherment
    extendedKeyUsage = serverAuth
    
    [ crl_ext ]
    # Extension for CRLs.
    authorityKeyIdentifier=keyid:always
    
    [ ocsp ]
    # Extension for OCSP signing certificates.
    basicConstraints = CA:FALSE
    subjectKeyIdentifier = hash
    authorityKeyIdentifier = keyid,issuer
    keyUsage = critical, digitalSignature
    extendedKeyUsage = critical, OCSPSigning
    
  4. Crie a estrutura de diretórios, o arquivo de banco de dados index.txt e o arquivo de número de série serial que são usados pelos comandos OpenSSL neste tutorial:

    mkdir certs csr newcerts private
    touch index.txt
    openssl rand -hex 16 > serial
    

Criar um certificado de autoridade de certificação raiz

Execute os seguintes comandos para criar uma chave privada de autoridade de certificação raiz e um certificado de autoridade de certificação raiz. Você usa esse certificado e essa chave para assinar seu certificado intermediário.

  1. No seu terminal Git Bash, crie uma chave privada de CA raiz:

    openssl genrsa -aes256 -passout pass:1234 -out ./private/azure-iot-test-only.root.ca.key.pem 4096
    
  2. Crie um certificado de autoridade de certificação raiz:

    openssl req -new -x509 -config ./openssl_root_ca.cnf -passin pass:1234 -key ./private/azure-iot-test-only.root.ca.key.pem -subj '//CN=Azure IoT Hub CA Cert Test Only' -days 30 -sha256 -extensions v3_ca -out ./certs/azure-iot-test-only.root.ca.cert.pem
    

    Importante

    A barra extra dada para o nome do assunto (//CN=Azure IoT Hub CA Cert Test Only) só é necessária para escapar da cadeia de caracteres com o Git em plataformas Windows. Em plataformas Linux, forneça o nome do assunto com apenas uma barra (/CN=Azure IoT Hub CA Cert Test Only).

  3. Examine o certificado da autoridade de certificação raiz:

    openssl x509 -noout -text -in ./certs/azure-iot-test-only.root.ca.cert.pem
    

    Observe que o Emissor e o Sujeito são ambos a autoridade de certificação raiz.

    Certificate:
        Data:
            Version: 3 (0x2)
            Serial Number:
                1d:93:13:0e:54:07:95:1d:8c:57:4f:12:14:b9:5e:5f:15:c3:a9:d4
            Signature Algorithm: sha256WithRSAEncryption
            Issuer: CN = Azure IoT Hub CA Cert Test Only
            Validity
                Not Before: Jun 20 22:52:23 2022 GMT
                Not After : Jul 20 22:52:23 2022 GMT
            Subject: CN = Azure IoT Hub CA Cert Test Only
            Subject Public Key Info:
                Public Key Algorithm: rsaEncryption
                    RSA Public-Key: (4096 bit)
    

Criar um certificado de autoridade de certificação intermediário

Execute os comandos a seguir para criar uma chave privada de autoridade de certificação intermediária e um certificado de autoridade de certificação intermediário. Você usa esse certificado e essa chave para assinar os certificados do dispositivo.

  1. No seu terminal Git Bash, crie uma chave privada de CA intermediária:

    openssl genrsa -aes256 -passout pass:1234 -out ./private/azure-iot-test-only.intermediate.key.pem 4096
    
  2. Crie uma CSR (solicitação de assinatura de certificado de CA) intermediária:

    openssl req -new -sha256 -passin pass:1234 -config ./openssl_device_intermediate_ca.cnf -subj '//CN=Azure IoT Hub Intermediate Cert Test Only' -key ./private/azure-iot-test-only.intermediate.key.pem -out ./csr/azure-iot-test-only.intermediate.csr.pem
    

    Importante

    A barra extra dada para o nome do assunto (//CN=Azure IoT Hub Intermediate Cert Test Only) só é necessária para escapar da cadeia de caracteres com o Git em plataformas Windows. Em plataformas Linux, forneça o nome do assunto com uma única barra (/CN=Azure IoT Hub Intermediate Cert Test Only).

  3. Assine o certificado intermediário com o certificado de autoridade de certificação raiz

    openssl ca -batch -config ./openssl_root_ca.cnf -passin pass:1234 -extensions v3_intermediate_ca -days 30 -notext -md sha256 -in ./csr/azure-iot-test-only.intermediate.csr.pem -out ./certs/azure-iot-test-only.intermediate.cert.pem
    
  4. Examine o certificado de autoridade de certificação intermediário:

    openssl x509 -noout -text -in ./certs/azure-iot-test-only.intermediate.cert.pem
    

    Observe que o Emissor é a autoridade de certificação raiz e o Sujeito é a autoridade de certificação intermediária.

    Certificate:
        Data:
            Version: 3 (0x2)
            Serial Number:
                d9:55:87:57:41:c8:4c:47:6c:ee:ba:83:5d:ae:db:39
            Signature Algorithm: sha256WithRSAEncryption
            Issuer: CN = Azure IoT Hub CA Cert Test Only
            Validity
                Not Before: Jun 20 22:54:01 2022 GMT
                Not After : Jul 20 22:54:01 2022 GMT
            Subject: CN = Azure IoT Hub Intermediate Cert Test Only
            Subject Public Key Info:
                Public Key Algorithm: rsaEncryption
                    RSA Public-Key: (4096 bit)
    

Criar certificados de dispositivo

Nesta seção, você cria dois certificados de dispositivo e seus certificados de cadeia completa. O certificado de cadeia completa contém o certificado de dispositivo, o certificado de autoridade de certificação intermediário e o certificado de autoridade de certificação raiz. O dispositivo deve apresentar o seu certificado de cadeia completa quando se regista no DPS.

  1. Crie a primeira chave privada do dispositivo.

    openssl genrsa -out ./private/device-01.key.pem 4096
    
  2. Crie o CSR do certificado do dispositivo.

    O nome comum da entidade (CN) do certificado do dispositivo deve ser definido como a ID de registo que o dispositivo utiliza para se registar no DPS. O ID de registo é uma cadeia de carateres alfanuméricos que não diferencia maiúsculas de minúsculas mais os carateres especiais: '-', '.', '_', ':'. O último caractere deve ser alfanumérico ou traço ('-'). O nome comum deve aderir a este formato. O DPS suporta IDs de registro de até 128 caracteres; no entanto, o comprimento máximo do nome comum da entidade em um certificado X.509 é de 64 caracteres. O ID de registro, portanto, é limitado a 64 caracteres ao usar certificados X.509. Para inscrições de grupo, a ID de registro também é usada como a ID do dispositivo no Hub IoT.

    O nome comum do assunto é definido usando o -subj parâmetro. No comando a seguir, o nome comum é definido como device-01.

    openssl req -config ./openssl_device_intermediate_ca.cnf -key ./private/device-01.key.pem -subj '//CN=device-01' -new -sha256 -out ./csr/device-01.csr.pem
    

    Importante

    A barra extra dada para o nome do assunto (//CN=device-01) só é necessária para escapar da cadeia de caracteres com o Git em plataformas Windows. Em plataformas Linux, forneça o nome do assunto com uma única barra (/CN=device-01).

  3. Assine o certificado do dispositivo.

    openssl ca -batch -config ./openssl_device_intermediate_ca.cnf -passin pass:1234 -extensions usr_cert -days 30 -notext -md sha256 -in ./csr/device-01.csr.pem -out ./certs/device-01.cert.pem
    
  4. Examine o certificado do dispositivo:

    openssl x509 -noout -text -in ./certs/device-01.cert.pem
    

    Observe que o Emissor é a AC intermediária, e o Assunto é o ID de registro do dispositivo, device-01.

    Certificate:
        Data:
            Version: 3 (0x2)
            Serial Number:
                d9:55:87:57:41:c8:4c:47:6c:ee:ba:83:5d:ae:db:3a
            Signature Algorithm: sha256WithRSAEncryption
            Issuer: CN = Azure IoT Hub Intermediate Cert Test Only
            Validity
                Not Before: Jun 20 22:55:39 2022 GMT
                Not After : Jul 20 22:55:39 2022 GMT
            Subject: CN = device-01
            Subject Public Key Info:
                Public Key Algorithm: rsaEncryption
                    RSA Public-Key: (4096 bit)
    
  5. O dispositivo deve apresentar a cadeia de certificados completa quando for autenticado com DPS. Use o seguinte comando para criar a cadeia de certificados:

    cat ./certs/device-01.cert.pem ./certs/azure-iot-test-only.intermediate.cert.pem ./certs/azure-iot-test-only.root.ca.cert.pem > ./certs/device-01-full-chain.cert.pem
    
  6. Abra o arquivo de cadeia de certificados, ./certs/device-01-full-chain.cert.pem, em um editor de texto para examiná-lo. O texto da cadeia de certificados contém a cadeia completa dos três certificados. Você usa essa cadeia de certificados posteriormente neste tutorial para provisionar device-01o .

    O texto da cadeia completa tem o seguinte formato:

    -----BEGIN CERTIFICATE-----
        <Text for the device certificate includes public key>
    -----END CERTIFICATE-----
    -----BEGIN CERTIFICATE-----
        <Text for the intermediate certificate includes public key>
    -----END CERTIFICATE-----
    -----BEGIN CERTIFICATE-----
        <Text for the root certificate includes public key>
    -----END CERTIFICATE-----
    
  7. Para criar a chave privada, o certificado X.509 e o certificado de cadeia completa para o segundo dispositivo, copie e cole esse script no prompt de comando do Git Bash. Para criar certificados para mais dispositivos, você pode modificar a registration_id variável declarada no início do script.

    registration_id=device-02
    echo $registration_id
    openssl genrsa -out ./private/${registration_id}.key.pem 4096
    openssl req -config ./openssl_device_intermediate_ca.cnf -key ./private/${registration_id}.key.pem -subj "//CN=$registration_id" -new -sha256 -out ./csr/${registration_id}.csr.pem
    openssl ca -batch -config ./openssl_device_intermediate_ca.cnf -passin pass:1234 -extensions usr_cert -days 30 -notext -md sha256 -in ./csr/${registration_id}.csr.pem -out ./certs/${registration_id}.cert.pem
    cat ./certs/${registration_id}.cert.pem ./certs/azure-iot-test-only.intermediate.cert.pem ./certs/azure-iot-test-only.root.ca.cert.pem > ./certs/${registration_id}-full-chain.cert.pem
    

    Importante

    A barra extra dada para o nome do assunto (//CN=$registration_id) só é necessária para escapar da cadeia de caracteres com o Git em plataformas Windows. Em plataformas Linux, forneça o nome do assunto com uma única barra (/CN=$registration_id).

    Nota

    Esse script usa a ID de registro como o nome de arquivo base para a chave privada e os arquivos de certificado. Se o seu ID de registo contiver carateres que não são carateres de nome de ficheiro válidos, terá de modificar o script em conformidade.

    Aviso

    O texto dos certificados contém apenas informações de chave pública.

    No entanto, o dispositivo também deve ter acesso à chave privada para o certificado do dispositivo. Isso é necessário porque o dispositivo deve executar a verificação usando essa chave em tempo de execução quando tenta provisionar. A sensibilidade dessa chave é uma das principais razões pelas quais é recomendado usar armazenamento baseado em hardware em um HSM real para ajudar a proteger chaves privadas.

Você usa os seguintes arquivos no restante deste tutorial:

Certificado Ficheiro Description
certificado de autoridade de certificação raiz. certs/azure-iot-test-only.root.ca.cert.pem Carregado no DPS e verificado.
certificado de autoridade de certificação intermediária certs/azure-iot-test-only.intermediate.cert.pem Usado para criar um grupo de inscrição no DPS.
device-01 chave privada privado/device-01.key.pem Usado pelo dispositivo para verificar a propriedade do certificado do dispositivo durante a autenticação com DPS.
certificado de cadeia completa device-01 certs/dispositivo-01-full-chain.cert.pem Apresentado pelo dispositivo para autenticar e registrar com DPS.
device-02 chave privada privado/device-02.key.pem Usado pelo dispositivo para verificar a propriedade do certificado do dispositivo durante a autenticação com DPS.
certificado de cadeia completa device-02 certs/dispositivo-02-full-chain.cert.pem Apresentado pelo dispositivo para autenticar e registrar com DPS.

Verificar a propriedade do certificado raiz

Para que o DPS possa validar a cadeia de certificados do dispositivo durante a autenticação, você deve carregar e verificar a propriedade do certificado da autoridade de certificação raiz. Para adicionar o certificado de autoridade de certificação raiz à sua instância DPS, siga estas etapas:

  1. No portal do Azure, navegue até sua instância do Serviço de Provisionamento de Dispositivo.

  2. Abra Certificados no menu à esquerda e selecione Adicionar para adicionar um novo certificado.

  3. Insira um nome de exibição amigável para seu certificado. Navegue até o local do arquivo certs/azure-iot-test-only.root.ca.cert.pemde certificado de autoridade de certificação raiz. Selecione Carregar.

  4. Marque a caixa para Definir o status do certificado como verificado ao carregar.

    Screenshot that shows adding the root CA certificate and the set certificate status to verified on upload box selected.

  5. Selecione Guardar.

  6. Verifique se o certificado é mostrado na guia certificado com o status Verificado.

    Screenshot that shows the verified root C A certificate in the list of certificates.

Atualizar o armazenamento de certificados em dispositivos baseados no Windows

Em dispositivos que não sejam Windows, você pode passar a cadeia de certificados do código como o armazenamento de certificados.

Em dispositivos baseados no Windows, você deve adicionar os certificados de assinatura (raiz e intermediários) a um repositório de certificados do Windows. Caso contrário, os certificados de assinatura não serão transportados para o DPS por um canal seguro com Transport Layer Security (TLS).

Gorjeta

Também é possível usar OpenSSL em vez de canal seguro (Schannel) com o C SDK. Para obter mais informações sobre como usar o OpenSSL, consulte Usando o OpenSSL no SDK.

Para adicionar os certificados de assinatura ao armazenamento de certificados em dispositivos baseados no Windows:

  1. No seu terminal Git Bash, converta seus certificados de assinatura da .pfx seguinte forma.

    Certificado de autoridade de certificação raiz:

    openssl pkcs12 -inkey ./private/azure-iot-test-only.root.ca.key.pem -in ./certs/azure-iot-test-only.root.ca.cert.pem -export -passin pass:1234 -passout pass:1234 -out ./certs/root.pfx
    

    Certificado de AC intermédio:

    openssl pkcs12 -inkey ./private/azure-iot-test-only.intermediate.key.pem -in ./certs/azure-iot-test-only.intermediate.cert.pem -export -passin pass:1234 -passout pass:1234 -out ./certs/intermediate.pfx
    
  2. Clique com o botão direito do rato no botão Iniciar do Windows e, em seguida, selecione Executar. Digite certmgr.msc e selecione Ok para iniciar o gerenciador de certificados.

  3. No gerenciador de certificados, em Certificados - Usuário Atual, selecione Autoridades de Certificação Raiz Confiáveis. Em seguida, no menu, selecione Ação>de importação de todas as tarefas.>

  4. Siga as etapas do Assistente para Importação de Certificados para importar root.pfx.

    • Certifique-se de pesquisar por Troca de informações pessoais (.pfx)
    • Use 1234 como senha.
    • Coloque o certificado no armazenamento de certificados das Autoridades de Certificação Raiz Confiáveis.
  5. Repita estas etapas do gerenciador de certificados para importar intermediate.pfxo .

    • Coloque o certificado no armazenamento de certificados das Autoridades de Certificação Intermediárias .

Seus certificados de assinatura agora são confiáveis no dispositivo baseado no Windows e toda a cadeia pode ser transportada para o DPS.

Criar um grupo de inscrição

  1. Entre no portal do Azure e navegue até sua instância do Serviço de Provisionamento de Dispositivo.

  2. Selecione Gerenciar inscrições na seção Configurações do menu de navegação.

  3. Na parte superior da página, selecione Adicionar grupo de inscrição.

  4. Na guia Registro + provisionamento da página Adicionar grupo de registro, forneça as seguintes informações para configurar os detalhes do grupo de registro:

    Campo Descrição
    Atestado Selecione Certificados intermediários X.509 como o mecanismo de Atestado se quiser carregar certificados intermediários para serem usados apenas para este grupo de inscrição ou selecione Certificados X.509 carregados para este Serviço de Provisionamento de Dispositivo se já tiver carregado certificados intermediários.
    Configurações de certificado X.509 Dependendo do método de atestado escolhido, carregue ou selecione os certificados intermediários primário e secundário para esse grupo de inscrição.
    Nome do grupo Forneça um nome para o grupo de dispositivos. O nome do grupo de inscrição é uma cadeia de caracteres que não diferencia maiúsculas de minúsculas (até 128 caracteres) de caracteres alfanuméricos mais os caracteres especiais: '-', '.', '_', ':'. O último caractere deve ser alfanumérico ou traço ('-').
    Status de provisionamento Marque a caixa Habilitar este registro se quiser que esse grupo de inscrição esteja disponível para provisionar dispositivos. Desmarque esta caixa se quiser que o grupo seja desativado. Você pode alterar essa configuração mais tarde.
    Política de reaprovisionamento Escolha uma política de reprovisionamento que reflita como você deseja que o DPS manipule dispositivos que solicitam reprovisionamento. Para obter mais informações, consulte Políticas de reprovisionamento

    Screenshot that shows adding an enrollment group for X.509 certificate attestation.

  5. Selecione Next: Hubs IoT.

  6. Na guia Hubs IoT da página Adicionar grupo de registro, forneça as seguintes informações para determinar para quais hubs IoT o grupo de registro pode provisionar dispositivos:

    Campo Descrição
    Hubs IoT de destino Selecione um ou mais hubs IoT vinculados ou adicione um novo link a um hub IoT. Para saber mais sobre como vincular hubs IoT à sua instância DPS, consulte Como vincular e gerenciar hubs IoT.
    Política de afetação Se você selecionou mais de um hub IoT vinculado, selecione como deseja atribuir dispositivos aos diferentes hubs. Para saber mais sobre políticas de alocação, consulte Como usar políticas de alocação.

    Se você selecionou apenas um hub IoT vinculado, recomendamos usar a política de distribuição ponderada uniformemente.

    Screenshot that shows connecting IoT hubs to the new enrollment group.

  7. Selecione Next: Configurações do dispositivo

  8. Na guia Configurações do dispositivo da página Adicionar grupo de registro, forneça as seguintes informações para definir como os dispositivos recém-provisionados serão configurados:

    Campo Descrição
    IoT Edge Verifique a opção Habilitar o IoT Edge em dispositivos provisionados se todos os dispositivos provisionados por meio desse grupo executarão o Azure IoT Edge. Desmarque essa caixa se esse grupo for apenas para dispositivos não habilitados para IoT Edge. Todos os dispositivos de um grupo serão habilitados para IoT Edge ou nenhum poderá ser.
    Tags de dispositivo Use esta caixa de texto para fornecer as tags que você deseja aplicar aos gêmeos de dispositivos provisionados.
    Propriedades desejadas Use esta caixa de texto para fornecer as propriedades desejadas que você deseja aplicar aos gêmeos de dispositivos provisionados.

    Para obter mais informações, veja Understand and use device twins in IoT Hub (Compreender e utilizar dispositivos duplos no Hub IoT).

  9. Selecione Seguinte: Rever + criar.

  10. No separador Rever + criar, verifique todos os seus valores e, em seguida, selecione Criar.

Preparar e executar o código de provisionamento do dispositivo

Nesta seção, você atualiza o código de exemplo com as informações da instância do Serviço de Provisionamento de Dispositivo. Se um dispositivo for autenticado, ele será atribuído a um hub IoT vinculado à instância do Serviço de Provisionamento de Dispositivo configurada nesta seção.

Nesta seção, você usa o prompt do Git Bash e o IDE do Visual Studio.

Configurar o código do dispositivo de provisionamento

Nesta seção, você atualiza o código de exemplo com as informações da instância do Serviço de Provisionamento de Dispositivo.

  1. No portal do Azure, selecione a guia Visão geral da instância do Serviço de Provisionamento de Dispositivo e anote o valor do Escopo da ID.

    Screenshot that shows the ID scope on the DPS overview pane.

  2. Inicie o Visual Studio e abra o novo arquivo de solução que foi criado no cmake diretório criado na raiz do repositório git azure-iot-sdk-c. O arquivo de solução é chamado azure_iot_sdks.sln.

  3. No Gerenciador de Soluções para Visual Studio, navegue até Provision_Samples > prov_dev_client_sample Arquivos de > Origem e abra prov_dev_client_sample.c.

  4. Localize a constante id_scope e substitua o valor pelo seu Âmbito do ID que copiou anteriormente. Por exemplo:

    static const char* id_scope = "0ne00000A0A";
    
  5. Localize a definição da função main() no mesmo ficheiro. Certifique-se de que a hsm_type variável está definida como SECURE_DEVICE_TYPE_X509 e que todas as outras hsm_type linhas são comentadas. Por exemplo:

    SECURE_DEVICE_TYPE hsm_type;
    //hsm_type = SECURE_DEVICE_TYPE_TPM;
    hsm_type = SECURE_DEVICE_TYPE_X509;
    //hsm_type = SECURE_DEVICE_TYPE_SYMMETRIC_KEY;
    
  6. Guardar as suas alterações.

  7. Clique com o botão direito do mouse no projeto prov_dev_client_sample e selecione Definir como projeto de inicialização.

Configurar o código de stub HSM personalizado

As especificidades da interação com o armazenamento seguro real baseado em hardware variam dependendo do hardware do dispositivo. As cadeias de certificados usadas pelos dispositivos simulados neste tutorial serão codificadas no código de stub HSM personalizado. Em um cenário real, a cadeia de certificados seria armazenada no hardware HSM real para fornecer melhor segurança para informações confidenciais. Métodos semelhantes aos métodos de stub usados neste exemplo seriam então implementados para ler os segredos desse armazenamento baseado em hardware.

Embora o hardware HSM não seja necessário, é recomendável proteger informações confidenciais, como a chave privada do certificado. Se um HSM real estivesse sendo chamado pelo exemplo, a chave privada não estaria presente no código-fonte. Ter a chave no código-fonte expõe a chave para qualquer pessoa que possa visualizar o código. Isso só é feito neste tutorial para ajudar na aprendizagem.

Para atualizar o código de stub HSM personalizado para simular a identidade do dispositivo com ID device-01:

  1. No Gerenciador de Soluções para Visual Studio, navegue até Provision_Samples > custom_hsm_example > Arquivos de Origem e abra o custom_hsm_example.c.

  2. Atualize o valor da cadeia de caracteres constante COMMON_NAME usando o nome comum usado ao gerar o certificado do dispositivo.

    static const char* const COMMON_NAME = "device-01";
    
  3. No terminal Git Bash, execute o seguinte comando para gerar a constante string para o certificado do dispositivo:

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

    Copie a saída deste comando.

  4. Atualize o valor da cadeia de caracteres constante usando a cadeia de CERTIFICATE certificados salva em ./certs/device-01-full-chain.cert.pem depois de gerar seus certificados. Use o texto do certificado de saída da etapa anterior para o valor constante.

    A sintaxe do texto do certificado deve corresponder ao seguinte padrão sem espaços extras ou análise feita pelo Visual Studio.

    // <Device/leaf cert>
    // <intermediates>
    // <root>
    static const char* const CERTIFICATE = "-----BEGIN CERTIFICATE-----\n"
    "MIIFOjCCAyKgAwIBAgIJAPzMa6s7mj7+MA0GCSqGSIb3DQEBCwUAMCoxKDAmBgNV\n"
        ...
    "MDMwWhcNMjAxMTIyMjEzMDMwWjAqMSgwJgYDVQQDDB9BenVyZSBJb1QgSHViIENB\n"
    "-----END CERTIFICATE-----\n"
    "-----BEGIN CERTIFICATE-----\n"
    "MIIFPDCCAySgAwIBAgIBATANBgkqhkiG9w0BAQsFADAqMSgwJgYDVQQDDB9BenVy\n"
        ...
    "MTEyMjIxMzAzM1owNDEyMDAGA1UEAwwpQXp1cmUgSW9UIEh1YiBJbnRlcm1lZGlh\n"
    "-----END CERTIFICATE-----\n"
    "-----BEGIN CERTIFICATE-----\n"
    "MIIFOjCCAyKgAwIBAgIJAPzMa6s7mj7+MA0GCSqGSIb3DQEBCwUAMCoxKDAmBgNV\n"
        ...
    "MDMwWhcNMjAxMTIyMjEzMDMwWjAqMSgwJgYDVQQDDB9BenVyZSBJb1QgSHViIENB\n"
    "-----END CERTIFICATE-----";        
    
  5. No Git Bash, execute o seguinte comando para gerar a constante de cadeia de caracteres para a chave privada do dispositivo:

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

    Copie a saída deste comando.

  6. Atualize o valor da cadeia de caracteres da PRIVATE_KEY constante com a chave privada para o certificado do dispositivo. Use o texto da chave privada de saída da etapa anterior para o valor constante.

    A sintaxe do texto da chave privada deve corresponder ao seguinte padrão sem espaços extras ou análise feita pelo Visual Studio.

    static const char* const PRIVATE_KEY = "-----BEGIN RSA PRIVATE KEY-----\n"
    "MIIJJwIBAAKCAgEAtjvKQjIhp0EE1PoADL1rfF/W6v4vlAzOSifKSQsaPeebqg8U\n"
        ...
    "X7fi9OZ26QpnkS5QjjPTYI/wwn0J9YAwNfKSlNeXTJDfJ+KpjXBcvaLxeBQbQhij\n"
    "-----END RSA PRIVATE KEY-----";
    
  7. Guardar as suas alterações.

  8. Clique com o botão direito do mouse no projeto custom_hsm_example e selecione Construir.

    Importante

    Você deve criar o projeto custom_hsm_example antes de criar o restante da solução na próxima seção.

Executar o exemplo

  1. No menu do Visual Studio, selecione Debug (Depurar) >Start without debugging (Iniciar sem depuração) para executar a solução. Quando solicitado a reconstruir o projeto, selecione Sim para reconstruir o projeto antes da execução.

    A saída a seguir é um exemplo de dispositivo device-01 simulado inicializando com êxito e conectando-se ao serviço de provisionamento. O dispositivo foi atribuído a um hub IoT e 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-hub-2.azure-devices.net, deviceId: device-01
    Press enter key to exit:
    
  2. Repita as etapas em Configurar o código de stub HSM personalizado para seu segundo dispositivo (device-02) e execute o exemplo novamente. Use os seguintes valores para esse dispositivo:

    Description valor
    Nome comum "device-02"
    Cadeia de certificados completa Gere o texto usando ./certs/device-02-full-chain.cert.pem
    Chave privada Gere o texto usando ./private/device-02.key.pem

    A saída a seguir é um exemplo de dispositivo device-02 simulado inicializando com êxito e conectando-se ao serviço de provisionamento. O dispositivo foi atribuído a um hub IoT e 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-hub-2.azure-devices.net, deviceId: device-02
    Press enter key to exit:
    

O código de exemplo C# é configurado para usar certificados X.509 armazenados em um arquivo formatado PKCS#12 protegido por senha (.pfx). Os certificados de cadeia completa criados anteriormente estão no formato PEM. Para converter os certificados de cadeia completa para o formato PKCS#12, digite os seguintes comandos no prompt do Git Bash a partir do diretório onde você executou anteriormente os comandos OpenSSL.

  • dispositivo-01

    openssl pkcs12 -inkey ./private/device-01.key.pem -in ./certs/device-01-full-chain.cert.pem -export -passin pass:1234 -passout pass:1234 -out ./certs/device-01-full-chain.cert.pfx
    
  • dispositivo-02

    openssl pkcs12 -inkey ./private/device-02.key.pem -in ./certs/device-02-full-chain.cert.pem -export -passin pass:1234 -passout pass:1234 -out ./certs/device-02-full-chain.cert.pfx
    

No restante desta seção, use o prompt de comando do Windows.

  1. No portal do Azure, selecione a guia Visão geral do seu Serviço de Provisionamento de Dispositivo.

  2. Copie o valor ID Scope .

    Screenshot of the ID scope on Azure portal.

  3. No prompt de comando do Windows, mude para o diretório X509Sample . Este diretório está localizado no repositório do SDK que você clonou em uma etapa anterior: .\azure-iot-sdk-csharp\provisioning\device\samples\getting started\X509Sample.

  4. Digite o seguinte comando para criar e executar o exemplo de provisionamento de dispositivo X.509. Substitua <id-scope> pelo Escopo de ID copiado do portal do Azure. Substitua <your-certificate-folder> pelo caminho para a pasta onde você executou os comandos OpenSSL.

    dotnet run -- -s <id-scope> -c <your-certificate-folder>\certs\device-01-full-chain.cert.pfx -p 1234
    

    O dispositivo se conecta ao DPS e é atribuído a um hub IoT. Em seguida, o dispositivo envia uma mensagem de telemetria para o hub IoT. Você deve ver uma saída semelhante ao exemplo a seguir:

    Loading the certificate...
    Found certificate: 3E5AA3C234B2032251F0135E810D75D38D2AA477 CN=Azure IoT Hub CA Cert Test Only; PrivateKey: False
    Found certificate: 81FE182C08D18941CDEEB33F53F8553BA2081E60 CN=Azure IoT Hub Intermediate Cert Test Only; PrivateKey: False
    Found certificate: 5BA1DB226D50EBB7A6A6071CED4143892855AE43 CN=device-01; PrivateKey: True
    Using certificate 5BA1DB226D50EBB7A6A6071CED4143892855AE43 CN=device-01
    Initializing the device provisioning client...
    Initialized for registration Id device-01.
    Registering with the device provisioning service...
    Registration status: Assigned.
    Device device-01 registered to contoso-hub-2.azure-devices.net.
    Creating X509 authentication for IoT Hub...
    Testing the provisioned device with IoT Hub...
    Sending a telemetry message...
    Finished.
    

    Nota

    Se você não especificar certificado e senha na linha de comando, o arquivo de certificado será padrão para ./certificate.pfx e você será solicitado a fornecer sua senha.

    Parâmetros adicionais podem ser passados para alterar o TransportType (-t) e o GlobalDeviceEndpoint (-g). Para obter uma lista completa de parâmetros, digite dotnet run -- --help.

  5. Para registrar seu segundo dispositivo, execute novamente o exemplo usando seu certificado de cadeia completa.

    dotnet run -- -s <id-scope> -c <your-certificate-folder>\certs\device-02-full-chain.cert.pfx -p 1234
    

Nas etapas a seguir, use o prompt de comando do Windows.

  1. No portal do Azure, selecione a guia Visão geral do seu Serviço de Provisionamento de Dispositivo.

  2. Copie o valor ID Scope .

    Screenshot of the ID scope in the Azure portal.

  3. No prompt de comando do Windows, vá para o diretório de exemplo e instale os pacotes necessários para o exemplo. O caminho mostrado é relativo ao local onde você clonou o SDK.

    cd .\azure-iot-sdk-node\provisioning\device\samples
    npm install
    
  4. Na pasta provisioning\device\samples, abra register_x509.js e revise o código.

    O exemplo assume como padrão MQTT como o protocolo de transporte. Se você quiser usar um protocolo diferente, comente a linha a seguir e remova o comentário da linha para o protocolo apropriado.

    var ProvisioningTransport = require('azure-iot-provisioning-device-mqtt').Mqtt;
    

    O exemplo usa cinco variáveis de ambiente para autenticar e provisionar um dispositivo IoT usando DPS. Estas variáveis de ambiente são:

    Nome da variável Description
    PROVISIONING_HOST O ponto de extremidade a ser usado para se conectar à sua instância DPS. Para este tutorial, use o ponto de extremidade global, global.azure-devices-provisioning.net.
    PROVISIONING_IDSCOPE O escopo de ID para sua instância DPS.
    PROVISIONING_REGISTRATION_ID O ID de registo do seu dispositivo. Ele deve corresponder ao nome comum da entidade no certificado do dispositivo.
    CERTIFICATE_FILE O caminho para o arquivo de certificado de cadeia completa do dispositivo.
    KEY_FILE O caminho para o arquivo de chave privada do certificado do dispositivo.

    O ProvisioningDeviceClient.register() método tenta registrar seu dispositivo.

  5. Adicione variáveis de ambiente para o ponto de extremidade do dispositivo global e o escopo de ID. Substitua <id-scope> pelo valor copiado do portal do Azure.

    set PROVISIONING_HOST=global.azure-devices-provisioning.net
    set PROVISIONING_IDSCOPE=<id-scope>
    
  6. Defina a variável de ambiente para o ID de registro do dispositivo. A ID de registro do dispositivo IoT deve corresponder ao nome comum da entidade no certificado do dispositivo. Para este tutorial, device-01 é o nome do assunto e o ID de registro do dispositivo.

    set PROVISIONING_REGISTRATION_ID=device-01
    
  7. Defina as variáveis de ambiente para o certificado de cadeia completa do dispositivo e os arquivos de chave privada do dispositivo gerados anteriormente. Substitua <your-certificate-folder> pelo caminho para a pasta onde você executou os comandos OpenSSL.

    set CERTIFICATE_FILE=<your-certificate-folder>\certs\device-01-full-chain.cert.pem
    set KEY_FILE=<your-certificate-folder>\private\device-01.key.pem
    
  8. Execute o exemplo e verifique se o dispositivo foi provisionado com êxito.

    node register_x509.js
    

    Você deve ver uma saída semelhante ao exemplo a seguir:

    registration succeeded
    assigned hub=contoso-hub-2.azure-devices.net
    deviceId=device-01
    Client connected
    send status: MessageEnqueued
    
  9. Atualize as variáveis de ambiente para seu segundo dispositivo (device-02) de acordo com a tabela a seguir e execute o exemplo novamente.

    Variável de Ambiente Value
    PROVISIONING_REGISTRATION_ID device-02
    CERTIFICATE_FILE <sua-pasta-certificado>\certs\device-02-full-chain.cert.pem
    KEY_FILE <sua-pasta-certificado>\private\device-02.key.pem

Nas etapas a seguir, use o prompt de comando do Windows.

  1. No portal do Azure, selecione a guia Visão geral do seu Serviço de Provisionamento de Dispositivo.

  2. Copie o escopo do ID.

    Screenshot of the ID scope in the Azure portal.

  3. No prompt de comando do Windows, vá para o diretório do exemplo de provision_x509.py . O caminho mostrado é relativo ao local onde você clonou o SDK.

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

    Este exemplo usa seis variáveis de ambiente para autenticar e provisionar um dispositivo IoT usando DPS. Estas variáveis de ambiente são:

    Nome da variável Description
    PROVISIONING_HOST O ponto de extremidade a ser usado para se conectar à sua instância DPS. Para este tutorial, use o ponto de extremidade global, global.azure-devices-provisioning.net.
    PROVISIONING_IDSCOPE O escopo de ID para sua instância DPS.
    DPS_X509_REGISTRATION_ID O ID de registo do seu dispositivo. Ele deve corresponder ao nome comum da entidade no certificado do dispositivo.
    X509_CERT_FILE O caminho para o arquivo de certificado de cadeia completa do dispositivo.
    X509_KEY_FILE O caminho para o arquivo de chave privada do certificado do dispositivo.
    PASS_PHRASE A frase secreta usada para criptografar o arquivo de chave privada (se usado). Não é necessário para este tutorial.
  4. Adicione as variáveis de ambiente para o ponto de extremidade do dispositivo global e o escopo de ID. Para a variável de escopo de ID, use o valor copiado do portal do Azure.

    set PROVISIONING_HOST=global.azure-devices-provisioning.net
    set PROVISIONING_IDSCOPE=<ID scope for your DPS resource>
    
  5. Defina a variável de ambiente para o ID de registro do dispositivo. A ID de registro do dispositivo IoT deve corresponder ao nome comum da entidade no certificado do dispositivo. Para este tutorial, device-01 é o nome do assunto e o ID de registro do dispositivo.

    set DPS_X509_REGISTRATION_ID=device-01
    
  6. Defina as variáveis de ambiente para o certificado de cadeia completa do dispositivo e os arquivos de chave privada do dispositivo gerados anteriormente. Substitua <your-certificate-folder> pelo caminho para a pasta onde você executou os comandos OpenSSL.

    set X509_CERT_FILE=<your-certificate-folder>\certs\device-01-full-chain.cert.pem
    set X509_KEY_FILE=<your-certificate-folder>\private\device-01.key.pem
    
  7. Revise o código para provision_x509.py. Se você não estiver usando o Python versão 3.7 ou posterior, faça a alteração de código mencionada aqui para substituir asyncio.run(main())o .

  8. Execute o exemplo. O exemplo se conecta ao DPS, que provisionará o dispositivo para um hub IoT. Depois que o dispositivo é provisionado, o exemplo envia algumas mensagens de teste para o hub IoT.

    python provision_x509.py
    

    Você deve ver uma saída semelhante ao exemplo a seguir:

    The complete registration result is
    device-01
    contoso-hub-2.azure-devices.net
    initialAssignment
    null
    Will send telemetry from the provisioned device
    sending message #1
    sending message #2
    sending message #3
    sending message #4
    sending message #5
    sending message #6
    sending message #7
    sending message #8
    sending message #9
    sending message #10
    done sending message #1
    done sending message #2
    done sending message #3
    done sending message #4
    done sending message #5
    done sending message #6
    done sending message #7
    done sending message #8
    done sending message #9
    done sending message #10
    
  9. Atualize as variáveis de ambiente para seu segundo dispositivo (device-02) de acordo com a tabela a seguir e execute o exemplo novamente.

    Variável de Ambiente Value
    DPS_X509_REGISTRATION_ID device-02
    X509_CERT_FILE <sua-pasta-certificado>\certs\device-02-full-chain.cert.pem
    X509_KEY_FILE <sua-pasta-certificado>\private\device-02.key.pem

Nas etapas a seguir, você usa o prompt de comando do Windows e o prompt do Git Bash.

  1. No portal do Azure, selecione a guia Visão geral do seu Serviço de Provisionamento de Dispositivo.

  2. Copie o escopo do ID.

    Screenshot of the ID scope in the Azure portal.

  3. No prompt de comando do Windows, navegue até a pasta de projeto de exemplo. O caminho mostrado é relativo ao local onde você clonou o SDK

    cd .\azure-iot-sdk-java\provisioning\provisioning-device-client-samples\provisioning-X509-sample
    
  4. Insira o serviço de provisionamento e as informações de identidade X.509 no código de exemplo. Isso é usado durante o provisionamento, para atestado do dispositivo simulado, antes do registro do dispositivo.

    1. Abra o arquivo .\src\main\java\samples\com\microsoft\azure\sdk\iot\ProvisioningX509Sample.java em seu editor favorito.

    2. Atualize os seguintes valores. Para idScope, use o Escopo de ID copiado anteriormente. Para o ponto de extremidade global, use o ponto de extremidade do dispositivo Global. Este ponto de extremidade é o mesmo para todas as instâncias do DPS, global.azure-devices-provisioning.net.

      private static final String idScope = "[Your ID scope here]";
      private static final String globalEndpoint = "[Your Provisioning Service Global Endpoint here]";
      
    3. O exemplo assume como padrão o uso de HTTPS como o protocolo de transporte. Se você quiser alterar o protocolo, comente a linha a seguir e remova o comentário da linha do protocolo que deseja usar.

      private static final ProvisioningDeviceClientTransportProtocol PROVISIONING_DEVICE_CLIENT_TRANSPORT_PROTOCOL = ProvisioningDeviceClientTransportProtocol.HTTPS;
      
    4. Atualize o leafPublicPem valor da cadeia de caracteres constante com o valor do certificado do dispositivo, device-01.cert.pem.

      A sintaxe do texto do certificado deve corresponder ao seguinte padrão, sem espaços ou caracteres extras.

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

      Atualizar esse valor de cadeia de caracteres manualmente pode ser propenso a erros. Para gerar a sintaxe adequada, você pode copiar e colar o seguinte comando no prompt do Git Bash e pressionar ENTER. Este comando gera a sintaxe para o valor da leafPublicPem constante de cadeia de caracteres e grava-a na saída.

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

      Copie e cole o texto do certificado de saída para o valor constante.

    5. Atualize o valor da cadeia de caracteres da leafPrivateKey constante com a chave privada não criptografada para o certificado do dispositivo, unencrypted-device-key.pem.

      A sintaxe do texto da chave privada deve corresponder ao seguinte padrão, sem espaços ou caracteres extras.

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

      Para gerar a sintaxe adequada, você pode copiar e colar o seguinte comando no prompt do Git Bash e pressionar ENTER. Este comando gera a sintaxe para o valor da leafPrivateKey constante de cadeia de caracteres e grava-a na saída.

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

      Copie e cole o texto da chave privada de saída para o valor constante.

    6. Adicione uma rootPublicPem cadeia de caracteres constante com o valor do seu certificado de autoridade de certificação raiz, azure-iot-test-only.root.ca.cert.pem. Você pode adicioná-lo logo após a leafPrivateKey constante.

      A sintaxe do texto do certificado deve corresponder ao seguinte padrão, sem espaços ou caracteres extras.

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

      Para gerar a sintaxe adequada, você pode copiar e colar o seguinte comando no prompt do Git Bash e pressionar ENTER. Este comando gera a sintaxe para o valor da rootPublicPem constante de cadeia de caracteres e grava-a na saída.

      sed 's/^/"/;$ !s/$/\\n" +/;$ s/$/"/' ./certs/azure-iot-test-only.root.ca.cert.pem
      

      Copie e cole o texto do certificado de saída para o valor constante.

    7. Adicione uma intermediatePublicPem cadeia de caracteres constante com o valor do seu certificado de CA intermediário, azure-iot-test-only.intermediate.cert.pem. Você pode adicioná-lo logo após a constante anterior.

      A sintaxe do texto do certificado deve corresponder ao seguinte padrão, sem espaços ou caracteres extras.

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

      Para gerar a sintaxe adequada, você pode copiar e colar o seguinte comando no prompt do Git Bash e pressionar ENTER. Este comando gera a sintaxe para o valor da intermediatePublicPem constante de cadeia de caracteres e grava-a na saída.

      sed 's/^/"/;$ !s/$/\\n" +/;$ s/$/"/' ./certs/azure-iot-test-only.intermediate.cert.pem
      

      Copie e cole o texto do certificado de saída para o valor constante.

    8. Encontre as seguintes linhas no main método.

      // For group enrollment uncomment this line
      //signerCertificatePemList.add("<Your Signer/intermediate Certificate Here>");
      

      Adicione essas duas linhas diretamente abaixo delas para adicionar seus certificados de CA intermediários e raiz à cadeia de assinatura. Sua cadeia de assinatura deve incluir toda a cadeia de certificados até e incluindo um certificado que você verificou com o DPS.

      signerCertificatePemList.add(intermediatePublicPem);
      signerCertificatePemList.add(rootPublicPem);
      

      Nota

      A ordem em que os certificados de assinatura são adicionados é importante. O exemplo falhará se for alterado.

    9. Guardar as suas alterações.

  5. Crie o exemplo e, em seguida, vá para a target pasta.

    mvn clean install
    cd target
    
  6. A compilação produz .jar arquivo na target pasta com o seguinte formato de arquivo: provisioning-x509-sample-{version}-with-deps.jar; por exemplo: provisioning-x509-sample-1.8.1-with-deps.jar. Execute o arquivo .jar. Talvez seja necessário substituir a versão no comando a seguir.

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

    O exemplo se conecta ao DPS, que provisiona o dispositivo para um hub IoT. Depois que o dispositivo for provisionado, o exemplo enviará algumas mensagens de teste para o hub IoT.

    Starting...
    Beginning setup.
    WARNING: sun.reflect.Reflection.getCallerClass is not supported. This will impact performance.
    2022-10-21 10:41:20,476 DEBUG (main) [com.microsoft.azure.sdk.iot.provisioning.device.ProvisioningDeviceClient] - Initialized a ProvisioningDeviceClient instance using SDK version 2.0.2
    2022-10-21 10:41:20,479 DEBUG (main) [com.microsoft.azure.sdk.iot.provisioning.device.ProvisioningDeviceClient] - Starting provisioning thread...
    Waiting for Provisioning Service to register
    2022-10-21 10:41:20,482 INFO (global.azure-devices-provisioning.net-4f8279ac-CxnPendingConnectionId-azure-iot-sdk-ProvisioningTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.ProvisioningTask] - Opening the connection to device provisioning service...
    2022-10-21 10:41:20,652 INFO (global.azure-devices-provisioning.net-4f8279ac-Cxn4f8279ac-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-10-21 10:41:20,680 INFO (global.azure-devices-provisioning.net-4f8279ac-Cxn4f8279ac-azure-iot-sdk-RegisterTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.RegisterTask] - Authenticating with device provisioning service using x509 certificates
    2022-10-21 10:41:21,603 INFO (global.azure-devices-provisioning.net-4f8279ac-Cxn4f8279ac-azure-iot-sdk-ProvisioningTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.ProvisioningTask] - Waiting for device provisioning service to provision this device...
    2022-10-21 10:41:21,605 INFO (global.azure-devices-provisioning.net-4f8279ac-Cxn4f8279ac-azure-iot-sdk-ProvisioningTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.ProvisioningTask] - Current provisioning status: ASSIGNING
    2022-10-21 10:41:24,868 INFO (global.azure-devices-provisioning.net-4f8279ac-Cxn4f8279ac-azure-iot-sdk-ProvisioningTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.ProvisioningTask] - Device provisioning service assigned the device successfully
    IotHUb Uri : contoso-hub-2.azure-devices.net
    Device ID : device-01
    2022-10-21 10:41:30,514 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-10-21 10:41:30,526 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-10-21 10:41:30,533 DEBUG (main) [com.microsoft.azure.sdk.iot.device.DeviceClient] - Initialized a DeviceClient instance using SDK version 2.1.2
    2022-10-21 10:41:30,590 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.MqttIotHubConnection] - Opening MQTT connection...
    2022-10-21 10:41:30,625 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.Mqtt] - Sending MQTT CONNECT packet...
    2022-10-21 10:41:31,452 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.Mqtt] - Sent MQTT CONNECT packet was acknowledged
    2022-10-21 10:41:31,453 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.Mqtt] - Sending MQTT SUBSCRIBE packet for topic devices/device-01/messages/devicebound/#
    2022-10-21 10:41:31,523 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.Mqtt] - Sent MQTT SUBSCRIBE packet for topic devices/device-01/messages/devicebound/# was acknowledged
    2022-10-21 10:41:31,525 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.MqttIotHubConnection] - MQTT connection opened successfully
    2022-10-21 10:41:31,528 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - The connection to the IoT Hub has been established
    2022-10-21 10:41:31,531 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Updating transport status to new status CONNECTED with reason CONNECTION_OK
    2022-10-21 10:41:31,532 DEBUG (main) [com.microsoft.azure.sdk.iot.device.DeviceIO] - Starting worker threads
    2022-10-21 10:41:31,535 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Invoking connection status callbacks with new status details
    2022-10-21 10:41:31,536 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Client connection opened successfully
    2022-10-21 10:41:31,537 INFO (main) [com.microsoft.azure.sdk.iot.device.DeviceClient] - Device client opened successfully
    Sending message from device to IoT Hub...
    2022-10-21 10:41:31,539 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Message was queued to be sent later ( Message details: Correlation Id [0d143280-dbc7-405f-a61e-fcc7a1d80b87] Message Id [4d8d39c8-5a38-4299-8f07-3ae02cdc3218] )
    Press any key to exit...
    2022-10-21 10:41:31,540 DEBUG (contoso-hub-2.azure-devices.net-device-01-d7c67552-Cxn0bd73809-420e-46fe-91ee-942520b775db-azure-iot-sdk-IotHubSendTask) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Sending message ( Message details: Correlation Id [0d143280-dbc7-405f-a61e-fcc7a1d80b87] Message Id [4d8d39c8-5a38-4299-8f07-3ae02cdc3218] )
    2022-10-21 10:41:31,844 DEBUG (MQTT Call: 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 [0d143280-dbc7-405f-a61e-fcc7a1d80b87] Message Id [4d8d39c8-5a38-4299-8f07-3ae02cdc3218] )
    2022-10-21 10:41:31,846 DEBUG (contoso-hub-2.azure-devices.net-device-01-d7c67552-Cxn0bd73809-420e-46fe-91ee-942520b775db-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 [0d143280-dbc7-405f-a61e-fcc7a1d80b87] Message Id [4d8d39c8-5a38-4299-8f07-3ae02cdc3218] ) with status OK
    Message sent!
    
  7. Atualize as constantes para seu segundo dispositivo (device-02) de acordo com a tabela a seguir, reconstrua e execute o exemplo novamente.

    Constante Ficheiro a utilizar
    leafPublicPem ./certs/device-02.cert.pem
    leafPrivateKey ./privado/device-02.key.pem

Confirme o registro de provisionamento do dispositivo

Examine os registros de registro do grupo de inscrição para ver os detalhes de registro para seus dispositivos:

  1. No portal do Azure, vá para sua instância do Serviço de Provisionamento de Dispositivo.

  2. No menu Configurações, selecione Gerenciar inscrições.

  3. Selecione Grupos de inscrição. A entrada do grupo de inscrição X.509 que você criou anteriormente deve aparecer na lista.

  4. Selecione a entrada de inscrição. Em seguida, selecione Detalhes ao lado do status Registro para ver os dispositivos que foram registrados por meio do grupo de inscrição. O hub IoT ao qual cada um dos seus dispositivos foi atribuído, suas IDs de dispositivo e as datas e horas em que foram registrados aparecem na lista.

    Screenshot that shows the registration status details for the enrollment group on Azure portal.

  5. Você pode selecionar um dos dispositivos para ver mais detalhes desse dispositivo.

Para verificar os dispositivos no seu hub IoT:

  1. No portal do Azure, vá para o hub IoT ao qual seu dispositivo foi atribuído.

  2. No menu Gerenciamento de dispositivos, selecione Dispositivos.

  3. Se seus dispositivos foram provisionados com êxito, seus IDs de dispositivo, device-01 e device-02, devem aparecer na lista, com Status definido como habilitado. Se não vir os seus dispositivos, selecione Atualizar.

    Screenshot that shows the devices are registered with the I o T hub in Azure portal.

Clean up resources (Limpar recursos)

Quando terminar de testar e explorar este exemplo de cliente de dispositivo, use as etapas a seguir para excluir todos os recursos criados por este tutorial.

  1. Feche a janela da saída do exemplo de dispositivo cliente no seu computador.

Excluir seu grupo de inscrição

  1. No menu à esquerda no portal do Azure, selecione Todos os recursos.

  2. Selecione sua instância do DPS.

  3. No menu Configurações, selecione Gerenciar inscrições.

  4. Selecione a guia Grupos de inscrição.

  5. Selecione o grupo de inscrição usado para este tutorial.

  6. Na página Detalhes da inscrição, selecione Detalhes ao lado do Status do registro. Em seguida, marque a caixa de seleção ao lado do cabeçalho da coluna ID do dispositivo para selecionar todos os registros de registro para o grupo de registro. Selecione Excluir na parte superior da página para excluir os registros de registro.

    Importante

    A exclusão de um grupo de inscrição não exclui os registros de registro associados a ele. Esses registros órfãos serão contabilizados na cota de registros para a instância do DPS. Por esse motivo, é uma prática recomendada excluir todos os registros de registro associados a um grupo de inscrição antes de excluir o próprio grupo de inscrição.

  7. Volte para a página Gerenciar inscrições e verifique se a guia Grupos de inscrições está selecionada.

  8. Marque a caixa de seleção ao lado do nome do grupo de inscrição usado para este tutorial.

  9. Na parte superior da página, selecione Eliminar.

Excluir certificados de CA registrados do DPS

  1. Selecione Certificados no menu esquerdo da sua instância DPS. Para cada certificado carregado e verificado neste tutorial, selecione o certificado e selecione Excluir e confirme sua escolha para removê-lo.

Excluir registros de dispositivos do Hub IoT

  1. No menu à esquerda no portal do Azure, selecione Todos os recursos.

  2. Selecione seu hub IoT.

  3. No menu Explorers, selecione dispositivos IoT.

  4. Marque a caixa de seleção ao lado da ID do dispositivo dos dispositivos registrados neste tutorial. Por exemplo, device-01 e device-02.

  5. Na parte superior da página, selecione Eliminar.

Próximos passos

Neste tutorial, você provisionou vários dispositivos X.509 para seu hub IoT usando um grupo de registro. Em seguida, saiba como provisionar dispositivos IoT em vários hubs.