Samouczek: aprowizuj wiele urządzeń X.509 przy użyciu grup rejestracji
Z tego samouczka dowiesz się, jak aprowizować grupy urządzeń IoT, które używają certyfikatów X.509 do uwierzytelniania. Przykładowy kod urządzenia z zestawu Azure IoT SDK zostanie wykonany na maszynie dewelopera w celu symulowania aprowizacji urządzeń X.509. Na rzeczywistych urządzeniach kod urządzenia zostanie wdrożony i uruchomiony z urządzenia IoT.
Usługa Azure IoT Hub Device Provisioning obsługuje dwa typy rejestracji na potrzeby aprowizacji urządzeń:
- Grupy rejestracji: służą do rejestrowania wielu pokrewnych urządzeń. W tym samouczku przedstawiono aprowizowanie przy użyciu grup rejestracji.
- Rejestracje indywidualne: służy do rejestrowania pojedynczego urządzenia.
Usługa Azure IoT Hub Device Provisioning obsługuje trzy formy uwierzytelniania na potrzeby aprowizacji urządzeń:
- Certyfikaty X.509 — w tym samouczku przedstawiono zaświadczenie certyfikatu X.509
- Moduł TPM (Trusted Platform Module)
- Klucze symetryczne
W scenariuszach produkcyjnych sprzętowy moduł zabezpieczeń (HSM) jest używany do bezpiecznego, sprzętowego przechowywania wpisów tajnych urządzeń. Moduł HSM może być używany z kluczem symetrycznym, certyfikatem X.509 lub zaświadczeniem modułu TPM w celu zapewnienia bezpiecznego magazynu dla wpisów tajnych. Zalecane jest przechowywanie wpisów tajnych urządzeń opartych na sprzęcie w celu ochrony poufnych informacji, takich jak klucz prywatny certyfikatu urządzenia.
W tym samouczku wykonasz następujące cele:
- Utwórz łańcuch zaufania certyfikatów, aby zorganizować zestaw urządzeń przy użyciu certyfikatów X.509.
- Utwórz nową rejestrację grupową korzystającą z łańcucha certyfikatów.
- Konfigurowanie środowiska projektowego.
- Aprowizuj urządzenia przy użyciu łańcucha certyfikatów przy użyciu przykładowego kodu w zestawie SDK urządzenia Usługi Azure IoT.
Wymagania wstępne
Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto.
Wykonaj kroki opisane w temacie Konfigurowanie usługi IoT Hub Device Provisioning Przy użyciu witryny Azure Portal.
Poniższe wymagania wstępne dotyczą środowiska deweloperskiego systemu Windows używanego do symulowania urządzeń. W przypadku systemu Linux lub macOS zapoznaj się z odpowiednią sekcją w temacie Przygotowywanie środowiska projektowego w dokumentacji zestawu SDK.
Zainstaluj program Visual Studio 2022 z włączonym obciążeniem "Programowanie aplikacji klasycznych z językiem C++". Obsługiwane są również programy Visual Studio 2015, Visual Studio 2017 i Visual Studio 19.
Zainstaluj najnowszy system kompilacji narzędzia CMake. Upewnij się, że zaznaczono opcję, która dodaje plik wykonywalny narzędzia CMake do ścieżki.
Ważne
Przed rozpoczęciem
CMake
instalacji upewnij się, że na maszynie są zainstalowane wymagania wstępne programu Visual Studio (Visual Studio i pakiet roboczy Programowanie aplikacji klasycznych z językiem C++). Gdy wymagania wstępne zostaną spełnione, a pobrane pliki zweryfikowane, zainstaluj system kompilacji CMake. Należy również pamiętać, że starsze wersje systemu kompilacji CMake nie mogą wygenerować pliku rozwiązania używanego w tym samouczku. Upewnij się, że używasz najnowszej wersji narzędzia CMake.
Poniższe wymagania wstępne dotyczą środowiska deweloperskiego systemu Windows. W przypadku systemu Linux lub macOS zapoznaj się z odpowiednią sekcją w temacie Przygotowywanie środowiska projektowego w dokumentacji zestawu SDK.
Zainstaluj zestaw .NET SDK 6.0 lub nowszy na maszynie z systemem Windows. Aby sprawdzić wersję, możesz użyć następującego polecenia.
dotnet --info
Poniższe wymagania wstępne dotyczą środowiska deweloperskiego systemu Windows. W przypadku systemu Linux lub macOS zapoznaj się z odpowiednią sekcją w temacie Przygotowywanie środowiska projektowego w dokumentacji zestawu SDK.
- Zainstaluj Node.js w wersji 4.0 lub nowszej na maszynie.
Poniższe wymagania wstępne dotyczą środowiska deweloperskiego systemu Windows.
- Środowisko Python w wersji 3.6 lub nowszej na maszynie.
Poniższe wymagania wstępne dotyczą środowiska deweloperskiego systemu Windows. W przypadku systemu Linux lub macOS zapoznaj się z odpowiednią sekcją w temacie Przygotowywanie środowiska projektowego w dokumentacji zestawu SDK.
Zainstaluj zestaw Java SE Development Kit 8 lub nowszy na maszynie.
Pobierz i zainstaluj pakiet Maven.
Zainstaluj najnowszą wersję usługi Git. Upewnij się, że usługa Git jest dodawana do zmiennych środowiskowych dostępnych w oknie polecenia.
Upewnij się, że na maszynie jest zainstalowany program OpenSSL . W systemie Windows instalacja narzędzia Git obejmuje instalację programu OpenSSL. Dostęp do protokołu OpenSSL można uzyskać z poziomu wiersza polecenia powłoki Git Bash. Aby sprawdzić, czy program OpenSSL jest zainstalowany, otwórz wiersz polecenia powłoki Git Bash i wprowadź polecenie
openssl version
.Uwaga
Jeśli nie znasz programu OpenSSL i nie masz go już zainstalowanego na maszynie z systemem Windows, zalecamy używanie biblioteki OpenSSL z poziomu wiersza polecenia powłoki Git Bash. Alternatywnie możesz pobrać kod źródłowy i skompilować bibliotekę OpenSSL. Jeśli zdecydujesz się skompilować lub pobrać plik OpenSSL, upewnij się, że plik binarny OpenSSL jest dostępny w ścieżce i że
OPENSSL_CNF
zmienna środowiskowa jest ustawiona na ścieżkę pliku openssl.cnf .
przygotowywanie środowiska programistycznego
W tej sekcji przygotujesz środowisko programistyczne używane do kompilowania zestawu SDK języka C usługi Azure IoT. Zestaw SDK zawiera przykładowy kod i narzędzia używane przez urządzenia aprowizowania za pomocą usługi DPS.
W przeglądarce internetowej przejdź do strony Wydanie zestawu AZURE IoT C SDK.
Skopiuj nazwę tagu dla najnowszej wersji zestawu AZURE IoT C SDK, na przykład:
lts_03_2024
.Otwórz wiersz polecenia systemu Windows i uruchom następujące polecenia, aby sklonować najnowszą wersję zestawu AZURE IoT Device SDK for C GitHub. Zastąp
<release-tag>
element tagiem skopiowanymi w poprzednim kroku.git clone -b <release-tag> https://github.com/Azure/azure-iot-sdk-c.git cd azure-iot-sdk-c git submodule update --init
Wykonanie tej operacji może potrwać kilka minut.
Po zakończeniu operacji uruchom następujące polecenia z
azure-iot-sdk-c
katalogu:mkdir cmake cd cmake
Przykładowy kod używa certyfikatu X.509 w celu dostarczenia poświadczeń za pośrednictwem uwierzytelniania X.509. Uruchom następujące polecenie, aby skompilować wersję zestawu SDK specyficzną dla platformy programistycznej, która obejmuje klienta aprowizacji urządzeń. W katalogu jest generowane
cmake
rozwiązanie programu Visual Studio dla symulowanego urządzenia.Zastąp ciąg
<path
ścieżką bezwzględną do sklonowanego zestawu SDK języka C.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 ..
Napiwek
Jeśli
cmake
nie znajdziesz kompilatora języka C++, podczas uruchamiania powyższego polecenia mogą wystąpić błędy kompilacji. W takim przypadku spróbuj uruchomić polecenie w wierszu polecenia programu Visual Studio.Po pomyślnym zakończeniu kompilacji ostatnie kilka wierszy wyjściowych będzie wyglądać podobnie do następujących danych wyjściowych:
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
Otwórz wiersz polecenia systemu Windows i sklonuj repozytorium GitHub zestawu AZURE IoT SDK dla języka C# , używając następującego polecenia:
git clone https://github.com/Azure/azure-iot-sdk-csharp.git
Otwórz wiersz polecenia systemu Windows i sklonuj zestaw SDK usługi Azure IoT dla repozytorium Node.js GitHub przy użyciu następującego polecenia:
git clone https://github.com/Azure/azure-iot-sdk-node.git
Otwórz wiersz polecenia systemu Windows i sklonuj repozytorium Azure IoT Device SDK for Python GitHub przy użyciu następującego polecenia:
git clone -b v2 https://github.com/Azure/azure-iot-sdk-python.git --recursive
Uwaga
Przykłady używane w tym samouczku znajdują się w gałęzi w wersji 2 repozytorium azure-iot-sdk-python. Wersja 3 zestawu SDK języka Python jest dostępna do użycia w wersji beta.
Otwórz wiersz polecenia systemu Windows i sklonuj repozytorium GitHub przykłady usługi Azure IoT dla języka Java przy użyciu następującego polecenia:
git clone https://github.com/Azure/azure-iot-sdk-java.git --recursive
Przejdź do katalogu głównego
azure-iot-sdk-java
i skompiluj projekt, aby pobrać wszystkie potrzebne pakiety.cd azure-iot-sdk-java mvn install -DskipTests=true
Tworzenie łańcucha certyfikatów X.509
W tej sekcji wygenerujesz łańcuch certyfikatów X.509 z trzech certyfikatów na potrzeby testowania każdego urządzenia w ramach tego samouczka. Certyfikaty mają następującą hierarchię.
Certyfikat główny Przekazujesz i weryfikujesz certyfikat główny za pomocą usługi DPS. Ta weryfikacja umożliwia usłudze DPS ufanie temu certyfikatowi i weryfikowanie podpisanych przez niego certyfikatów.
Certyfikat pośredni: często używać certyfikatów pośrednich do grupowania urządzeń logicznie według linii produktów, podziałów firmy lub innych kryteriów. W tym samouczku jest używany łańcuch certyfikatów z jednym certyfikatem pośrednim, ale w scenariuszu produkcyjnym może istnieć kilka. Certyfikat pośredni w tym łańcuchu jest podpisany przez certyfikat główny. Ten certyfikat jest udostępniany grupie rejestracji utworzonej w usłudze DPS. Ta konfiguracja umożliwia zarządzanie całą grupą urządzeń z certyfikatami urządzeń podpisanymi przez ten sam certyfikat pośredni.
Certyfikaty urządzeń: certyfikaty urządzeń (czasami nazywane certyfikatem liścia) są podpisane przez certyfikat pośredni i przechowywane na urządzeniu wraz z jego kluczem prywatnym. Najlepiej, aby te poufne elementy były bezpiecznie przechowywane za pomocą modułu HSM. Wiele certyfikatów urządzeń może być podpisanych przez ten sam certyfikat pośredni. Każde urządzenie przedstawia swój certyfikat i klucz prywatny wraz z łańcuchem certyfikatów podczas próby aprowizacji.
Aby uzyskać więcej informacji na temat łańcuchów certyfikatów, zobacz Zaświadczenie certyfikatu X.509.
Konfigurowanie środowiska X.509 OpenSSL
W tej sekcji utworzysz pliki konfiguracji Openssl, strukturę katalogu i inne pliki używane przez polecenia Openssl.
Otwórz wiersz polecenia powłoki Git Bash i przejdź do folderu, w którym chcesz wygenerować certyfikaty i klucze X.509 na potrzeby tego samouczka.
Utwórz plik konfiguracji OpenSSL o nazwie openssl_root_ca.cnf dla certyfikatu głównego urzędu certyfikacji. Pliki konfiguracji openSSL zawierają zasady i definicje używane przez polecenia OpenSSL. Skopiuj i wklej następujący tekst do pliku 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
Utwórz plik konfiguracji OpenSSL o nazwie openssl_device_intermediate_ca.cnf do użycia dla certyfikatów pośrednich i urządzeń. Skopiuj i wklej następujący tekst do pliku 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
Utwórz strukturę katalogów, plik bazy danych index.txt i numer seryjny, który jest używany przez polecenia OpenSSL w tym samouczku:
mkdir certs csr newcerts private touch index.txt openssl rand -hex 16 > serial
Tworzenie certyfikatu głównego urzędu certyfikacji
Uruchom następujące polecenia, aby utworzyć klucz prywatny głównego urzędu certyfikacji i certyfikat głównego urzędu certyfikacji. Ten certyfikat i klucz służą do podpisywania certyfikatu pośredniego.
W terminalu powłoki Git Bash utwórz klucz prywatny głównego urzędu certyfikacji:
openssl genrsa -aes256 -passout pass:1234 -out ./private/azure-iot-test-only.root.ca.key.pem 4096
Utwórz certyfikat głównego urzędu certyfikacji:
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
Ważne
Dodatkowy ukośnik podany dla nazwy podmiotu (
//CN=Azure IoT Hub CA Cert Test Only
) jest wymagany tylko do ucieczki ciągu z usługą Git na platformach Windows. Na platformach Linux podaj nazwę podmiotu z tylko jednym ukośnikiem (/CN=Azure IoT Hub CA Cert Test Only
).Sprawdź certyfikat głównego urzędu certyfikacji:
openssl x509 -noout -text -in ./certs/azure-iot-test-only.root.ca.cert.pem
Zwróć uwagę, że wystawca i podmiot są zarówno głównym urzędem certyfikacji.
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)
Tworzenie pośredniego certyfikatu urzędu certyfikacji
Uruchom następujące polecenia, aby utworzyć pośredni klucz prywatny urzędu certyfikacji i pośredni certyfikat urzędu certyfikacji. Ten certyfikat i klucz służą do podpisywania certyfikatów urządzenia.
W terminalu powłoki Git Bash utwórz pośredni klucz prywatny urzędu certyfikacji:
openssl genrsa -aes256 -passout pass:1234 -out ./private/azure-iot-test-only.intermediate.key.pem 4096
Utwórz żądanie podpisania certyfikatu pośredniego urzędu certyfikacji (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
Ważne
Dodatkowy ukośnik podany dla nazwy podmiotu (
//CN=Azure IoT Hub Intermediate Cert Test Only
) jest wymagany tylko do ucieczki ciągu z usługą Git na platformach Windows. Na platformach Linux podaj nazwę podmiotu z pojedynczym ukośnikiem (/CN=Azure IoT Hub Intermediate Cert Test Only
).Podpisywanie certyfikatu pośredniego przy użyciu certyfikatu głównego urzędu certyfikacji
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
Sprawdź certyfikat pośredniego urzędu certyfikacji:
openssl x509 -noout -text -in ./certs/azure-iot-test-only.intermediate.cert.pem
Zwróć uwagę, że wystawca jest głównym urzędem certyfikacji, a podmiot jest pośrednim urzędem certyfikacji.
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)
Tworzenie certyfikatów urządzeń
W tej sekcji utworzysz dwa certyfikaty urządzeń i ich certyfikaty w pełnym łańcuchu. Certyfikat pełnego łańcucha zawiera certyfikat urządzenia, certyfikat pośredniego urzędu certyfikacji i certyfikat głównego urzędu certyfikacji. Urządzenie musi przedstawić certyfikat pełnego łańcucha podczas rejestrowania w usłudze DPS.
Utwórz pierwszy klucz prywatny urządzenia.
openssl genrsa -out ./private/device-01.key.pem 4096
Utwórz certyfikat urządzenia CSR.
Nazwa pospolita podmiotu certyfikatu urządzenia (CN) musi być ustawiona na identyfikator rejestracji używany przez urządzenie do rejestracji w usłudze DPS. Identyfikator rejestracji jest ciągiem bez uwzględniania wielkości liter znaków alfanumerycznych oraz znakami specjalnymi:
'-'
, ,'.'
'_'
,':'
. Ostatni znak musi być alfanumeryczny lub kreskowy ('-'
). Nazwa pospolita musi być zgodna z tym formatem. Usługa DPS obsługuje identyfikatory rejestracji o długości do 128 znaków; jednak maksymalna długość nazwy pospolitej podmiotu w certyfikacie X.509 wynosi 64 znaki. W związku z tym identyfikator rejestracji jest ograniczony do 64 znaków w przypadku używania certyfikatów X.509. W przypadku rejestracji grup identyfikator rejestracji jest również używany jako identyfikator urządzenia w usłudze IoT Hub.Nazwa pospolita podmiotu jest ustawiana przy użyciu parametru
-subj
. W poniższym poleceniu nazwa pospolita jest ustawiona na 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
Ważne
Dodatkowy ukośnik podany dla nazwy podmiotu (
//CN=device-01
) jest wymagany tylko do ucieczki ciągu z usługą Git na platformach Windows. Na platformach Linux podaj nazwę podmiotu z pojedynczym ukośnikiem (/CN=device-01
).Podpisz certyfikat urządzenia.
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
Sprawdź certyfikat urządzenia:
openssl x509 -noout -text -in ./certs/device-01.cert.pem
Zwróć uwagę, że wystawca jest pośrednim urzędem certyfikacji, a temat jest identyfikatorem rejestracji urządzenia,
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)
Urządzenie musi przedstawić pełny łańcuch certyfikatów podczas uwierzytelniania w usłudze DPS. Użyj następującego polecenia, aby utworzyć łańcuch certyfikatów:
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
Otwórz plik łańcucha certyfikatów . /certs/device-01-full-chain.cert.pem w edytorze tekstów, aby go zbadać. Tekst łańcucha certyfikatów zawiera pełny łańcuch wszystkich trzech certyfikatów. W dalszej części tego samouczka użyjesz tego łańcucha certyfikatów, aby aprowizować
device-01
usługę .Pełny tekst łańcucha ma następujący format:
-----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-----
Aby utworzyć klucz prywatny, certyfikat X.509 i certyfikat pełnego łańcucha dla drugiego urządzenia, skopiuj i wklej ten skrypt w wierszu polecenia powłoki Git Bash. Aby utworzyć certyfikaty dla większej liczby urządzeń, możesz zmodyfikować zmienną
registration_id
zadeklarowaną na początku skryptu.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
Ważne
Dodatkowy ukośnik podany dla nazwy podmiotu (
//CN=$registration_id
) jest wymagany tylko do ucieczki ciągu z usługą Git na platformach Windows. Na platformach Linux podaj nazwę podmiotu z pojedynczym ukośnikiem (/CN=$registration_id
).Uwaga
Ten skrypt używa identyfikatora rejestracji jako podstawowej nazwy pliku klucza prywatnego i plików certyfikatów. Jeśli identyfikator rejestracji zawiera znaki, które nie są prawidłowymi znakami nazwy pliku, należy odpowiednio zmodyfikować skrypt.
Ostrzeżenie
Tekst certyfikatów zawiera tylko informacje o kluczu publicznym.
Jednak urządzenie musi mieć również dostęp do klucza prywatnego certyfikatu urządzenia. Jest to konieczne, ponieważ urządzenie musi przeprowadzić weryfikację przy użyciu tego klucza w czasie wykonywania podczas próby aprowizacji. Czułość tego klucza jest jednym z głównych powodów, dla których zaleca się użycie magazynu opartego na sprzęcie w rzeczywistym module HSM w celu zabezpieczenia kluczy prywatnych.
W pozostałej części tego samouczka użyjesz następujących plików:
Certyfikat | Plik | opis |
---|---|---|
Certyfikat głównego urzędu certyfikacji. | certs/azure-iot-test-only.root.ca.cert.pem | Przekazano do usługi DPS i zweryfikowano. |
Certyfikat pośredniego urzędu certyfikacji | certs/azure-iot-test-only.intermediate.cert.pem | Służy do tworzenia grupy rejestracji w usłudze DPS. |
klucz prywatny device-01 | private/device-01.key.pem | Używany przez urządzenie do weryfikowania własności certyfikatu urządzenia podczas uwierzytelniania za pomocą usługi DPS. |
certyfikat pełnego łańcucha urządzenia-01 | certs/device-01-full-chain.cert.pem | Prezentowane przez urządzenie do uwierzytelniania i rejestrowania w usłudze DPS. |
klucz prywatny device-02 | private/device-02.key.pem | Używany przez urządzenie do weryfikowania własności certyfikatu urządzenia podczas uwierzytelniania za pomocą usługi DPS. |
certyfikat pełnego łańcucha urządzenia-02 | certs/device-02-full-chain.cert.pem | Prezentowane przez urządzenie do uwierzytelniania i rejestrowania w usłudze DPS. |
Weryfikowanie własności certyfikatu głównego
Aby usługa DPS mogła zweryfikować łańcuch certyfikatów urządzenia podczas uwierzytelniania, należy przekazać i zweryfikować własność certyfikatu głównego urzędu certyfikacji. Aby dodać certyfikat głównego urzędu certyfikacji do wystąpienia usługi DPS, wykonaj następujące kroki:
W witrynie Azure Portal przejdź do wystąpienia usługi Device Provisioning Service.
Otwórz pozycję Certyfikaty z menu po lewej stronie, a następnie wybierz pozycję Dodaj , aby dodać nowy certyfikat.
Wprowadź przyjazną nazwę wyświetlaną certyfikatu. Przejdź do lokalizacji pliku
certs/azure-iot-test-only.root.ca.cert.pem
certyfikatu głównego urzędu certyfikacji . Wybierz Przekaż.Wybierz pole ustaw stan certyfikatu na zweryfikowane podczas przekazywania.
Wybierz pozycję Zapisz.
Upewnij się, że certyfikat jest wyświetlany na karcie certyfikatu ze stanem Zweryfikowano.
Aktualizowanie magazynu certyfikatów na urządzeniach z systemem Windows
Na urządzeniach z systemem innych niż Windows można przekazać łańcuch certyfikatów z kodu jako magazyn certyfikatów.
Na urządzeniach z systemem Windows należy dodać certyfikaty podpisywania (główny i pośredni) do magazynu certyfikatów systemu Windows. W przeciwnym razie certyfikaty podpisywania nie będą transportowane do usługi DPS przez bezpieczny kanał z protokołem Transport Layer Security (TLS).
Napiwek
Istnieje również możliwość używania protokołu OpenSSL zamiast bezpiecznego kanału (Schannel) z zestawem SDK języka C. Aby uzyskać więcej informacji na temat korzystania z biblioteki OpenSSL, zobacz Using OpenSSL in the SDK (Używanie biblioteki OpenSSL w zestawie SDK).
Aby dodać certyfikaty podpisywania do magazynu certyfikatów na urządzeniach z systemem Windows:
W terminalu powłoki Git Bash przekonwertuj certyfikaty podpisywania na
.pfx
w następujący sposób.Certyfikat głównego urzędu certyfikacji:
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
Certyfikat pośredniego urzędu certyfikacji:
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
Kliknij prawym przyciskiem myszy przycisk Start systemu Windows, a następnie wybierz polecenie Uruchom. Wprowadź certmgr.msc i wybierz przycisk OK , aby uruchomić menedżera certyfikatów.
W Menedżerze certyfikatów w obszarze Certyfikaty — bieżący użytkownik wybierz pozycję Zaufane główne urzędy certyfikacji. Następnie w menu wybierz pozycję Akcja>Wszystkie zadania>importu.
Postępuj zgodnie z instrukcjami Kreatora importu certyfikatów, aby zaimportować plik
root.pfx
.- Pamiętaj, aby wyszukać dane osobowe w programie Exchange (pfx)
- Użyj
1234
jako hasła. - Umieść certyfikat w magazynie certyfikatów zaufanych głównych urzędów certyfikacji.
Powtórz te kroki menedżera certyfikatów, aby zaimportować
intermediate.pfx
plik .- Umieść certyfikat w magazynie certyfikatów pośrednich urzędów certyfikacji.
Certyfikaty podpisywania są teraz zaufane na urządzeniu z systemem Windows, a pełny łańcuch można transportować do usługi DPS.
Tworzenie grupy rejestracji
Zaloguj się do witryny Azure Portal i przejdź do wystąpienia usługi Device Provisioning Service.
Wybierz pozycję Zarządzaj rejestracjami w sekcji Ustawienia w menu nawigacji.
W górnej części strony wybierz pozycję Dodaj grupę rejestracji.
Na karcie Rejestracja i aprowizacja na stronie Dodawanie grupy rejestracji podaj następujące informacje, aby skonfigurować szczegóły grupy rejestracji:
Pole opis Zaświadczanie Wybierz certyfikaty pośrednie X.509 jako mechanizm zaświadczania, jeśli chcesz przekazać certyfikaty pośrednie do użycia tylko dla tej grupy rejestracji, lub wybierz certyfikaty X.509 przekazane do tej usługi Device Provisioning, jeśli zostały już przekazane certyfikaty pośrednie. Ustawienia certyfikatu X.509 W zależności od wybranej metody zaświadczania przekaż lub wybierz podstawowe i pomocnicze certyfikaty pośrednie dla tej grupy rejestracji. Nazwa grupy Podaj nazwę grupy urządzeń. Nazwa grupy rejestracji jest ciągiem bez uwzględniania wielkości liter (do 128 znaków) znaków alfanumerycznych oraz znakami specjalnymi: '-'
, ,'.'
'_'
,':'
. Ostatni znak musi być alfanumeryczny lub kreskowy ('-'
).Stan aprowizacji Zaznacz pole Włącz tę rejestrację, jeśli ta grupa rejestracji ma być dostępna do aprowizowania urządzeń. Usuń zaznaczenie tego pola, jeśli chcesz, aby grupa została wyłączona. To ustawienie można zmienić później. Zasady ponownej aprowizacji Wybierz zasady ponownej aprowizacji, które odzwierciedlają sposób obsługi urządzeń, które żądają ponownej aprowizacji przez usługę DPS. Aby uzyskać więcej informacji, zobacz Zasady ponownej aprowizacji Wybierz pozycję Dalej: centra IoT.
Na karcie Centra IoT na stronie Dodawanie grupy rejestracji podaj następujące informacje, aby określić, które centra IoT mogą aprowizować urządzenia do:
Pole opis Docelowe centra IoT Wybierz co najmniej jedno połączone centra IoT lub dodaj nowy link do centrum IoT. Aby dowiedzieć się więcej na temat łączenia centrów IoT z wystąpieniem usługi DPS, zobacz Jak połączyć centra IoT i zarządzać nimi. Zasady alokacji Jeśli wybrano więcej niż jedno połączone centrum IoT, wybierz sposób przypisywania urządzeń do różnych centrów. Aby dowiedzieć się więcej na temat zasad alokacji, zobacz Jak używać zasad alokacji.
Jeśli wybrano tylko jedno połączone centrum IoT, zalecamy użycie zasad dystrybucji równomiernie ważonej.Wybierz pozycję Dalej: Ustawienia urządzenia
Na karcie Ustawienia urządzenia na stronie Dodawanie grupy rejestracji podaj następujące informacje, aby zdefiniować sposób konfigurowania nowo aprowizowania urządzeń:
Pole opis IoT Edge Sprawdź włączanie usługi IoT Edge na aprowidowanych urządzeniach, jeśli wszystkie urządzenia aprowidowane za pośrednictwem tej grupy będą uruchamiać usługę Azure IoT Edge. Usuń zaznaczenie tego pola, jeśli ta grupa dotyczy tylko urządzeń z obsługą usługi IoT Edge. Wszystkie urządzenia w grupie będą włączone w usłudze IoT Edge lub żadna z nich nie może być. Tagi urządzeń Użyj tego pola tekstowego, aby podać wszystkie tagi, które mają być stosowane do bliźniaczych reprezentacji urządzeń aprowizowania. Żądane właściwości Użyj tego pola tekstowego, aby podać żądane właściwości, które mają zostać zastosowane do bliźniaczych reprezentacji urządzeń aprowizowania. Aby uzyskać więcej informacji, zobacz Opis bliźniaczej reprezentacji urządzenia w usłudze IoT Hub oraz sposoby jej używania.
Wybierz pozycję Dalej: Przeglądanie i tworzenie.
Na karcie Przeglądanie i tworzenie sprawdź wszystkie wartości, a następnie wybierz pozycję Utwórz.
Przygotowywanie i uruchamianie kodu aprowizacji urządzenia
W tej sekcji zaktualizujesz przykładowy kod przy użyciu informacji o wystąpieniu usługi Device Provisioning Service. Jeśli urządzenie jest uwierzytelnione, jest przypisane do centrum IoT Hub połączonego z wystąpieniem usługi Device Provisioning Service skonfigurowanym w tej sekcji.
W tej sekcji użyjesz monitu powłoki Git Bash i środowiska IDE programu Visual Studio.
Konfigurowanie kodu urządzenia aprowizacji
W tej sekcji zaktualizujesz przykładowy kod przy użyciu informacji o wystąpieniu usługi Device Provisioning Service.
W witrynie Azure Portal wybierz kartę Przegląd dla wystąpienia usługi Device Provisioning Service i zanotuj wartość Zakres identyfikatora.
Uruchom program Visual Studio i otwórz nowy plik rozwiązania utworzony w
cmake
katalogu głównym repozytorium git azure-iot-sdk-c. Plik rozwiązania ma nazwęazure_iot_sdks.sln
.W programie Eksplorator rozwiązań dla programu Visual Studio przejdź do Provision_Samples > pliki źródłowe prov_dev_client_sample > i otwórz plik prov_dev_client_sample.c.
Znajdź stałą
id_scope
i zastąp jej wartość wcześniej skopiowaną wartością Zakres identyfikatorów. Na przykład:static const char* id_scope = "0ne00000A0A";
Znajdź definicję funkcji
main()
w tym samym pliku. Upewnij się, że zmienna jest ustawionahsm_type
naSECURE_DEVICE_TYPE_X509
i że wszystkie innehsm_type
wiersze są oznaczane jako komentarz. Na przykład:SECURE_DEVICE_TYPE hsm_type; //hsm_type = SECURE_DEVICE_TYPE_TPM; hsm_type = SECURE_DEVICE_TYPE_X509; //hsm_type = SECURE_DEVICE_TYPE_SYMMETRIC_KEY;
Zapisz zmiany.
Kliknij prawym przyciskiem myszy projekt prov_dev_client_sample i wybierz polecenie Ustaw jako projekt startowy.
Konfigurowanie niestandardowego kodu wycinkowego modułu HSM
Specyfika interakcji z rzeczywistym bezpiecznym magazynem opartym na sprzęcie różni się w zależności od sprzętu urządzenia. Łańcuchy certyfikatów używane przez symulowane urządzenia w tym samouczku będą zakodowane na stałe w niestandardowym kodzie wycinkowym modułu HSM. W rzeczywistym scenariuszu łańcuch certyfikatów będzie przechowywany w rzeczywistym sprzęcie HSM w celu zapewnienia lepszego bezpieczeństwa poufnych informacji. Metody podobne do metod wycinków używanych w tym przykładzie zostaną zaimplementowane w celu odczytania wpisów tajnych z tego magazynu opartego na sprzęcie.
Chociaż sprzęt HSM nie jest wymagany, zaleca się ochronę poufnych informacji, takich jak klucz prywatny certyfikatu. Jeśli rzeczywisty moduł HSM był wywoływany przez przykład, klucz prywatny nie będzie obecny w kodzie źródłowym. Posiadanie klucza w kodzie źródłowym uwidacznia klucz każdemu, kto może wyświetlić kod. Jest to wykonywane tylko w tym samouczku, aby ułatwić naukę.
Aby zaktualizować niestandardowy kod wycinkowy modułu HSM w celu symulowania tożsamości urządzenia o identyfikatorze device-01
:
W Eksplorator rozwiązań dla programu Visual Studio przejdź do Provision_Samples pliki > źródłowe custom_hsm_example > i otwórz plik custom_hsm_example.c.
Zaktualizuj wartość ciągu stałej
COMMON_NAME
ciągu przy użyciu nazwy pospolitej użytej podczas generowania certyfikatu urządzenia.static const char* const COMMON_NAME = "device-01";
W terminalu powłoki Git Bash uruchom następujące polecenie, aby wygenerować stałą ciągu dla certyfikatu urządzenia:
sed -e 's/^/"/;$ !s/$/""\\n"/;$ s/$/"/' ./certs/device-01-full-chain.cert.pem
Skopiuj dane wyjściowe tego polecenia.
Zaktualizuj wartość ciągu stałego
CERTIFICATE
przy użyciu łańcucha certyfikatów zapisanego w pliku ./certs/device-01-full-chain.cert.pem po wygenerowaniu certyfikatów. Użyj tekstu certyfikatu wyjściowego z poprzedniego kroku dla wartości stałej.Składnia tekstu certyfikatu musi być zgodna z poniższym wzorcem bez dodatkowych spacji ani analizowania wykonanych przez program 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-----";
W powłoce Git Bash uruchom następujące polecenie, aby wygenerować stałą ciągu dla klucza prywatnego urządzenia:
sed -e 's/^/"/;$ !s/$/""\\n"/;$ s/$/"/' ./private/device-01.key.pem
Skopiuj dane wyjściowe tego polecenia.
Zaktualizuj wartość ciągu stałej
PRIVATE_KEY
przy użyciu klucza prywatnego certyfikatu urządzenia. Użyj wyjściowego tekstu klucza prywatnego z poprzedniego kroku dla wartości stałej.Składnia tekstu klucza prywatnego musi być zgodna z poniższym wzorcem bez dodatkowych spacji ani analizowania wykonywanego przez program Visual Studio.
static const char* const PRIVATE_KEY = "-----BEGIN RSA PRIVATE KEY-----\n" "MIIJJwIBAAKCAgEAtjvKQjIhp0EE1PoADL1rfF/W6v4vlAzOSifKSQsaPeebqg8U\n" ... "X7fi9OZ26QpnkS5QjjPTYI/wwn0J9YAwNfKSlNeXTJDfJ+KpjXBcvaLxeBQbQhij\n" "-----END RSA PRIVATE KEY-----";
Zapisz zmiany.
Kliknij prawym przyciskiem myszy projekt custom_hsm_example i wybierz polecenie Kompiluj.
Ważne
Przed utworzeniem pozostałej części rozwiązania w następnej sekcji należy skompilować projekt custom_hsm_example .
Uruchamianie aplikacji przykładowej
Z menu programu Visual Studio wybierz pozycję Debuguj>Uruchom bez debugowania, aby uruchomić rozwiązanie. Po wyświetleniu monitu o ponowne skompilowanie projektu wybierz pozycję Tak , aby ponownie skompilować projekt przed uruchomieniem.
Poniższe dane wyjściowe to przykład pomyślnego uruchomienia symulowanego urządzenia
device-01
i nawiązania połączenia z usługą aprowizacji. Urządzenie zostało przypisane do centrum IoT Hub i zarejestrowane: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:
Powtórz kroki opisane w temacie Konfigurowanie niestandardowego kodu wycinkowego modułu HSM dla drugiego urządzenia (
device-02
) i ponownie uruchom przykład. Użyj następujących wartości dla tego urządzenia:Opis Wartość Nazwa pospolita "device-02"
Pełny łańcuch certyfikatów Generowanie tekstu przy użyciu pliku ./certs/device-02-full-chain.cert.pem Klucz prywatny Generowanie tekstu przy użyciu pliku ./private/device-02.key.pem Poniższe dane wyjściowe to przykład pomyślnego uruchomienia symulowanego urządzenia
device-02
i nawiązania połączenia z usługą aprowizacji. Urządzenie zostało przypisane do centrum IoT Hub i zarejestrowane: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:
Przykładowy kod języka C# został skonfigurowany do używania certyfikatów X.509 przechowywanych w pliku sformatowanym za pomocą hasła PKCS#12 (pfx). Utworzone wcześniej certyfikaty pełnego łańcucha są w formacie PEM. Aby przekonwertować certyfikaty pełnego łańcucha na format PKCS#12, wprowadź następujące polecenia w wierszu polecenia powłoki Git Bash z katalogu, w którym wcześniej uruchomiono polecenia OpenSSL.
device-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
W pozostałej części tej sekcji użyj wiersza polecenia systemu Windows.
W witrynie Azure Portal wybierz kartę Przegląd dla usługi Device Provisioning Service.
Skopiuj wartość Zakres identyfikatora.
W wierszu polecenia systemu Windows przejdź do katalogu X509Sample . Ten katalog znajduje się w repozytorium zestawu SDK sklonowanym we wcześniejszym kroku: .\azure-iot-sdk-csharp\provisioning\device\samples\getting started\X509Sample.
Wprowadź następujące polecenie, aby skompilować i uruchomić przykład aprowizacji urządzeń X.509. Zastąp
<id-scope>
wartość zakresem identyfikatora skopiowaną z witryny Azure Portal. Zastąp<your-certificate-folder>
ciąg ścieżką do folderu, w którym uruchomiono polecenia OpenSSL.dotnet run -- -s <id-scope> -c <your-certificate-folder>\certs\device-01-full-chain.cert.pfx -p 1234
Urządzenie łączy się z usługą DPS i jest przypisane do centrum IoT. Następnie urządzenie wysyła komunikat telemetryczny do centrum IoT. Powinny zostać wyświetlone dane wyjściowe podobne do następującego przykładu:
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.
Uwaga
Jeśli nie określisz certyfikatu i hasła w wierszu polecenia, plik certyfikatu będzie domyślnie ustawiony na ./certificate.pfx i zostanie wyświetlony monit o podanie hasła.
Można przekazać dodatkowe parametry, aby zmienić typ transportu (-t) i parametr GlobalDeviceEndpoint (-g). Aby uzyskać pełną listę parametrów typu
dotnet run -- --help
.Aby zarejestrować drugie urządzenie, uruchom ponownie przykład przy użyciu certyfikatu pełnego łańcucha.
dotnet run -- -s <id-scope> -c <your-certificate-folder>\certs\device-02-full-chain.cert.pfx -p 1234
W poniższych krokach użyj wiersza polecenia systemu Windows.
W witrynie Azure Portal wybierz kartę Przegląd dla usługi Device Provisioning Service.
Skopiuj wartość Zakres identyfikatora.
W wierszu polecenia systemu Windows przejdź do przykładowego katalogu i zainstaluj pakiety wymagane przez przykład. Wyświetlona ścieżka jest względna do lokalizacji, w której sklonowany zestaw SDK.
cd .\azure-iot-sdk-node\provisioning\device\samples npm install
W folderze provisioning\device\samples otwórz register_x509.js i przejrzyj kod.
Przykładowa wartość domyślna to MQTT jako protokół transportowy. Jeśli chcesz użyć innego protokołu, oznacz następujący wiersz jako komentarz i usuń komentarz z wiersza dla odpowiedniego protokołu.
var ProvisioningTransport = require('azure-iot-provisioning-device-mqtt').Mqtt;
W przykładzie użyto pięciu zmiennych środowiskowych do uwierzytelniania i aprowizacji urządzenia IoT przy użyciu usługi DPS. Te zmienne środowiskowe to:
Nazwa zmiennej opis PROVISIONING_HOST
Punkt końcowy używany do nawiązywania połączenia z wystąpieniem usługi DPS. Na potrzeby tego samouczka użyj globalnego punktu końcowego, global.azure-devices-provisioning.net
.PROVISIONING_IDSCOPE
Zakres identyfikatora wystąpienia usługi DPS. PROVISIONING_REGISTRATION_ID
Identyfikator rejestracji urządzenia. Musi być zgodna z nazwą pospolitą podmiotu w certyfikacie urządzenia. CERTIFICATE_FILE
Ścieżka do pliku certyfikatu pełnego łańcucha urządzenia. KEY_FILE
Ścieżka do pliku klucza prywatnego certyfikatu urządzenia. Metoda
ProvisioningDeviceClient.register()
próbuje zarejestrować urządzenie.Dodaj zmienne środowiskowe dla globalnego punktu końcowego urządzenia i zakresu identyfikatorów. Zastąp
<id-scope>
wartość skopiowaną z witryny Azure Portal.set PROVISIONING_HOST=global.azure-devices-provisioning.net set PROVISIONING_IDSCOPE=<id-scope>
Ustaw zmienną środowiskową dla identyfikatora rejestracji urządzenia. Identyfikator rejestracji urządzenia IoT musi być zgodny z nazwą pospolitą podmiotu w certyfikacie urządzenia. W tym samouczku parametr device-01 jest zarówno nazwą podmiotu, jak i identyfikatorem rejestracji urządzenia.
set PROVISIONING_REGISTRATION_ID=device-01
Ustaw zmienne środowiskowe dla wygenerowanego wcześniej certyfikatu pełnego łańcucha urządzeń i plików klucza prywatnego urządzenia. Zastąp
<your-certificate-folder>
ciąg ścieżką do folderu, w którym uruchomiono polecenia 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
Uruchom przykład i sprawdź, czy urządzenie zostało pomyślnie zainicjowane.
node register_x509.js
Powinny zostać wyświetlone dane wyjściowe podobne do następującego przykładu:
registration succeeded assigned hub=contoso-hub-2.azure-devices.net deviceId=device-01 Client connected send status: MessageEnqueued
Zaktualizuj zmienne środowiskowe dla drugiego urządzenia (
device-02
) zgodnie z poniższą tabelą i ponownie uruchom przykład.Zmienna środowiskowa Wartość 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
W poniższych krokach użyj wiersza polecenia systemu Windows.
W witrynie Azure Portal wybierz kartę Przegląd dla usługi Device Provisioning Service.
Skopiuj zakres identyfikatora.
W wierszu polecenia systemu Windows przejdź do katalogu przykładu provision_x509.py . Wyświetlona ścieżka jest względna do lokalizacji, w której sklonowany zestaw SDK.
cd .\azure-iot-sdk-python\samples\async-hub-scenarios
W tym przykładzie użyto sześciu zmiennych środowiskowych do uwierzytelniania i aprowizacji urządzenia IoT przy użyciu usługi DPS. Te zmienne środowiskowe to:
Nazwa zmiennej opis PROVISIONING_HOST
Punkt końcowy używany do nawiązywania połączenia z wystąpieniem usługi DPS. Na potrzeby tego samouczka użyj globalnego punktu końcowego, global.azure-devices-provisioning.net
.PROVISIONING_IDSCOPE
Zakres identyfikatora wystąpienia usługi DPS. DPS_X509_REGISTRATION_ID
Identyfikator rejestracji urządzenia. Musi być zgodna z nazwą pospolitą podmiotu w certyfikacie urządzenia. X509_CERT_FILE
Ścieżka do pliku certyfikatu pełnego łańcucha urządzenia. X509_KEY_FILE
Ścieżka do pliku klucza prywatnego certyfikatu urządzenia. PASS_PHRASE
Fraza dostępu używana do szyfrowania pliku klucza prywatnego (jeśli jest używana). Nie jest to wymagane w tym samouczku. Dodaj zmienne środowiskowe dla globalnego punktu końcowego urządzenia i zakresu identyfikatorów. W przypadku zmiennej zakresu identyfikatorów użyj wartości skopiowanej z witryny Azure Portal.
set PROVISIONING_HOST=global.azure-devices-provisioning.net set PROVISIONING_IDSCOPE=<ID scope for your DPS resource>
Ustaw zmienną środowiskową dla identyfikatora rejestracji urządzenia. Identyfikator rejestracji urządzenia IoT musi być zgodny z nazwą pospolitą podmiotu w certyfikacie urządzenia. W tym samouczku parametr device-01 jest zarówno nazwą podmiotu, jak i identyfikatorem rejestracji urządzenia.
set DPS_X509_REGISTRATION_ID=device-01
Ustaw zmienne środowiskowe dla wygenerowanego wcześniej certyfikatu pełnego łańcucha urządzeń i plików klucza prywatnego urządzenia. Zastąp
<your-certificate-folder>
ciąg ścieżką do folderu, w którym uruchomiono polecenia 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
Przejrzyj kod provision_x509.py. Jeśli nie używasz języka Python w wersji 3.7 lub nowszej, wprowadź zmianę kodu wymienioną tutaj , aby zastąpić element
asyncio.run(main())
.Uruchom przykład. Przykład łączy się z usługą DPS, która będzie aprowizować urządzenie w centrum IoT. Po aprowizacji urządzenia przykład wysyła kilka komunikatów testowych do centrum IoT.
python provision_x509.py
Powinny zostać wyświetlone dane wyjściowe podobne do następującego przykładu:
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
Zaktualizuj zmienne środowiskowe dla drugiego urządzenia (
device-02
) zgodnie z poniższą tabelą i ponownie uruchom przykład.Zmienna środowiskowa Wartość 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
W poniższych krokach użyjesz zarówno wiersza polecenia systemu Windows, jak i wiersza polecenia powłoki Git Bash.
W witrynie Azure Portal wybierz kartę Przegląd dla usługi Device Provisioning Service.
Skopiuj zakres identyfikatora.
W wierszu polecenia systemu Windows przejdź do folderu przykładowego projektu. Wyświetlona ścieżka jest względna do lokalizacji, w której sklonowany zestaw SDK
cd .\azure-iot-sdk-java\provisioning\provisioning-device-client-samples\provisioning-X509-sample
Wprowadź informacje o tożsamości usługi aprowizacji i X.509 w przykładowym kodzie. Jest to używane podczas aprowizacji na potrzeby zaświadczania symulowanego urządzenia przed rejestracją urządzenia.
Otwórz plik
.\src\main\java\samples\com\microsoft\azure\sdk\iot\ProvisioningX509Sample.java
w ulubionym edytorze.Zaktualizuj następujące wartości. W przypadku
idScope
programu użyj skopiowanego wcześniej zakresu identyfikatora. W przypadku globalnego punktu końcowego użyj globalnego punktu końcowego urządzenia. Ten punkt końcowy jest taki sam dla każdego wystąpienia usługi 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]";
Przykład domyślnie używa protokołu HTTPS jako protokołu transportowego. Jeśli chcesz zmienić protokół, oznacz następujący wiersz jako komentarz i usuń komentarz z wiersza dla protokołu, którego chcesz użyć.
private static final ProvisioningDeviceClientTransportProtocol PROVISIONING_DEVICE_CLIENT_TRANSPORT_PROTOCOL = ProvisioningDeviceClientTransportProtocol.HTTPS;
Zaktualizuj wartość
leafPublicPem
ciągu stałego przy użyciu wartości certyfikatu urządzenia device-01.cert.pem.Składnia tekstu certyfikatu musi być zgodna z poniższym wzorcem bez dodatkowych spacji ani znaków.
private static final String leafPublicPem = "-----BEGIN CERTIFICATE-----\n" "MIIFOjCCAyKgAwIBAgIJAPzMa6s7mj7+MA0GCSqGSIb3DQEBCwUAMCoxKDAmBgNV\n" ... "MDMwWhcNMjAxMTIyMjEzMDMwWjAqMSgwJgYDVQQDDB9BenVyZSBJb1QgSHViIENB\n" "-----END CERTIFICATE-----";
Ręczne aktualizowanie tej wartości ciągu może być podatne na błąd. Aby wygenerować właściwą składnię, możesz skopiować i wkleić następujące polecenie w wierszu polecenia powłoki Git Bash i nacisnąć ENTER. To polecenie generuje składnię stałej
leafPublicPem
wartości ciągu i zapisuje ją w danych wyjściowych.sed 's/^/"/;$ !s/$/\\n" +/;$ s/$/"/' ./certs/device-01.cert.pem
Skopiuj i wklej tekst wyjściowego certyfikatu dla stałej wartości.
Zaktualizuj wartość ciągu stałej
leafPrivateKey
za pomocą niezaszyfrowanego klucza prywatnego certyfikatu urządzenia, unencrypted-device-key.pem.Składnia tekstu klucza prywatnego musi być zgodna z poniższym wzorcem bez dodatkowych spacji ani znaków.
private static final String leafPrivateKey = "-----BEGIN PRIVATE KEY-----\n" + "MIIJJwIBAAKCAgEAtjvKQjIhp0EE1PoADL1rfF/W6v4vlAzOSifKSQsaPeebqg8U\n" + ... "X7fi9OZ26QpnkS5QjjPTYI/wwn0J9YAwNfKSlNeXTJDfJ+KpjXBcvaLxeBQbQhij\n" + "-----END PRIVATE KEY-----";
Aby wygenerować właściwą składnię, możesz skopiować i wkleić następujące polecenie w wierszu polecenia powłoki Git Bash i nacisnąć ENTER. To polecenie generuje składnię stałej
leafPrivateKey
wartości ciągu i zapisuje ją w danych wyjściowych.sed 's/^/"/;$ !s/$/\\n" +/;$ s/$/"/' ./private/device-01.key.pem
Skopiuj i wklej wyjściowy tekst klucza prywatnego dla wartości stałej.
Dodaj ciąg stały z wartością
rootPublicPem
certyfikatu głównego urzędu certyfikacji azure-iot-test-only.root.ca.cert.pem. Możesz dodać ją tuż po stałejleafPrivateKey
.Składnia tekstu certyfikatu musi być zgodna z poniższym wzorcem bez dodatkowych spacji ani znaków.
private static final String rootPublicPem = "-----BEGIN CERTIFICATE-----\n" "MIIFOjCCAyKgAwIBAgIJAPzMa6s7mj7+MA0GCSqGSIb3DQEBCwUAMCoxKDAmBgNV\n" ... "MDMwWhcNMjAxMTIyMjEzMDMwWjAqMSgwJgYDVQQDDB9BenVyZSBJb1QgSHViIENB\n" "-----END CERTIFICATE-----";
Aby wygenerować właściwą składnię, możesz skopiować i wkleić następujące polecenie w wierszu polecenia powłoki Git Bash i nacisnąć ENTER. To polecenie generuje składnię stałej
rootPublicPem
wartości ciągu i zapisuje ją w danych wyjściowych.sed 's/^/"/;$ !s/$/\\n" +/;$ s/$/"/' ./certs/azure-iot-test-only.root.ca.cert.pem
Skopiuj i wklej tekst wyjściowego certyfikatu dla stałej wartości.
Dodaj ciąg stały z wartością
intermediatePublicPem
certyfikatu pośredniego urzędu certyfikacji azure-iot-test-only.intermediate.cert.pem. Możesz dodać ją tuż po poprzedniej stałej.Składnia tekstu certyfikatu musi być zgodna z poniższym wzorcem bez dodatkowych spacji ani znaków.
private static final String intermediatePublicPem = "-----BEGIN CERTIFICATE-----\n" "MIIFOjCCAyKgAwIBAgIJAPzMa6s7mj7+MA0GCSqGSIb3DQEBCwUAMCoxKDAmBgNV\n" ... "MDMwWhcNMjAxMTIyMjEzMDMwWjAqMSgwJgYDVQQDDB9BenVyZSBJb1QgSHViIENB\n" "-----END CERTIFICATE-----";
Aby wygenerować właściwą składnię, możesz skopiować i wkleić następujące polecenie w wierszu polecenia powłoki Git Bash i nacisnąć ENTER. To polecenie generuje składnię stałej
intermediatePublicPem
wartości ciągu i zapisuje ją w danych wyjściowych.sed 's/^/"/;$ !s/$/\\n" +/;$ s/$/"/' ./certs/azure-iot-test-only.intermediate.cert.pem
Skopiuj i wklej tekst wyjściowego certyfikatu dla stałej wartości.
Znajdź następujące wiersze w metodzie
main
.// For group enrollment uncomment this line //signerCertificatePemList.add("<Your Signer/intermediate Certificate Here>");
Dodaj te dwa wiersze bezpośrednio pod nimi, aby dodać certyfikaty pośredniego i głównego urzędu certyfikacji do łańcucha podpisywania. Łańcuch podpisywania powinien zawierać cały łańcuch certyfikatów do i uwzględnić certyfikat zweryfikowany za pomocą usługi DPS.
signerCertificatePemList.add(intermediatePublicPem); signerCertificatePemList.add(rootPublicPem);
Uwaga
Kolejność dodawania certyfikatów podpisywania jest ważna. Przykład zakończy się niepowodzeniem, jeśli zostanie zmieniony.
Zapisz zmiany.
Skompiluj przykład, a następnie przejdź do
target
folderu .mvn clean install cd target
Dane wyjściowe kompilacji .jar pliku w
target
folderze o następującym formacie pliku:provisioning-x509-sample-{version}-with-deps.jar
na przykład :provisioning-x509-sample-1.8.1-with-deps.jar
. Wykonaj plik .jar. Może być konieczne zastąpienie wersji w poniższym poleceniu.java -jar ./provisioning-x509-sample-1.8.1-with-deps.jar
Przykład łączy się z usługą DPS, która aprowizuje urządzenie do centrum IoT. Po aprowizacji urządzenia przykład wyśle kilka komunikatów testowych do centrum 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!
Zaktualizuj stałe dla drugiego urządzenia () zgodnie
device-02
z poniższą tabelą, ponownie skompiluj i uruchom ponownie przykład.Stała Plik do użycia leafPublicPem
./certs/device-02.cert.pem leafPrivateKey
./private/device-02.key.pem
Potwierdzanie rejestracji aprowizacji urządzeń
Sprawdź rekordy rejestracji grupy rejestracji, aby wyświetlić szczegóły rejestracji dla urządzeń:
W witrynie Azure Portal przejdź do wystąpienia usługi Device Provisioning Service.
W menu Ustawienia wybierz pozycję Zarządzaj rejestracjami.
Wybierz pozycję Grupy rejestracji. Na liście powinien zostać wyświetlony wpis grupy rejestracji X.509, który został utworzony wcześniej.
Wybierz wpis rejestracji. Następnie wybierz pozycję Szczegóły obok pozycji Stan rejestracji, aby wyświetlić urządzenia zarejestrowane za pośrednictwem grupy rejestracji. Centrum IoT, do którego przypisano każde z Twoich urządzeń, ich identyfikatory urządzeń oraz daty i godziny ich zarejestrowania, są wyświetlane na liście.
Możesz wybrać jedno z urządzeń, aby wyświetlić dodatkowe szczegóły dotyczące tego urządzenia.
Aby sprawdzić urządzenia w centrum IoT:
W witrynie Azure Portal przejdź do centrum IoT Hub, do którego przypisano Urządzenie.
W menu Zarządzanie urządzeniami wybierz pozycję Urządzenia.
Jeśli urządzenia zostały pomyślnie aprowizowane, ich identyfikatory urządzeń, device-01 i device-02 powinny być wyświetlane na liście z ustawionym stanem ustawionym jako włączone. Jeśli urządzenia nie są widoczne, wybierz pozycję Odśwież.
Czyszczenie zasobów
Po zakończeniu testowania i eksplorowania tego przykładu klienta urządzenia wykonaj następujące kroki, aby usunąć wszystkie zasoby utworzone w tym samouczku.
- Zamknij okno danych wyjściowych przykładu klienta urządzenia na swojej maszynie.
Usuwanie grupy rejestracji
W menu po lewej stronie w witrynie Azure Portal wybierz pozycję Wszystkie zasoby.
Wybierz wystąpienie usługi DPS.
W menu Ustawienia wybierz pozycję Zarządzaj rejestracjami.
Wybierz kartę Grupy rejestracji.
Wybierz grupę rejestracji używaną na potrzeby tego samouczka.
Na stronie Szczegóły rejestracji wybierz pozycję Szczegóły obok pozycji Stan rejestracji. Następnie zaznacz pole wyboru obok nagłówka kolumny Identyfikator urządzenia, aby wybrać wszystkie rekordy rejestracji dla grupy rejestracji. Wybierz pozycję Usuń w górnej części strony, aby usunąć rekordy rejestracji.
Ważne
Usunięcie grupy rejestracji nie powoduje usunięcia skojarzonych z nią rekordów rejestracji. Te oddzielone rekordy będą liczone względem limitu przydziału rejestracji dla wystąpienia usługi DPS. Z tego powodu najlepszym rozwiązaniem jest usunięcie wszystkich rekordów rejestracji skojarzonych z grupą rejestracji przed usunięciem samej grupy rejestracji.
Wróć do strony Zarządzanie rejestracjami i upewnij się, że wybrano kartę Grupy rejestracji.
Zaznacz pole wyboru obok nazwy grupy rejestracji użytej na potrzeby tego samouczka.
W górnej części strony wybierz pozycję Usuń.
Usuwanie zarejestrowanych certyfikatów urzędu certyfikacji z usługi DPS
- Wybierz pozycję Certyfikaty z menu po lewej stronie wystąpienia usługi DPS. Dla każdego przekazanego i zweryfikowanego certyfikatu w tym samouczku wybierz certyfikat, a następnie wybierz pozycję Usuń i potwierdź wybór, aby go usunąć.
Usuwanie rejestracji urządzeń z usługi IoT Hub
W menu po lewej stronie w witrynie Azure Portal wybierz pozycję Wszystkie zasoby.
Wybierz centrum IoT Hub.
W menu Eksploratory wybierz pozycję Urządzenia IoT.
Zaznacz pole wyboru obok identyfikatora urządzenia urządzeń zarejestrowanych w tym samouczku. Na przykład device-01 i device-02.
W górnej części strony wybierz pozycję Usuń.
Następne kroki
W tym samouczku zainicjowano obsługę wielu urządzeń X.509 w centrum IoT Przy użyciu grupy rejestracji. Następnie dowiedz się, jak aprowizować urządzenia IoT w wielu centrach.