Zelfstudie: Meerdere X.509-apparaten inrichten met behulp van inschrijvingsgroepen
In deze zelfstudie leert u hoe u groepen IoT-apparaten inricht die X.509-certificaten gebruiken voor verificatie. Voorbeeldapparaatcode van de Azure IoT SDK wordt uitgevoerd op uw ontwikkelcomputer om het inrichten van X.509-apparaten te simuleren. Op echte apparaten wordt apparaatcode geïmplementeerd en uitgevoerd vanaf het IoT-apparaat.
De Azure IoT Hub Device Provisioning Service ondersteunt twee typen inschrijvingen voor inrichtingsapparaten:
- Registratiegroepen: wordt gebruikt om meerdere gerelateerde apparaten in te schrijven. In deze zelfstudie wordt het inrichten met inschrijvingsgroepen gedemonstreert.
- Afzonderlijke inschrijvingen: wordt gebruikt om één apparaat in te schrijven.
De Azure IoT Hub Device Provisioning Service ondersteunt drie vormen van verificatie voor het inrichten van apparaten:
- X.509-certificaten - In deze zelfstudie ziet u X.509-certificaatverklaring
- Tpm (Trusted Platform Module)
- Symmetrische sleutels
In productiescenario's wordt een HSM (Hardware Security Module) gebruikt voor veilige, hardwaregebaseerde opslag van apparaatgeheimen. Een HSM kan worden gebruikt met symmetrische sleutels, X.509-certificaten of TPM-attestation om beveiligde opslag voor geheimen te bieden. Op hardware gebaseerde opslag van apparaatgeheimen wordt aanbevolen om gevoelige informatie te beveiligen, zoals de persoonlijke sleutel van uw apparaatcertificaat.
In deze zelfstudie voltooit u de volgende doelstellingen:
- Een certificaatketen van vertrouwen om een groep apparaten in te delen met X.509-certificaten.
- Maak een nieuwe groepsinschrijving die gebruikmaakt van de certificaatketen.
- Stel de ontwikkelomgeving in.
- Apparaten inrichten met behulp van de certificaatketen met behulp van voorbeeldcode in de Azure IoT-apparaat-SDK.
Vereisten
Als u geen Azure-abonnement hebt, maakt u een gratis account voordat u begint.
Voer de stappen uit in IoT Hub Device Provisioning Service instellen met Azure Portal.
De volgende vereisten zijn voor een Windows-ontwikkelomgeving die wordt gebruikt om de apparaten te simuleren. Voor Linux of macOS raadpleegt u het desbetreffende gedeelte in Uw ontwikkelomgeving voorbereiden in de SDK-documentatie.
Installeer Visual Studio 2022 met de workload Desktopontwikkeling met C++ . Visual Studio 2015, Visual Studio 2017 en Visual Studio 19 worden ook ondersteund.
Installeer het nieuwste CMake-buildsysteem. Controleer de optie waarmee het uitvoerbare CMake-bestand aan uw pad wordt toegevoegd.
Belangrijk
Controleer of de vereisten voor Visual Studio (Visual Studio en de workload Desktopontwikkeling met C++) op uw computer zijn geïnstalleerd voordat u de
CMake
installatie start. Zodra aan de vereisten is voldaan en de download is geverifieerd, installeert u het CMake-bouwsysteem. Houd er ook rekening mee dat oudere versies van het CMake-buildsysteem het oplossingsbestand dat in deze zelfstudie wordt gebruikt, niet kunnen genereren. Zorg ervoor dat u de nieuwste versie van CMake gebruikt.
De volgende vereisten gelden voor een ontwikkelomgeving in Windows. Voor Linux of macOS raadpleegt u het desbetreffende gedeelte in Uw ontwikkelomgeving voorbereiden in de SDK-documentatie.
Installeer .NET SDK 6.0 of hoger op uw Windows-computer. U kunt de volgende opdracht gebruiken om uw versie te controleren.
dotnet --info
De volgende vereisten gelden voor een ontwikkelomgeving in Windows. Voor Linux of macOS raadpleegt u het desbetreffende gedeelte in Uw ontwikkelomgeving voorbereiden in de SDK-documentatie.
- Installeer Node.js v4.0 of hoger op uw computer.
De volgende vereisten gelden voor een ontwikkelomgeving in Windows.
- Python 3.6 of hoger op uw computer.
De volgende vereisten gelden voor een ontwikkelomgeving in Windows. Voor Linux of macOS raadpleegt u het desbetreffende gedeelte in Uw ontwikkelomgeving voorbereiden in de SDK-documentatie.
Installeer de Java SE Development Kit 8 of hoger op uw computer.
Download en installeer Maven.
Installeer de meest recente versie van Git. Zorg ervoor dat Git is toegevoegd aan de omgevingsvariabelen die toegankelijk zijn voor het opdrachtvenster.
Zorg ervoor dat OpenSSL op uw computer is geïnstalleerd. In Windows bevat uw installatie van Git een installatie van OpenSSL. U kunt OpenSSL openen via de Git Bash-prompt. Als u wilt controleren of OpenSSL is geïnstalleerd, opent u een Git Bash-prompt en voert u deze in
openssl version
.Notitie
Tenzij u bekend bent met OpenSSL en deze al op uw Windows-computer hebt geïnstalleerd, raden we u aan OpenSSL te gebruiken vanuit de Git Bash-prompt. U kunt er ook voor kiezen om de broncode te downloaden en OpenSSL te bouwen. Als u ervoor kiest om OpenSSL te bouwen of te downloaden, moet u ervoor zorgen dat het binaire bestand openSSL toegankelijk is in uw pad en dat de
OPENSSL_CNF
omgevingsvariabele is ingesteld op het pad van het bestand openssl.cnf .
Uw ontwikkelomgeving voorbereiden
In deze sectie bereidt u een ontwikkelomgeving voor die wordt gebruikt om de Azure IoT C SDK te bouwen. De SDK bevat voorbeeldcode en hulpprogramma's die worden gebruikt door het inrichten van apparaten met DPS.
Ga in een webbrowser naar de releasepagina van de Azure IoT C SDK.
Kopieer de tagnaam voor de nieuwste versie van de Azure IoT C SDK, bijvoorbeeld:
lts_03_2024
.Open een Windows-opdrachtprompt en voer de volgende opdrachten uit om de nieuwste versie van de Azure IoT Device SDK voor C GitHub-opslagplaats te klonen. Vervang
<release-tag>
door de tag die u in de vorige stap hebt gekopieerd.git clone -b <release-tag> https://github.com/Azure/azure-iot-sdk-c.git cd azure-iot-sdk-c git submodule update --init
Het kan enkele minuten duren voordat deze bewerking is voltooid.
Wanneer de bewerking is voltooid, voert u de volgende opdrachten uit vanuit de
azure-iot-sdk-c
map:mkdir cmake cd cmake
De voorbeeldcode gebruikt een X.509-certificaat voor attestation via x.509-verificatie. Voer de volgende opdracht uit om een versie van de SDK te bouwen die specifiek is voor uw platform voor ontwikkeling dat de client voor apparaatinrichting bevat. Er wordt een Visual Studio-oplossing voor het gesimuleerde apparaat gegenereerd in de map
cmake
.Vervang
<path
door het absolute pad naar de C SDK die u hebt gekloond.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 ..
Tip
Als
cmake
uw C++-compiler niet wordt gevonden, krijgt u mogelijk buildfouten tijdens het uitvoeren van de bovenstaande opdracht. Als dit gebeurt, voert u de opdracht uit in de Visual Studio-opdrachtprompt.Wanneer de build slaagt, zien de laatste paar uitvoerlijnen er ongeveer als volgt uit:
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
Open een Windows-opdrachtprompt en kloon de Azure IoT SDK voor C# GitHub-opslagplaats met behulp van de volgende opdracht:
git clone https://github.com/Azure/azure-iot-sdk-csharp.git
Open een Windows-opdrachtprompt en kloon de Azure IoT SDK voor Node.js GitHub-opslagplaats met behulp van de volgende opdracht:
git clone https://github.com/Azure/azure-iot-sdk-node.git
Open een Windows-opdrachtprompt en kloon de Azure IoT Device SDK voor Python GitHub-opslagplaats met behulp van de volgende opdracht:
git clone -b v2 https://github.com/Azure/azure-iot-sdk-python.git --recursive
Notitie
De voorbeelden die in deze zelfstudie worden gebruikt, bevinden zich in de v2-vertakking van de opslagplaats azure-iot-sdk-python. V3 van de Python SDK is beschikbaar voor gebruik in bètaversie.
Open een Windows-opdrachtprompt en kloon de Azure IoT-voorbeelden voor Java GitHub-opslagplaats met behulp van de volgende opdracht:
git clone https://github.com/Azure/azure-iot-sdk-java.git --recursive
Ga naar de hoofdmap
azure-iot-sdk-java
en bouw het project om alle benodigde pakketten te downloaden.cd azure-iot-sdk-java mvn install -DskipTests=true
Een X.509-certificaatketen maken
In deze sectie genereert u een X.509-certificaatketen van drie certificaten voor het testen van elk apparaat met deze zelfstudie. De certificaten hebben de volgende hiërarchie.
Basiscertificaat U uploadt en verifieert het basiscertificaat met DPS. Met deze verificatie kan DPS dat certificaat vertrouwen en certificaten verifiëren die door het certificaat zijn ondertekend.
Tussenliggend certificaat: het is gebruikelijk om tussenliggende certificaten te gebruiken om apparaten logisch te groeperen op productlijnen, bedrijfsafdelingen of andere criteria. In deze zelfstudie wordt gebruikgemaakt van een certificaatketen met één tussenliggend certificaat, maar in een productiescenario hebt u mogelijk meerdere. Het tussenliggende certificaat in deze keten wordt ondertekend door het basiscertificaat. Dit certificaat wordt verstrekt aan de inschrijvingsgroep die is gemaakt in DPS. Met deze configuratie kunt u een hele groep apparaten beheren waarvan de certificaten zijn ondertekend door hetzelfde tussenliggende certificaat.
Apparaatcertificaten: Een apparaatcertificaten (ook wel een bladcertificaat genoemd) wordt ondertekend door het tussenliggende certificaat en opgeslagen op het apparaat, samen met de persoonlijke sleutel. Idealiter worden deze gevoelige items veilig opgeslagen met een HSM. Meerdere apparaatcertificaten kunnen worden ondertekend met hetzelfde tussenliggende certificaat. Elk apparaat presenteert het certificaat en de persoonlijke sleutel, samen met de certificaatketen, bij het inrichten.
Zie X.509-certificaatverklaring voor meer informatie over certificaatketens.
De X.509 OpenSSL-omgeving instellen
In deze sectie maakt u de Openssl-configuratiebestanden, mapstructuur en andere bestanden die worden gebruikt door de Openssl-opdrachten.
Open een Git Bash-opdrachtprompt en navigeer naar een map waarin u de X.509-certificaten en -sleutels voor deze zelfstudie wilt genereren.
Maak een OpenSSL-configuratiebestand met de naam openssl_root_ca.cnf voor uw basis-CA-certificaat. OpenSSL-configuratiebestanden bevatten beleidsregels en definities die worden gebruikt door OpenSSL-opdrachten. Kopieer en plak de volgende tekst in het bestand 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
Maak een OpenSSL-configuratiebestand met de naam openssl_device_intermediate_ca.cnf dat moet worden gebruikt voor tussenliggende certificaten en apparaatcertificaten. Kopieer en plak de volgende tekst in het bestand 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
Maak de mapstructuur, het databasebestand index.txt en het serienummerbestand dat wordt gebruikt door OpenSSL-opdrachten in deze zelfstudie:
mkdir certs csr newcerts private touch index.txt openssl rand -hex 16 > serial
Een basis-CA-certificaat maken
Voer de volgende opdrachten uit om een persoonlijke basis-CA-sleutel en een basis-CA-certificaat te maken. U gebruikt dit certificaat en de sleutel om uw tussenliggende certificaat te ondertekenen.
Maak in uw Git Bash-terminal een persoonlijke basis-CA-sleutel:
openssl genrsa -aes256 -passout pass:1234 -out ./private/azure-iot-test-only.root.ca.key.pem 4096
Een basis-CA-certificaat maken:
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
Belangrijk
De extra slash die wordt opgegeven voor de onderwerpnaam (
//CN=Azure IoT Hub CA Cert Test Only
) is alleen vereist om de tekenreeks te escapen met Git op Windows-platforms. Geef op Linux-platforms de onderwerpnaam op met slechts één slash (/CN=Azure IoT Hub CA Cert Test Only
).Controleer het basis-CA-certificaat:
openssl x509 -noout -text -in ./certs/azure-iot-test-only.root.ca.cert.pem
U ziet dat de uitgever en het onderwerp beide de basis-CA zijn.
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)
Een tussenliggend CA-certificaat maken
Voer de volgende opdrachten uit om een tussenliggende ca-persoonlijke sleutel en een tussenliggend CA-certificaat te maken. U gebruikt dit certificaat en de sleutel om uw apparaatcertificaten te ondertekenen.
Maak in uw Git Bash-terminal een tussenliggende persoonlijke CA-sleutel:
openssl genrsa -aes256 -passout pass:1234 -out ./private/azure-iot-test-only.intermediate.key.pem 4096
Maak een aanvraag voor ondertekening van tussenliggende CA-certificaten (CSR):
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
Belangrijk
De extra slash die wordt opgegeven voor de onderwerpnaam (
//CN=Azure IoT Hub Intermediate Cert Test Only
) is alleen vereist om de tekenreeks te escapen met Git op Windows-platforms. Geef op Linux-platforms de onderwerpnaam op met één slash (/CN=Azure IoT Hub Intermediate Cert Test Only
).Het tussenliggende certificaat ondertekenen met het basis-CA-certificaat
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
Controleer het tussenliggende CA-certificaat:
openssl x509 -noout -text -in ./certs/azure-iot-test-only.intermediate.cert.pem
Merk op dat de verlener de basis-CA is en dat het onderwerp de tussenliggende CA is.
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)
Apparaatcertificaten maken
In deze sectie maakt u twee apparaatcertificaten en de bijbehorende volledige ketencertificaten. Het volledige ketencertificaat bevat het apparaatcertificaat, het tussenliggende CA-certificaat en het basis-CA-certificaat. Het apparaat moet het volledige ketencertificaat presenteren wanneer het bij DPS wordt geregistreerd.
Maak de eerste persoonlijke sleutel van het apparaat.
openssl genrsa -out ./private/device-01.key.pem 4096
Maak de CSR van het apparaatcertificaat.
De algemene naam van het onderwerp (CN) van het apparaatcertificaat moet worden ingesteld op de registratie-id die uw apparaat gebruikt voor registratie bij DPS. De registratie-id is een niet-hoofdlettergevoelige tekenreeks van alfanumerieke tekens plus de speciale tekens:
'-'
,'.'
,'_'
, .':'
Het laatste teken moet alfanumeriek of streepje ('-'
) zijn. De algemene naam moet voldoen aan deze indeling. DPS ondersteunt registratie-id's van maximaal 128 tekens; De maximale lengte van de algemene naam van het onderwerp in een X.509-certificaat is echter 64 tekens. De registratie-id is daarom beperkt tot 64 tekens bij het gebruik van X.509-certificaten. Voor groepsinschrijvingen wordt de registratie-id ook gebruikt als apparaat-id in IoT Hub.De algemene naam van het onderwerp wordt ingesteld met behulp van de
-subj
parameter. In de volgende opdracht wordt de algemene naam ingesteld op apparaat-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
Belangrijk
De extra slash die wordt opgegeven voor de onderwerpnaam (
//CN=device-01
) is alleen vereist om de tekenreeks te escapen met Git op Windows-platforms. Geef op Linux-platforms de onderwerpnaam op met één slash (/CN=device-01
).Onderteken het apparaatcertificaat.
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
Controleer het apparaatcertificaat:
openssl x509 -noout -text -in ./certs/device-01.cert.pem
Houd er rekening mee dat de verlener de tussenliggende CA is en het onderwerp de apparaatregistratie-id is.
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)
Het apparaat moet de volledige certificaatketen presenteren wanneer het wordt geverifieerd met DPS. Gebruik de volgende opdracht om de certificaatketen te maken:
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
Open het certificaatketenbestand ./certs/device-01-full-chain.cert.pem in een teksteditor om het te onderzoeken. De tekst van de certificaatketen bevat de volledige keten van alle drie de certificaten. U gebruikt deze certificaatketen verderop in deze zelfstudie om in te richten
device-01
.De tekst van de volledige keten heeft de volgende indeling:
-----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-----
Als u de persoonlijke sleutel, het X.509-certificaat en het volledige ketencertificaat voor het tweede apparaat wilt maken, kopieert en plakt u dit script in de Git Bash-opdrachtprompt. Als u certificaten voor meer apparaten wilt maken, kunt u de
registration_id
variabele wijzigen die aan het begin van het script is gedeclareerd.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
Belangrijk
De extra slash die wordt opgegeven voor de onderwerpnaam (
//CN=$registration_id
) is alleen vereist om de tekenreeks te escapen met Git op Windows-platforms. Geef op Linux-platforms de onderwerpnaam op met één slash (/CN=$registration_id
).Notitie
Dit script gebruikt de registratie-id als de basisbestandsnaam voor de persoonlijke sleutel- en certificaatbestanden. Als uw registratie-id tekens bevat die ongeldige bestandsnaamtekens zijn, moet u het script dienovereenkomstig wijzigen.
Waarschuwing
De tekst voor de certificaten bevat alleen informatie over openbare sleutels.
Het apparaat moet echter ook toegang hebben tot de persoonlijke sleutel voor het apparaatcertificaat. Dit is nodig omdat het apparaat tijdens runtime verificatie moet uitvoeren met behulp van die sleutel wanneer het probeert in te richten. De gevoeligheid van deze sleutel is een van de belangrijkste redenen om op hardware gebaseerde opslag te gebruiken in een echte HSM om persoonlijke sleutels te kunnen beveiligen.
In de rest van deze zelfstudie gebruikt u de volgende bestanden:
Certificaat | Bestand | Beschrijving |
---|---|---|
basis-CA-certificaat. | certs/azure-iot-test-only.root.ca.cert.pem | Geüpload naar DPS en geverifieerd. |
tussenliggend CA-certificaat | certs/azure-iot-test-only.intermediate.cert.pem | Wordt gebruikt voor het maken van een inschrijvingsgroep in DPS. |
persoonlijke sleutel apparaat-01 | private/device-01.key.pem | Wordt door het apparaat gebruikt om het eigendom van het apparaatcertificaat te verifiëren tijdens verificatie met DPS. |
apparaat-01-certificaat voor volledige keten | certs/device-01-full-chain.cert.pem | Aangeboden door het apparaat voor verificatie en registratie bij DPS. |
persoonlijke sleutel voor apparaat-02 | private/device-02.key.pem | Wordt door het apparaat gebruikt om het eigendom van het apparaatcertificaat te verifiëren tijdens verificatie met DPS. |
apparaat-02-certificaat voor volledige keten | certs/device-02-full-chain.cert.pem | Aangeboden door het apparaat voor verificatie en registratie bij DPS. |
Eigendom van het basiscertificaat verifiëren
Als DPS tijdens de verificatie de certificaatketen van het apparaat kan valideren, moet u het eigendom van het basis-CA-certificaat uploaden en verifiëren. Voer de volgende stappen uit om het basis-CA-certificaat toe te voegen aan uw DPS-exemplaar:
Navigeer in Azure Portal naar uw Device Provisioning Service-exemplaar.
Open Certificaten in het linkermenu en selecteer Vervolgens Toevoegen om een nieuw certificaat toe te voegen.
Voer een beschrijvende weergavenaam in voor uw certificaat. Blader naar de locatie van het basis-CA-certificaatbestand
certs/azure-iot-test-only.root.ca.cert.pem
. Selecteer Uploaden.Schakel het selectievakje in om de certificaatstatus in te stellen op geverifieerd bij het uploaden.
Selecteer Opslaan.
Controleer of uw certificaat wordt weergegeven op het tabblad Certificaat met de status Geverifieerd.
Het certificaatarchief op Windows-apparaten bijwerken
Op niet-Windows-apparaten kunt u de certificaatketen vanuit de code als het certificaatarchief doorgeven.
Op Windows-apparaten moet u de handtekeningcertificaten (basis en tussenliggend) toevoegen aan een Windows-certificaatarchief. Anders worden de handtekeningcertificaten niet naar DPS getransporteerd via een beveiligd kanaal met TLS (Transport Layer Security).
Tip
Het is ook mogelijk om OpenSSL te gebruiken in plaats van een beveiligd kanaal (Schannel) met de C SDK. Zie OpenSSL gebruiken in de SDK voor meer informatie over het gebruik van OpenSSL.
Ga als volgt te werk om de handtekeningcertificaten toe te voegen aan het certificaatarchief op Windows-apparaten:
Converteer uw handtekeningcertificaten
.pfx
in uw Git Bash-terminal als volgt.Basis-CA-certificaat:
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
Tussenliggend CA-certificaat:
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
Klik met de rechtermuisknop op de knop Start van Windows en selecteer Uitvoeren. Voer certmgr.msc in en selecteer OK om certificaatbeheer te starten.
Selecteer in certificaatbeheer onder Certificaten - Huidige gebruiker vertrouwde basiscertificeringsinstanties. Selecteer vervolgens actie>alle taken>importeren in het menu.
Volg de stappen van de wizard Certificaat importeren om te importeren
root.pfx
.- Zoek op Personal Information Exchange (.pfx)
- Gebruik
1234
als wachtwoord. - Plaats het certificaat in het certificaatarchief Vertrouwde basiscertificeringsinstanties.
Herhaal deze stappen voor certificaatbeheer om te importeren
intermediate.pfx
.- Plaats het certificaat in het certificaatarchief Tussenliggende certificeringsinstanties.
Uw handtekeningcertificaten worden nu op het Windows-apparaat vertrouwd en de volledige keten kan naar DPS worden getransporteerd.
Een inschrijvingsgroep maken
Meld u aan bij Azure Portal en navigeer naar uw Device Provisioning Service-exemplaar.
Selecteer Inschrijvingen beheren in de sectie Instellingen van het navigatiemenu.
Selecteer Boven aan de pagina de optie Inschrijvingsgroep toevoegen.
Geef op het tabblad Registratie en inrichting van de pagina Inschrijvingsgroep toevoegen de volgende informatie op om de details van de inschrijvingsgroep te configureren:
Veld Beschrijving Attest Selecteer X.509-tussencertificaten als attestation-mechanisme als u tussenliggende certificaten wilt uploaden die alleen voor deze inschrijvingsgroep moeten worden gebruikt, of selecteer X.509-certificaten die zijn geüpload naar deze Device Provisioning Service als u al tussenliggende certificaten hebt geüpload. X.509-certificaatinstellingen Afhankelijk van de attestation-methode die u hebt gekozen, uploadt of selecteert u de primaire en secundaire tussencertificaten voor deze inschrijvingsgroep. Groepsnaam Geef een naam op voor de groep apparaten. De naam van de inschrijvingsgroep is een niet-hoofdlettergevoelige tekenreeks (maximaal 128 tekens lang) met alfanumerieke tekens plus de speciale tekens: '-'
,'.'
,'_'
, .':'
Het laatste teken moet alfanumeriek of streepje ('-'
) zijn.Inrichtingsstatus Schakel het selectievakje Deze inschrijving inschakelen in als u wilt dat deze inschrijvingsgroep beschikbaar is voor het inrichten van apparaten. Schakel dit selectievakje uit als u wilt dat de groep wordt uitgeschakeld. U kunt deze instelling later wijzigen. Beleid voor opnieuw inrichten Kies een beleid voor opnieuw inrichten dat aangeeft hoe DPS apparaten verwerkt die herinrichting aanvragen. Zie Beleid voor opnieuw inrichten voor meer informatie Selecteer Volgende: IoT-hubs.
Geef op het tabblad IoT Hubs van de pagina Inschrijvingsgroep toevoegen de volgende informatie op om te bepalen aan welke IoT-hubs de inschrijvingsgroep apparaten kan inrichten:
Veld Beschrijving IoT-doelhubs Selecteer een of meer gekoppelde IoT-hubs of voeg een nieuwe koppeling toe aan een IoT-hub. Zie IoT-hubs koppelen en beheren voor meer informatie over het koppelen van IoT-hubs aan uw DPS-exemplaar. Toewijzingsbeleid Als u meer dan één gekoppelde IoT-hub hebt geselecteerd, selecteert u hoe u apparaten wilt toewijzen aan de verschillende hubs. Zie Toewijzingsbeleid gebruiken voor meer informatie over toewijzingsbeleid.
Als u slechts één gekoppelde IoT-hub hebt geselecteerd, raden we u aan het gelijkmatig gewogen distributiebeleid te gebruiken.Volgende selecteren: Apparaatinstellingen
Geef op het tabblad Apparaatinstellingen van de pagina Inschrijvingsgroep toevoegen de volgende informatie op om te definiëren hoe nieuw ingerichte apparaten worden geconfigureerd:
Veld Beschrijving IoT Edge Schakel IoT Edge in op ingerichte apparaten als alle apparaten die via deze groep zijn ingericht, Azure IoT Edge uitvoeren. Schakel dit selectievakje uit als deze groep alleen voor niet-IoT Edge-apparaten is ingeschakeld. Alle apparaten in een groep zijn ingeschakeld voor IoT Edge of geen. Apparaattags Gebruik dit tekstvak om alle tags op te geven die u wilt toepassen op de apparaatdubbels van ingerichte apparaten. Gewenste eigenschappen Gebruik dit tekstvak om de gewenste eigenschappen op te geven die u wilt toepassen op de apparaatdubbels van ingerichte apparaten. Zie Apparaatdubbels begrijpen en gebruiken in IoT Hub voor meer informatie.
Selecteer Volgende: Beoordelen en maken.
Controleer op het tabblad Controleren en maken al uw waarden en selecteer Vervolgens Maken.
De apparaatinrichtingscode voorbereiden en uitvoeren
In deze sectie werkt u de voorbeeldcode bij met de informatie van uw Device Provisioning Service-exemplaar. Als een apparaat is geverifieerd, wordt het toegewezen aan een IoT-hub die is gekoppeld aan het Device Provisioning Service-exemplaar dat in deze sectie is geconfigureerd.
In deze sectie gebruikt u uw Git Bash-prompt en de Visual Studio IDE.
De code voor de apparaatinrichting configureren
In deze sectie werkt u de voorbeeldcode bij met de informatie van uw Device Provisioning Service-exemplaar.
Selecteer in Azure Portal het tabblad Overzicht voor uw Device Provisioning Service-exemplaar en noteer de waarde van het id-bereik .
Start Visual Studio en open het nieuwe oplossingsbestand dat is gemaakt in de map
cmake
die u hebt gemaakt in de hoofdmap van de Git-opslagplaats azure-iot-sdk-c. Het oplossingsbestand heeft de naamazure_iot_sdks.sln
.Navigeer in Solution Explorer voor Visual Studio naar Provision_Samples > prov_dev_client_sample > bronbestanden en open prov_dev_client_sample.c.
Zoek de constante
id_scope
op en vervang de waarde door uw Id-bereik-waarde die u eerder hebt gekopieerd. Voorbeeld:static const char* id_scope = "0ne00000A0A";
Zoek de definitie voor de functie
main()
op in hetzelfde bestand. Zorg ervoor dat dehsm_type
variabele is ingesteld opSECURE_DEVICE_TYPE_X509
en dat alle anderehsm_type
regels als commentaar zijn opgenomen. Bijvoorbeeld:SECURE_DEVICE_TYPE hsm_type; //hsm_type = SECURE_DEVICE_TYPE_TPM; hsm_type = SECURE_DEVICE_TYPE_X509; //hsm_type = SECURE_DEVICE_TYPE_SYMMETRIC_KEY;
Sla uw wijzigingen op.
Klik met de rechtermuisknop op het prov_dev_client_sample project en selecteer Instellen als opstartproject.
De stub-code voor de aangepaste HSM configureren
De specifieke kenmerken van interactie met de daadwerkelijke beveiligde opslag op basis van hardware variëren, afhankelijk van de hardware van het apparaat. De certificaatketens die worden gebruikt door de gesimuleerde apparaten in deze zelfstudie, worden vastgelegd in de aangepaste HSM-stubcode. In de praktijk zou de certificaatketen worden opgeslagen in de daadwerkelijke HSM-hardware om een betere beveiliging te kunnen bieden voor gevoelige informatie. Methoden die vergelijkbaar zijn met de stubmethoden die in dit voorbeeld worden gebruikt, worden vervolgens geïmplementeerd om de geheimen van die hardwaregebaseerde opslag te lezen.
Hoewel HSM-hardware niet is vereist, is het raadzaam om gevoelige informatie, zoals de persoonlijke sleutel van het certificaat, te beveiligen. Als een werkelijke HSM werd aangeroepen door het voorbeeld, zou de persoonlijke sleutel niet aanwezig zijn in de broncode. Als u de sleutel in de broncode hebt, wordt de sleutel beschikbaar gemaakt voor iedereen die de code kan bekijken. Dit wordt alleen gedaan in deze zelfstudie om u te helpen met leren.
De aangepaste HSM-stubcode bijwerken om de identiteit van het apparaat met id device-01
te simuleren:
Navigeer in Solution Explorer voor Visual Studio naar Provision_Samples > custom_hsm_example > bronbestanden en open custom_hsm_example.c.
Werk de tekenreekswaarde van de tekenreeksconstante
COMMON_NAME
bij met de algemene naam die u hebt gebruikt bij het genereren van het apparaatcertificaat.static const char* const COMMON_NAME = "device-01";
Voer in uw Git Bash-terminal de volgende opdracht uit om de tekenreeksconstante voor uw apparaatcertificaat te genereren:
sed -e 's/^/"/;$ !s/$/""\\n"/;$ s/$/"/' ./certs/device-01-full-chain.cert.pem
Kopieer de uitvoer van deze opdracht.
Werk de tekenreekswaarde van de
CERTIFICATE
constante tekenreeks bij met behulp van de certificaatketen die u hebt opgeslagen in ./certs/device-01-full-chain.cert.pem nadat u uw certificaten hebt gegenereerd. Gebruik de tekst van het uitvoercertificaat uit de vorige stap voor de constante waarde.De syntaxis van certificaattekst moet overeenkomen met het volgende patroon zonder extra spaties of parsering uitgevoerd door 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-----";
Voer in Git Bash de volgende opdracht uit om de tekenreeksconstante voor de persoonlijke sleutel van uw apparaat te genereren:
sed -e 's/^/"/;$ !s/$/""\\n"/;$ s/$/"/' ./private/device-01.key.pem
Kopieer de uitvoer van deze opdracht.
Werk de tekenreekswaarde van de
PRIVATE_KEY
constante bij met de persoonlijke sleutel voor uw apparaatcertificaat. Gebruik de uitvoertekst van de persoonlijke sleutel uit de vorige stap voor de constante waarde.De syntaxis van de tekst van de persoonlijke sleutel moet overeenkomen met het volgende patroon zonder extra spaties of parsering uitgevoerd door Visual Studio.
static const char* const PRIVATE_KEY = "-----BEGIN RSA PRIVATE KEY-----\n" "MIIJJwIBAAKCAgEAtjvKQjIhp0EE1PoADL1rfF/W6v4vlAzOSifKSQsaPeebqg8U\n" ... "X7fi9OZ26QpnkS5QjjPTYI/wwn0J9YAwNfKSlNeXTJDfJ+KpjXBcvaLxeBQbQhij\n" "-----END RSA PRIVATE KEY-----";
Sla uw wijzigingen op.
Klik met de rechtermuisknop op het custom_hsm_example project en selecteer Build.
Belangrijk
U moet het custom_hsm_example project bouwen voordat u de rest van de oplossing in de volgende sectie bouwt.
De voorbeeldtoepassing uitvoeren
Selecteer in het menu van Visual Studio de optie Debug>Start without debugging om de oplossing uit te voeren. Wanneer wordt gevraagd het project opnieuw te bouwen, selecteert u Ja om het project opnieuw te bouwen voordat het wordt uitgevoerd.
De volgende uitvoer is een voorbeeld van een gesimuleerd apparaat
device-01
dat is opgestart en verbinding maakt met de inrichtingsservice. Het apparaat is toegewezen aan een IoT-hub en is geregistreerd: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:
Herhaal de stappen in De aangepaste HSM-stubcode configureren voor uw tweede apparaat (
device-02
) en voer het voorbeeld opnieuw uit. Gebruik de volgende waarden voor dat apparaat:Beschrijving Waarde Algemene naam "device-02"
Volledige certificaatketen Genereer de tekst met . /certs/device-02-full-chain.cert.pem Persoonlijke sleutel De tekst genereren met . /private/device-02.key.pem De volgende uitvoer is een voorbeeld van het opstarten van een gesimuleerd apparaat
device-02
en het maken van verbinding met de inrichtingsservice. Het apparaat is toegewezen aan een IoT-hub en is geregistreerd: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:
De C#-voorbeeldcode is ingesteld voor het gebruik van X.509-certificaten die zijn opgeslagen in een met een wachtwoord beveiligd PKCS#12-bestand (.pfx). De volledige ketencertificaten die u eerder hebt gemaakt, hebben de PEM-indeling. Als u de volledige ketencertificaten wilt converteren naar PKCS#12-indeling, voert u de volgende opdrachten in uw Git Bash-prompt in vanuit de map waarin u eerder de OpenSSL-opdrachten hebt uitgevoerd.
apparaat-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
device-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
In de rest van deze sectie gebruikt u de Windows-opdrachtprompt.
Selecteer in Azure Portal het tabblad Overzicht voor Device Provisioning Service.
Kopieer de waarde van het id-bereik .
Ga in de Windows-opdrachtprompt naar de map X509Sample . Deze map bevindt zich in de SDK-opslagplaats die u in een eerdere stap hebt gekloond: .\azure-iot-sdk-csharp\provisioning\device\samples\getting started\X509Sample.
Voer de volgende opdracht in om het X.509-voorbeeld van het inrichten van apparaten te bouwen en uit te voeren. Vervang
<id-scope>
door het id-bereik dat u hebt gekopieerd uit Azure Portal. Vervang<your-certificate-folder>
door het pad naar de map waarin u uw OpenSSL-opdrachten hebt uitgevoerd.dotnet run -- -s <id-scope> -c <your-certificate-folder>\certs\device-01-full-chain.cert.pfx -p 1234
Het apparaat maakt verbinding met DPS en wordt toegewezen aan een IoT-hub. Vervolgens verzendt het apparaat een telemetriebericht naar de IoT-hub. Als het goed is, ziet u uitvoer die lijkt op het volgende voorbeeld:
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.
Notitie
Als u geen certificaat en wachtwoord opgeeft op de opdrachtregel, wordt het certificaatbestand standaard ingesteld op ./certificate.pfx en wordt u om uw wachtwoord gevraagd.
Aanvullende parameters kunnen worden doorgegeven om het TransportType (-t) en het GlobalDeviceEndpoint (-g) te wijzigen. Voor een volledige lijst met parameterstype
dotnet run -- --help
.Als u uw tweede apparaat wilt registreren, voert u het voorbeeld opnieuw uit met het volledige ketencertificaat.
dotnet run -- -s <id-scope> -c <your-certificate-folder>\certs\device-02-full-chain.cert.pfx -p 1234
Gebruik in de volgende stappen de Windows-opdrachtprompt.
Selecteer in Azure Portal het tabblad Overzicht voor Device Provisioning Service.
Kopieer de waarde van het id-bereik .
Ga in de Windows-opdrachtprompt naar de voorbeeldmap en installeer de pakketten die nodig zijn voor het voorbeeld. Het weergegeven pad is relatief ten opzichte van de locatie waar u de SDK hebt gekloond.
cd .\azure-iot-sdk-node\provisioning\device\samples npm install
Open register_x509.js in de map provisioning\device\samples en controleer de code.
Het voorbeeld wordt standaard ingesteld op MQTT als transportprotocol. Als u een ander protocol wilt gebruiken, markeert u de volgende regel en geeft u commentaar op de regel voor het juiste protocol.
var ProvisioningTransport = require('azure-iot-provisioning-device-mqtt').Mqtt;
In het voorbeeld worden vijf omgevingsvariabelen gebruikt om een IoT-apparaat te verifiëren en in te richten met DPS. Deze omgevingsvariabelen zijn:
Variabelenaam Beschrijving PROVISIONING_HOST
Het eindpunt dat moet worden gebruikt om verbinding te maken met uw DPS-exemplaar. Gebruik voor deze zelfstudie het globale eindpunt. global.azure-devices-provisioning.net
PROVISIONING_IDSCOPE
Het id-bereik voor uw DPS-exemplaar. PROVISIONING_REGISTRATION_ID
De registratie-id voor uw apparaat. Deze moet overeenkomen met de algemene naam van het onderwerp in het apparaatcertificaat. CERTIFICATE_FILE
Het pad naar het certificaatbestand voor de volledige keten van uw apparaat. KEY_FILE
Het pad naar het persoonlijke sleutelbestand van het apparaatcertificaat. De
ProvisioningDeviceClient.register()
methode probeert uw apparaat te registreren.Voeg omgevingsvariabelen toe voor het globale apparaateindpunt en id-bereik. Vervang
<id-scope>
door de waarde die u hebt gekopieerd uit Azure Portal.set PROVISIONING_HOST=global.azure-devices-provisioning.net set PROVISIONING_IDSCOPE=<id-scope>
Stel de omgevingsvariabele in voor de apparaatregistratie-id. De registratie-id voor het IoT-apparaat moet overeenkomen met de algemene naam van het onderwerp op het apparaatcertificaat. Voor deze zelfstudie is device-01 zowel de onderwerpnaam als de registratie-id voor het apparaat.
set PROVISIONING_REGISTRATION_ID=device-01
Stel de omgevingsvariabelen in voor het certificaat voor volledige keten en bestanden met persoonlijke sleutel van het apparaat die u eerder hebt gegenereerd. Vervang
<your-certificate-folder>
door het pad naar de map waarin u uw OpenSSL-opdrachten hebt uitgevoerd.set CERTIFICATE_FILE=<your-certificate-folder>\certs\device-01-full-chain.cert.pem set KEY_FILE=<your-certificate-folder>\private\device-01.key.pem
Voer het voorbeeld uit en controleer of het apparaat is ingericht.
node register_x509.js
Als het goed is, ziet u uitvoer die lijkt op het volgende voorbeeld:
registration succeeded assigned hub=contoso-hub-2.azure-devices.net deviceId=device-01 Client connected send status: MessageEnqueued
Werk de omgevingsvariabelen voor uw tweede apparaat (
device-02
) bij volgens de volgende tabel en voer het voorbeeld opnieuw uit.Omgevingsvariabele Weergegeven als PROVISIONING_REGISTRATION_ID device-02
CERTIFICATE_FILE <your-certificate-folder>\certs\device-02-full-chain.cert.pem KEY_FILE <your-certificate-folder>\private\device-02.key.pem
Gebruik in de volgende stappen de Windows-opdrachtprompt.
Selecteer in Azure Portal het tabblad Overzicht voor Device Provisioning Service.
Kopieer het id-bereik.
Ga in de Windows-opdrachtprompt naar de map van het provision_x509.py voorbeeld. Het weergegeven pad is relatief ten opzichte van de locatie waar u de SDK hebt gekloond.
cd .\azure-iot-sdk-python\samples\async-hub-scenarios
In dit voorbeeld worden zes omgevingsvariabelen gebruikt om een IoT-apparaat te verifiëren en in te richten met DPS. Deze omgevingsvariabelen zijn:
Variabelenaam Beschrijving PROVISIONING_HOST
Het eindpunt dat moet worden gebruikt om verbinding te maken met uw DPS-exemplaar. Gebruik voor deze zelfstudie het globale eindpunt. global.azure-devices-provisioning.net
PROVISIONING_IDSCOPE
Het id-bereik voor uw DPS-exemplaar. DPS_X509_REGISTRATION_ID
De registratie-id voor uw apparaat. Deze moet overeenkomen met de algemene naam van het onderwerp in het apparaatcertificaat. X509_CERT_FILE
Het pad naar het certificaatbestand voor de volledige keten van uw apparaat. X509_KEY_FILE
Het pad naar het persoonlijke sleutelbestand van het apparaatcertificaat. PASS_PHRASE
De wachtwoordzin die wordt gebruikt om het bestand met de persoonlijke sleutel te versleutelen (indien gebruikt). Niet nodig voor deze zelfstudie. Voeg de omgevingsvariabelen toe voor het globale apparaateindpunt en het id-bereik. Gebruik voor de bereikvariabele ID de waarde die u hebt gekopieerd uit Azure Portal.
set PROVISIONING_HOST=global.azure-devices-provisioning.net set PROVISIONING_IDSCOPE=<ID scope for your DPS resource>
Stel de omgevingsvariabele in voor de apparaatregistratie-id. De registratie-id voor het IoT-apparaat moet overeenkomen met de algemene naam van het onderwerp op het apparaatcertificaat. Voor deze zelfstudie is device-01 zowel de onderwerpnaam als de registratie-id voor het apparaat.
set DPS_X509_REGISTRATION_ID=device-01
Stel de omgevingsvariabelen in voor het certificaat voor volledige keten en bestanden met persoonlijke sleutel van het apparaat die u eerder hebt gegenereerd. Vervang
<your-certificate-folder>
door het pad naar de map waarin u uw OpenSSL-opdrachten hebt uitgevoerd.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
Bekijk de code voor provision_x509.py. Als u geen Python-versie 3.7 of hoger gebruikt, moet u de hier genoemde codewijziging doorvoeren om deze te vervangen
asyncio.run(main())
.Voet het voorbeeld uit. Het voorbeeld maakt verbinding met DPS, waarmee het apparaat wordt ingericht voor een IoT-hub. Nadat het apparaat is ingericht, verzendt het voorbeeld enkele testberichten naar de IoT-hub.
python provision_x509.py
Als het goed is, ziet u uitvoer die lijkt op het volgende voorbeeld:
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
Werk de omgevingsvariabelen voor uw tweede apparaat (
device-02
) bij volgens de volgende tabel en voer het voorbeeld opnieuw uit.Omgevingsvariabele Weergegeven als DPS_X509_REGISTRATION_ID device-02
X509_CERT_FILE <your-certificate-folder>\certs\device-02-full-chain.cert.pem X509_KEY_FILE <your-certificate-folder>\private\device-02.key.pem
In de volgende stappen gebruikt u zowel uw Windows-opdrachtprompt als uw Git Bash-prompt.
Selecteer in Azure Portal het tabblad Overzicht voor Device Provisioning Service.
Kopieer het id-bereik.
Navigeer in de Windows-opdrachtprompt naar de voorbeeldprojectmap. Het weergegeven pad is relatief ten opzichte van de locatie waar u de SDK hebt gekloond
cd .\azure-iot-sdk-java\provisioning\provisioning-device-client-samples\provisioning-X509-sample
Voer de inrichtingsservice en X.509-identiteitsgegevens in de voorbeeldcode in. Dit wordt gebruikt tijdens het inrichten, voor attestation van het gesimuleerde apparaat, vóór de apparaatregistratie.
Open het bestand
.\src\main\java\samples\com\microsoft\azure\sdk\iot\ProvisioningX509Sample.java
in uw favoriete editor.Werk de volgende waarden bij. Gebruik
idScope
voor het id-bereik dat u eerder hebt gekopieerd. Gebruik het globale apparaateindpunt voor het globale eindpunt. Dit eindpunt is hetzelfde voor elk DPS-exemplaar.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]";
Het voorbeeld maakt standaard gebruik van HTTPS als transportprotocol. Als u het protocol wilt wijzigen, markeert u de volgende regel als commentaar en geeft u commentaar op de regel voor het protocol dat u wilt gebruiken.
private static final ProvisioningDeviceClientTransportProtocol PROVISIONING_DEVICE_CLIENT_TRANSPORT_PROTOCOL = ProvisioningDeviceClientTransportProtocol.HTTPS;
Werk de waarde van de
leafPublicPem
constante tekenreeks bij met de waarde van het apparaatcertificaat device-01.cert.pem.De syntaxis van certificaattekst moet overeenkomen met het volgende patroon zonder extra spaties of tekens.
private static final String leafPublicPem = "-----BEGIN CERTIFICATE-----\n" "MIIFOjCCAyKgAwIBAgIJAPzMa6s7mj7+MA0GCSqGSIb3DQEBCwUAMCoxKDAmBgNV\n" ... "MDMwWhcNMjAxMTIyMjEzMDMwWjAqMSgwJgYDVQQDDB9BenVyZSBJb1QgSHViIENB\n" "-----END CERTIFICATE-----";
Het handmatig bijwerken van deze tekenreekswaarde kan gevoelig zijn voor fouten. Als u de juiste syntaxis wilt genereren, kunt u de volgende opdracht kopiëren en plakken in uw Git Bash-prompt en drukt u op Enter. Met deze opdracht wordt de syntaxis voor de
leafPublicPem
constante tekenreekswaarde gegenereerd en naar de uitvoer geschreven.sed 's/^/"/;$ !s/$/\\n" +/;$ s/$/"/' ./certs/device-01.cert.pem
Kopieer en plak de tekst van het uitvoercertificaat voor de constante waarde.
Werk de tekenreekswaarde van de
leafPrivateKey
constante bij met de niet-versleutelde persoonlijke sleutel voor uw apparaatcertificaat, niet-versleutelde-device-key.pem.De syntaxis van de persoonlijke sleuteltekst moet overeenkomen met het volgende patroon zonder extra spaties of tekens.
private static final String leafPrivateKey = "-----BEGIN PRIVATE KEY-----\n" + "MIIJJwIBAAKCAgEAtjvKQjIhp0EE1PoADL1rfF/W6v4vlAzOSifKSQsaPeebqg8U\n" + ... "X7fi9OZ26QpnkS5QjjPTYI/wwn0J9YAwNfKSlNeXTJDfJ+KpjXBcvaLxeBQbQhij\n" + "-----END PRIVATE KEY-----";
Als u de juiste syntaxis wilt genereren, kunt u de volgende opdracht kopiëren en plakken in uw Git Bash-prompt en drukt u op Enter. Met deze opdracht wordt de syntaxis voor de
leafPrivateKey
constante tekenreekswaarde gegenereerd en naar de uitvoer geschreven.sed 's/^/"/;$ !s/$/\\n" +/;$ s/$/"/' ./private/device-01.key.pem
Kopieer en plak de tekst van de persoonlijke sleutel van de uitvoer voor de constante waarde.
Voeg een
rootPublicPem
constante tekenreeks toe met de waarde van uw basis-CA-certificaat, azure-iot-test-only.root.ca.cert.pem. U kunt deze net na deleafPrivateKey
constante toevoegen.De syntaxis van certificaattekst moet overeenkomen met het volgende patroon zonder extra spaties of tekens.
private static final String rootPublicPem = "-----BEGIN CERTIFICATE-----\n" "MIIFOjCCAyKgAwIBAgIJAPzMa6s7mj7+MA0GCSqGSIb3DQEBCwUAMCoxKDAmBgNV\n" ... "MDMwWhcNMjAxMTIyMjEzMDMwWjAqMSgwJgYDVQQDDB9BenVyZSBJb1QgSHViIENB\n" "-----END CERTIFICATE-----";
Als u de juiste syntaxis wilt genereren, kunt u de volgende opdracht kopiëren en plakken in uw Git Bash-prompt en drukt u op Enter. Met deze opdracht wordt de syntaxis voor de
rootPublicPem
constante tekenreekswaarde gegenereerd en naar de uitvoer geschreven.sed 's/^/"/;$ !s/$/\\n" +/;$ s/$/"/' ./certs/azure-iot-test-only.root.ca.cert.pem
Kopieer en plak de tekst van het uitvoercertificaat voor de constante waarde.
Voeg een
intermediatePublicPem
constante tekenreeks toe met de waarde van uw tussenliggende CA-certificaat, azure-iot-test-only.intermediate.cert.pem. U kunt deze net na de vorige constante toevoegen.De syntaxis van certificaattekst moet overeenkomen met het volgende patroon zonder extra spaties of tekens.
private static final String intermediatePublicPem = "-----BEGIN CERTIFICATE-----\n" "MIIFOjCCAyKgAwIBAgIJAPzMa6s7mj7+MA0GCSqGSIb3DQEBCwUAMCoxKDAmBgNV\n" ... "MDMwWhcNMjAxMTIyMjEzMDMwWjAqMSgwJgYDVQQDDB9BenVyZSBJb1QgSHViIENB\n" "-----END CERTIFICATE-----";
Als u de juiste syntaxis wilt genereren, kunt u de volgende opdracht kopiëren en plakken in uw Git Bash-prompt en drukt u op Enter. Met deze opdracht wordt de syntaxis voor de
intermediatePublicPem
constante tekenreekswaarde gegenereerd en naar de uitvoer geschreven.sed 's/^/"/;$ !s/$/\\n" +/;$ s/$/"/' ./certs/azure-iot-test-only.intermediate.cert.pem
Kopieer en plak de tekst van het uitvoercertificaat voor de constante waarde.
Zoek de volgende regels in de
main
methode.// For group enrollment uncomment this line //signerCertificatePemList.add("<Your Signer/intermediate Certificate Here>");
Voeg deze twee regels direct eronder toe om uw tussenliggende en basis-CA-certificaten toe te voegen aan de ondertekeningsketen. Uw ondertekeningsketen moet de hele certificaatketen bevatten tot en met een certificaat dat u hebt geverifieerd met DPS.
signerCertificatePemList.add(intermediatePublicPem); signerCertificatePemList.add(rootPublicPem);
Notitie
De volgorde waarop de handtekeningcertificaten worden toegevoegd, is belangrijk. Het voorbeeld mislukt als het is gewijzigd.
Sla uw wijzigingen op.
Bouw het voorbeeld en ga vervolgens naar de
target
map.mvn clean install cd target
De build-uitvoer .jar bestand in de
target
map met de volgende bestandsindeling:provisioning-x509-sample-{version}-with-deps.jar
; bijvoorbeeld:provisioning-x509-sample-1.8.1-with-deps.jar
. Voer het .jar-bestand uit. Mogelijk moet u de versie in de volgende opdracht vervangen.java -jar ./provisioning-x509-sample-1.8.1-with-deps.jar
Het voorbeeld maakt verbinding met DPS, die het apparaat inricht op een IoT-hub. Nadat het apparaat is ingericht, verzendt het voorbeeld enkele testberichten naar de IoT-hub.
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 [aaaa0000-bb11-2222-33cc-444444dddddd] Message Id [aaaa0000-bb11-2222-33cc-444444dddddd] ) 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 [aaaa0000-bb11-2222-33cc-444444dddddd] Message Id [aaaa0000-bb11-2222-33cc-444444dddddd] ) 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 [aaaa0000-bb11-2222-33cc-444444dddddd] Message Id [aaaa0000-bb11-2222-33cc-444444dddddd] ) 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 [aaaa0000-bb11-2222-33cc-444444dddddd] Message Id [aaaa0000-bb11-2222-33cc-444444dddddd] ) with status OK Message sent!
Werk de constanten voor uw tweede apparaat (
device-02
) bij volgens de volgende tabel, bouw het opnieuw en voer het voorbeeld opnieuw uit.Constante Te gebruiken bestand leafPublicPem
./certs/device-02.cert.pem leafPrivateKey
./private/device-02.key.pem
De registratie van de apparaatinrichting bevestigen
Bekijk de registratierecords van de inschrijvingsgroep om de registratiegegevens voor uw apparaten te bekijken:
Ga in Azure Portal naar uw Device Provisioning Service-exemplaar.
Selecteer Inschrijvingen beheren in het menu Instellingen.
Selecteer Inschrijvingsgroepen. De X.509-inschrijvingsgroepvermelding die u eerder hebt gemaakt, moet worden weergegeven in de lijst.
Selecteer de inschrijvingsvermelding. Selecteer vervolgens Details naast de registratiestatus om de apparaten te zien die zijn geregistreerd via de inschrijvingsgroep. De IoT-hub waaraan elk van uw apparaten is toegewezen, de apparaat-id's en de datums en tijden waarop ze zijn geregistreerd, worden weergegeven in de lijst.
U kunt een van de apparaten selecteren om meer details voor dat apparaat weer te geven.
De apparaten op uw IoT-hub controleren:
Ga in Azure Portal naar de IoT-hub waaraan uw apparaat is toegewezen.
Selecteer Apparaten in het menu Apparaatbeheer.
Als uw apparaten zijn ingericht, moeten de apparaat-id's, apparaat-01 en apparaat-02 worden weergegeven in de lijst, waarbij status is ingesteld als ingeschakeld. Als u uw apparaten niet ziet, selecteert u Vernieuwen.
Resources opschonen
Wanneer u klaar bent met het testen en verkennen van dit voorbeeld van een apparaatclient, gebruikt u de volgende stappen om alle resources te verwijderen die in deze zelfstudie zijn gemaakt.
- Sluit het uitvoervenster van het voorbeeld van de apparaatclient op de computer.
Uw inschrijvingsgroep verwijderen
Selecteer Alle resources in het linkermenu in Azure Portal.
Selecteer uw DPS-exemplaar.
Selecteer Inschrijvingen beheren in het menu Instellingen.
Selecteer het tabblad Inschrijvingsgroepen .
Selecteer de inschrijvingsgroep die u voor deze zelfstudie hebt gebruikt.
Selecteer Details naast de registratiestatus op de pagina Details van de inschrijving. Schakel vervolgens het selectievakje in naast de kolomkop Apparaat-id om alle registratierecords voor de inschrijvingsgroep te selecteren. Selecteer Verwijderen boven aan de pagina om de registratierecords te verwijderen.
Belangrijk
Als u een registratiegroep verwijdert, worden de bijbehorende registratierecords niet verwijderd. Deze zwevende records tellen mee met het registratiequotum voor het DPS-exemplaar. Daarom is het raadzaam om alle registratierecords te verwijderen die zijn gekoppeld aan een inschrijvingsgroep voordat u de inschrijvingsgroep zelf verwijdert.
Ga terug naar de pagina Inschrijvingen beheren en controleer of het tabblad Inschrijvingsgroepen is geselecteerd.
Schakel het selectievakje in naast de groepsnaam van de inschrijvingsgroep die u voor deze zelfstudie hebt gebruikt.
Selecteer Verwijderen bovenaan de pagina.
Geregistreerde CA-certificaten verwijderen uit DPS
- Selecteer Certificaten in het linkermenu van uw DPS-exemplaar. Voor elk certificaat dat u in deze zelfstudie hebt geüpload en geverifieerd, selecteert u het certificaat en selecteert u Verwijderen en bevestigt u uw keuze om het te verwijderen.
Apparaatregistraties verwijderen uit IoT Hub
Selecteer Alle resources in het linkermenu in Azure Portal.
Selecteer uw IoT-hub.
Selecteer IoT-apparaten in het menu Explorers.
Schakel het selectievakje in naast de apparaat-id van de apparaten die u in deze zelfstudie hebt geregistreerd. Bijvoorbeeld apparaat-01 en apparaat-02.
Selecteer Verwijderen bovenaan de pagina.
Volgende stappen
In deze zelfstudie hebt u meerdere X.509-apparaten ingericht voor uw IoT-hub met behulp van een inschrijvingsgroep. Hierna leert u hoe u IoT-apparaten in meerdere hubs inricht.