Rychlý start: Zřízení simulovaného zařízení certifikátu X.509
V tomto rychlém startu vytvoříte na počítači s Windows simulované zařízení. Simulované zařízení je nakonfigurované tak, aby pro ověřování používalo ověření certifikátu X.509. Jakmile zařízení nakonfigurujete, zřídíte ho ve službě IoT Hub Device Provisioning pomocí služby Azure IoT Hub Device Provisioning.
Pokud neznáte proces zřizování, projděte si přehled zřizování . Než budete pokračovat, ujistěte se také, že jste provedli kroky uvedené v tématu Nastavení služby IoT Hub Device Provisioning Service pomocí webu Azure Portal.
Tento rychlý start ukazuje řešení pro pracovní stanici se systémem Windows. Můžete ale také provádět postupy v Linuxu. Příklad Linuxu najdete v tématu Kurz: Zřízení geografické latence.
Požadavky
Pokud ještě nemáte předplatné Azure, vytvořte si napřed bezplatný účet.
Proveďte kroky v části Nastavení služby IoT Hub Device Provisioning pomocí webu Azure Portal.
Následující předpoklady jsou pro vývojové prostředí Windows. Informace o Linuxu nebo macOS najdete v příslušné části Přípravy vývojového prostředí v dokumentaci k sadě SDK.
Nainstalujte Visual Studio 2022 s povolenou úlohou Vývoj desktopových aplikací s C++ . Podporují se také sady Visual Studio 2015, Visual Studio 2017 a Visual Studio 19. Informace o Linuxu nebo macOS najdete v příslušné části Přípravy vývojového prostředí v dokumentaci k sadě SDK.
Nainstalujte nejnovější systém sestavení CMake. Nezapomeňte zaškrtnout možnost, která do cesty přidá spustitelný soubor CMake.
Důležité
Před zahájením instalace ověřte, že jsou na vašem počítači nainstalované požadavky sady Visual Studio (Visual Studio a úloha Vývoj desktopových aplikací pomocí jazyka
CMake
C++). Jakmile jsou požadované součásti k dispozici a stažený soubor je ověřený, nainstalujte sestavovací systém CMake. Mějte také na paměti, že starší verze systému sestavení CMake se nedaří vygenerovat soubor řešení použitý v tomto článku. Ujistěte se, že používáte nejnovější verzi CMake.
Následující předpoklady jsou pro vývojové prostředí Windows. Informace o Linuxu nebo macOS najdete v příslušné části Přípravy vývojového prostředí v dokumentaci k sadě SDK.
Nainstalujte na počítač se systémem Windows sadu .NET SDK 6.0 nebo novější. Ke kontrole verze můžete použít následující příkaz.
dotnet --info
Následující předpoklady jsou pro vývojové prostředí Windows. Informace o Linuxu nebo macOS najdete v příslušné části Přípravy vývojového prostředí v dokumentaci k sadě SDK.
- Nainstalujte na počítač Node.js verze 4.0 nebo novější .
Následující předpoklady jsou pro vývojové prostředí Windows.
- Python 3.6 nebo novější na vašem počítači
Následující předpoklady jsou pro vývojové prostředí Windows. Informace o Linuxu nebo macOS najdete v příslušné části Přípravy vývojového prostředí v dokumentaci k sadě SDK.
Nainstalujte na počítač sadu Java SE Development Kit 8 nebo novější.
Stáhněte a nainstalujte Maven.
Nainstalujte nejnovější verzi Git. Ujistěte se, že je Git přidaný do proměnných prostředí, které jsou přístupné pro příkazové okno. Nejnovější verzi nástrojů pro instalaci, včetně Git Bashu, aplikace příkazového řádku, kterou můžete použít k interakci s místním úložištěm Git, najdete v klientských nástrojích
git
Gitu společnosti Software Freedom Conservancy.Ujistěte se, že je na vašem počítači nainstalovaný OpenSSL . Instalace Gitu ve Windows zahrnuje instalaci OpenSSL. K OpenSSL se dostanete z příkazového řádku Git Bash. Pokud chcete ověřit, že je OpenSSL nainstalovaný, otevřete příkazový řádek Git Bash a zadejte
openssl version
.Poznámka:
Pokud neznáte OpenSSL a už ho máte na počítači s Windows nainstalovaný, doporučujeme použít OpenSSL z příkazového řádku Git Bash. Případně si můžete stáhnout zdrojový kód a sestavit OpenSSL. Další informace najdete na stránce Stažené soubory OpenSSL. Nebo si můžete stáhnout openSSL předdefinovaný od jiného výrobce. Další informace najdete na wikiwebu OpenSSL. Společnost Microsoft neposkytuje žádné záruky týkající se platnosti balíčků stažených od třetích stran. Pokud se rozhodnete sestavit nebo stáhnout OpenSSL, ujistěte se, že binární soubor OpenSSL je přístupný ve vaší cestě a že
OPENSSL_CNF
proměnná prostředí je nastavená na cestu k souboru openssl.cnf .Otevřete příkazový řádek Windows i příkazový řádek Git Bash.
Kroky v tomto rychlém startu předpokládají, že používáte počítač s Windows a instalaci OpenSSL nainstalovanou jako součást Gitu. Pomocí výzvy Git Bash vydáte příkazy OpenSSL a příkazový řádek Windows pro všechno ostatní. Pokud používáte Linux, můžete vydat všechny příkazy z prostředí Bash.
Příprava vývojového prostředí
V této části připravíte vývojové prostředí, které se používá k sestavení sady Azure IoT C SDK. Vzorový kód se pokusí zřídit zařízení během spouštěcí sekvence zařízení.
Otevřete webový prohlížeč a přejděte na stránku vydání sady Azure IoT C SDK.
Vyberte kartu Značky v horní části stránky.
Zkopírujte název značky pro nejnovější verzi sady Azure IoT C SDK.
Na příkazovém řádku Windows spusťte následující příkazy, které naklonují nejnovější verzi úložiště Azure IoT Device SDK pro C GitHub. Nahraďte
<release-tag>
značkou, kterou jste zkopírovali v předchozím kroku, například:lts_01_2023
.git clone -b <release-tag> https://github.com/Azure/azure-iot-sdk-c.git cd azure-iot-sdk-c git submodule update --init
Dokončení této operace může trvat několik minut.
Po dokončení operace spusťte z
azure-iot-sdk-c
adresáře následující příkazy:mkdir cmake cd cmake
Vzorový kód k zajištění ověření prostřednictvím ověřování X.509 používá certifikát X.509. Spuštěním následujícího příkazu sestavte verzi sady SDK specifickou pro vaši vývojovou platformu, která zahrnuje klienta zřizování zařízení. V adresáři se vygeneruje
cmake
řešení sady Visual Studio pro simulované zařízení.Při zadávání cesty použité
-Dhsm_custom_lib
v následujícím příkazu nezapomeňte použít absolutní cestu ke knihovně v dříve vytvořenémcmake
adresáři. Zobrazená cesta předpokládá, že jste naklonovali sadu C SDK v kořenovém adresáři jednotky C. Pokud jste použili jiný adresář, upravte cestu odpovídajícím způsobem.
Tip
Pokud cmake
kompilátor jazyka C++ nenajdete, při spuštění výše uvedeného příkazu může dojít k chybám sestavení. Pokud k tomu dojde, zkuste příkaz spustit v příkazovém řádku sady Visual Studio.
Po úspěšném sestavení vypadá posledních několik výstupních řádků podobně jako následující výstup:
-- 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
Na příkazovém řádku Windows naklonujte úložiště Azure IoT SDK pro GitHub v jazyce C# pomocí následujícího příkazu:
git clone https://github.com/Azure/azure-iot-sdk-csharp.git
Na příkazovém řádku Windows naklonujte sadu Azure IoT SDK pro Node.js úložiště GitHub pomocí následujícího příkazu:
git clone https://github.com/Azure/azure-iot-sdk-node.git
Na příkazovém řádku Windows naklonujte úložiště Azure IoT Device SDK pro GitHub pomocí následujícího příkazu:
git clone -b v2 https://github.com/Azure/azure-iot-sdk-python.git --recursive
Poznámka:
Ukázky použité v tomto kurzu jsou ve větvi v2 úložiště azure-iot-sdk-python. V3 sady Python SDK je k dispozici pro použití v beta verzi.
Na příkazovém řádku Windows naklonujte ukázky Azure IoT pro úložiště GitHub v Javě pomocí následujícího příkazu:
git clone https://github.com/Azure/azure-iot-sdk-java.git --recursive
Přejděte do kořenového
azure-iot-sdk-java
adresáře a sestavte projekt, aby se stáhly všechny potřebné balíčky.cd azure-iot-sdk-java mvn install -DskipTests=true
Vytvoření certifikátu zařízení X.509 podepsaného svým držitelem
V této části použijete OpenSSL k vytvoření certifikátu X.509 podepsaného svým držitelem a privátního klíče. Tento certifikát se nahraje do vaší instance služby zřizování a ověří ji služba.
Upozornění
K testování vývoje používejte certifikáty vytvořené pomocí OpenSSL v tomto rychlém startu. Tyto certifikáty nepoužívejte v produkčním prostředí. Platnost těchto certifikátů vyprší po 30 dnech a může obsahovat pevně zakódovaná hesla, například 1234. Informace o získání certifikátů vhodných pro použití v produkčním prostředí najdete v tématu Získání certifikátu CA X.509 v dokumentaci ke službě Azure IoT Hub.
Proveďte kroky v této části v příkazovém řádku Git Bash.
V příkazovém řádku Git Bash přejděte do adresáře, do kterého chcete vytvořit certifikáty.
Spusťte následující příkaz:
winpty openssl req -outform PEM -x509 -sha256 -newkey rsa:4096 -keyout device-key.pem -out device-cert.pem -days 30 -extensions usr_cert -addext extendedKeyUsage=clientAuth -subj "//CN=my-x509-device"
Důležité
Dodatečné lomítko zadané pro název subjektu (
//CN=my-x509-device
) se vyžaduje pouze k úniku řetězce s Gitem na platformách Windows.Když se zobrazí výzva k zadání hesla PEM:, použijte heslo
1234
.Když se zobrazí výzva k ověření – zadejte heslo PEM:, použijte
1234
heslo znovu.Soubor certifikátu veřejného klíče (device-cert.pem) a soubor privátního klíče (device-key.pem) by se teď měl vygenerovat v adresáři, ve kterém jste příkaz spustili
openssl
.Soubor certifikátu má svůj běžný název subjektu (CN) nastavený na
my-x509-device
. U registrací založených na X.509 je ID registrace nastavené na běžný název. ID registrace je řetězec nerozlišující velká a malá písmena alfanumerických znaků a speciální znaky:'-'
, ,'.'
'_'
,':'
. Poslední znak musí být alfanumerický nebo pomlčka ('-'
). Běžný název musí dodržovat tento formát. DPS podporuje ID registrace o délce až 128 znaků; Maximální délka společného názvu subjektu v certifikátu X.509 je však 64 znaků. ID registrace je proto omezeno na 64 znaků při použití certifikátů X.509.Soubor certifikátu má kódování Base 64. Pokud chcete zobrazit běžný název subjektu (CN) a další vlastnosti souboru certifikátu, zadejte následující příkaz:
Certificate: Data: Version: 3 (0x2) Serial Number: 77:3e:1d:e4:7e:c8:40:14:08:c6:09:75:50:9c:1a:35:6e:19:52:e2 Signature Algorithm: sha256WithRSAEncryption Issuer: CN = my-x509-device Validity Not Before: May 5 21:41:42 2022 GMT Not After : Jun 4 21:41:42 2022 GMT Subject: CN = my-x509-device Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public-Key: (4096 bit) Modulus: 00:d2:94:37:d6:1b:f7:43:b4:21:c6:08:1a:d6:d7: e6:40:44:4e:4d:24:41:6c:3e:8c:b2:2c:b0:23:29: ... 23:6e:58:76:45:18:03:dc:2e:9d:3f:ac:a3:5c:1f: 9f:66:b0:05:d5:1c:fe:69:de:a9:09:13:28:c6:85: 0e:cd:53 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: CA:FALSE Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: 63:C0:B5:93:BF:29:F8:57:F8:F9:26:44:70:6F:9B:A4:C7:E3:75:18 X509v3 Authority Key Identifier: keyid:63:C0:B5:93:BF:29:F8:57:F8:F9:26:44:70:6F:9B:A4:C7:E3:75:18 X509v3 Extended Key Usage: TLS Web Client Authentication Signature Algorithm: sha256WithRSAEncryption 82:8a:98:f8:47:00:85:be:21:15:64:b9:22:b0:13:cc:9e:9a: ed:f5:93:b9:4b:57:0f:79:85:9d:89:47:69:95:65:5e:b3:b1: ... cc:b2:20:9a:b7:f2:5e:6b:81:a1:04:93:e9:2b:92:62:e0:1c: ac:d2:49:b9:36:d2:b0:21
Ukázkový kód vyžaduje privátní klíč, který není šifrovaný. Spuštěním následujícího příkazu vytvořte nešifrovaný privátní klíč:
Když se zobrazí výzva k zadání hesla pro device-key.pem:, použijte stejnou předávací frázi, kterou jste udělali dříve.
1234
Nechte výzvu Git Bash otevřenou. Budete ho potřebovat později v tomto rychlém startu.
Vzorový kód jazyka C# je nastavený tak, aby používal certifikáty X.509 uložené ve formátu PKCS#12 chráněném heslem (certificate.pfx
PKCS#12). Stále potřebujete soubor certifikátu veřejného klíče ve formátu PEM (device-cert.pem
), který jste právě vytvořili, abyste vytvořili jednotlivou položku registrace později v tomto rychlém startu.
Pokud chcete vygenerovat formátovaný soubor PKCS12 očekávaný ukázkou, zadejte následující příkaz:
Když se zobrazí výzva k zadání hesla pro device-key.pem:, použijte stejnou předávací frázi, kterou jste udělali dříve.
1234
Po zobrazení výzvy k zadání exportu hesla:, použijte heslo
1234
.Po zobrazení výzvy k ověření zadejte heslo pro export:, znovu použijte heslo
1234
.Soubor certifikátu ve formátu PKCS12 (certificate.pfx) by se teď měl vygenerovat v adresáři, ve kterém jste spustili
openssl
příkaz.Zkopírujte soubor certifikátu VE FORMÁTU PKCS12 do adresáře projektu pro ukázku zřizování zařízení X.509. Daná cesta je relativní vzhledem k umístění, kam jste stáhli ukázkové úložiště.
cp certificate.pfx ./azure-iot-sdk-csharp/provisioning/device/samples/"Getting Started"/X509Sample
Pro zbytek tohoto rychlého startu nepotřebujete výzvu Git Bash. Pokud ale máte problémy v pozdějších krocích, můžete ho chtít nechat otevřený a zkontrolovat certifikát.
Ukázkový kód vyžaduje privátní klíč, který není šifrovaný. Spuštěním následujícího příkazu vytvořte nešifrovaný privátní klíč:
Když se zobrazí výzva k zadání hesla pro device-key.pem:, použijte stejnou předávací frázi, kterou jste udělali dříve.
1234
Zkopírujte certifikát zařízení a nešifrovaný privátní klíč do adresáře projektu pro ukázku zřizování zařízení X.509. Daná cesta je relativní vzhledem k umístění, kam jste stáhli sadu SDK.
cp device-cert.pem ./azure-iot-sdk-node/provisioning/device/samples cp unencrypted-device-key.pem ./azure-iot-sdk-node/provisioning/device/samples
Pro zbytek tohoto rychlého startu nepotřebujete výzvu Git Bash. Pokud ale máte problémy v pozdějších krocích, můžete ho chtít nechat otevřený a zkontrolovat certifikát.
Zkopírujte certifikát zařízení a privátní klíč do adresáře projektu pro ukázku zřizování zařízení X.509. Daná cesta je relativní vzhledem k umístění, kam jste stáhli sadu SDK.
cp device-cert.pem ./azure-iot-sdk-python/samples/async-hub-scenarios cp device-key.pem ./azure-iot-sdk-python/samples/async-hub-scenarios
Pro zbytek tohoto rychlého startu nepotřebujete výzvu Git Bash. Pokud ale máte problémy v pozdějších krocích, můžete ho chtít nechat otevřený a zkontrolovat certifikát.
Ukázkový kód Java vyžaduje privátní klíč, který není šifrovaný. Spuštěním následujícího příkazu vytvořte nešifrovaný privátní klíč:
Když se zobrazí výzva k zadání hesla pro device-key.pem:, použijte stejnou předávací frázi, kterou jste udělali dříve.
1234
Nechte výzvu Git Bash otevřenou. Budete ho potřebovat později v tomto rychlém startu.
Vytvoření registrace zařízení
Služba Azure IoT Device Provisioning podporuje dva typy registrací:
- Skupiny registrací: Slouží k registraci několika souvisejících zařízení.
- Jednotlivé registrace: Slouží k registraci jednoho zařízení.
Tento článek ukazuje individuální registraci jednoho zařízení, které se má zřídit v Centru IoT.
Přihlaste se k webu Azure Portal a přejděte k instanci služby Device Provisioning.
V části Nastavení navigační nabídky vyberte Spravovat registrace.
Vyberte kartu Jednotlivé registrace a pak vyberte Přidat jednotlivou registraci.
Na stránce Registrace a zřizování na stránce Přidat registraci zadejte následující informace pro konfiguraci podrobností o registraci:
Pole Popis Atestace Jako mechanismus ověření identity vyberte klientské certifikáty X.509. Nastavení certifikátu X.509 Nahrajte jeden nebo dva certifikáty, které se použijí k ověření zařízení pro tuto registraci. Stav zřizování Zaškrtněte políčko Povolit tuto registraci, pokud chcete, aby byla tato registrace k dispozici pro zřízení jeho zařízení. Pokud chcete, aby byla registrace zakázaná, zrušte zaškrtnutí tohoto políčka. Toto nastavení můžete později změnit. Zásady opětovného zřízení Zvolte zásadu opětovného zřízení, která odráží způsob, jakým má DPS zpracovávat zařízení, která požadují opětovné zřízení. Další informace najdete v tématu Zásady opětovného zřízení. Vyberte Další: IoT Hubs.
Na kartě Centra IoT na stránce Přidat registraci zadejte následující informace, abyste zjistili, pro které centrum IoT může registrace zřídit zařízení:
Pole Popis Cílení center IoT Vyberte jedno nebo více propojených center IoT nebo přidejte nový odkaz na centrum IoT. Další informace o propojení ioT Hubů s vaší instancí DPS najdete v tématu Propojení a správa ioT Hubů. Zásady přidělování Pokud jste vybrali více propojených ioT Hubů, vyberte způsob přiřazení zařízení k různým rozbočovačům. Další informace ozásadách
Pokud jste vybrali jenom jedno propojené centrum IoT, doporučujeme použít rovnoměrně vážené distribuční zásady.Vybrat další: Nastavení zařízení
Na kartě Nastavení zařízení na stránce Přidat registraci zadejte následující informace, které definují, jak se budou nově zřízená zařízení konfigurovat:
Pole Popis ID zařízení Zadejte ID zařízení, které se přiřadí zřízenému zařízení ve službě IoT Hub. Pokud nezadáte ID zařízení, použije se ID registrace. IoT Edge Zkontrolujte povolení IoT Edge na zřízených zařízeních , pokud zřízené zařízení spustí Azure IoT Edge. Zrušte zaškrtnutí tohoto políčka, pokud je tato registrace pro zařízení, které není povoleno službou IoT Edge. Značky zařízení Pomocí tohoto textového pole zadejte všechny značky, které chcete použít u dvojčete zařízení zřízeného zařízení. Požadované vlastnosti Pomocí tohoto textového pole zadejte požadované vlastnosti, které chcete použít u dvojčete zařízení zřízeného zařízení. Další informace najdete v tématu Principy a použití dvojčat zařízení ve službě IoT Hub.
Vyberte Další: Zkontrolovat a vytvořit.
Na kartě Zkontrolovat a vytvořit ověřte všechny hodnoty a pak vyberte Vytvořit.
Příprava a spuštění kódu zřizování zařízení
V této části aktualizujete vzorový kód tak, aby se spouštěcí sekvence zařízení odeslala do instance služby Device Provisioning Service. Tato spouštěcí sekvence způsobí, že se zařízení rozpozná a přiřadí k centru IoT propojenému s instancí DPS.
V této části použijete příkazový řádek Git Bash a integrované vývojové prostředí sady Visual Studio.
Konfigurace kódu zřizování zařízení
V této části aktualizujete ukázkový kód informacemi o instanci služby Device Provisioning.
Na webu Azure Portal vyberte kartu Přehled pro vaši službu Device Provisioning.
Zkopírujte hodnotu oboru ID.
Spusťte Visual Studio a otevřete nový soubor řešení vytvořený v adresáři, který jste vytvořili v
cmake
kořenovém adresáři úložiště git azure-iot-sdk-c. Soubor řešení má názevazure_iot_sdks.sln
.V Průzkumník řešení pro Visual Studio přejděte na Provision_Samples > zdrojové soubory prov_dev_client_sample > a otevřete prov_dev_client_sample.c.
Najděte konstantu
id_scope
a nahraďte ji hodnotou oboru ID, kterou jste zkopírovali v kroku 2.static const char* id_scope = "0ne00000A0A";
Ve stejném souboru vyhledejte definici funkce
main()
. Ujistěte se,hsm_type
že je proměnná nastavená naSECURE_DEVICE_TYPE_X509
hodnotu .SECURE_DEVICE_TYPE hsm_type; //hsm_type = SECURE_DEVICE_TYPE_TPM; hsm_type = SECURE_DEVICE_TYPE_X509; //hsm_type = SECURE_DEVICE_TYPE_SYMMETRIC_KEY;
Uložte provedené změny.
Klikněte pravým tlačítkem myši na prov_dev_client_sample projekt a vyberte Nastavit jako spouštěný projekt.
Konfigurace vlastního kódu zástupných procedur HSM
Specifika interakce se skutečným zabezpečeným hardwarovým úložištěm se liší v závislosti na hardwaru. V důsledku toho se certifikát a privátní klíč používaný simulovaným zařízením v tomto rychlém startu pevně zakóduje do vlastního kódu hardwarového zabezpečení (HSM).
Aktualizace vlastního kódu zástupných procedur HSM pro simulaci identity zařízení s ID my-x509-device
:
V Průzkumník řešení pro Visual Studio přejděte na Provision_Samples > custom_hsm_example > zdrojové soubory a otevřete custom_hsm_example.c.
Aktualizujte řetězcovou hodnotu
COMMON_NAME
řetězcové konstanty pomocí běžného názvu, který jste použili při generování certifikátu zařízení.my-x509-device
static const char* const COMMON_NAME = "my-x509-device";
Aktualizujte hodnotu
CERTIFICATE
řetězce konstanty pomocí certifikátu zařízení device-cert.pem, který jste vygenerovali dříve.Syntaxe textu certifikátu v ukázce musí odpovídat následujícímu vzoru bez nadbytečných mezer ani analýzy provedené sadou Visual Studio.
static const char* const CERTIFICATE = "-----BEGIN CERTIFICATE-----\n" "MIIFOjCCAyKgAwIBAgIJAPzMa6s7mj7+MA0GCSqGSIb3DQEBCwUAMCoxKDAmBgNV\n" ... "MDMwWhcNMjAxMTIyMjEzMDMwWjAqMSgwJgYDVQQDDB9BenVyZSBJb1QgSHViIENB\n" "-----END CERTIFICATE-----";
Ruční aktualizace této řetězcové hodnoty může být náchylná k chybě. Pokud chcete vygenerovat správnou syntaxi, můžete do příkazového řádku Git Bash zkopírovat a vložit následující příkaz a stisknout ENTER. Tento příkaz vygeneruje syntaxi řetězcové
CERTIFICATE
konstantní hodnoty a zapíše ji do výstupu.sed -e 's/^/"/;$ !s/$/""\\n"/;$ s/$/"/' device-cert.pem
Zkopírujte a vložte text výstupního certifikátu pro konstantní hodnotu.
Aktualizujte hodnotu řetězce konstanty pomocí nešifrovaného privátního
PRIVATE_KEY
klíče pro certifikát zařízení, nešifrovaný-device-key.pem.Syntaxe textu privátního klíče musí odpovídat následujícímu vzoru bez nadbytečných mezer ani analýzy provedené sadou Visual Studio.
static const char* const PRIVATE_KEY = "-----BEGIN RSA PRIVATE KEY-----\n" "MIIJJwIBAAKCAgEAtjvKQjIhp0EE1PoADL1rfF/W6v4vlAzOSifKSQsaPeebqg8U\n" ... "X7fi9OZ26QpnkS5QjjPTYI/wwn0J9YAwNfKSlNeXTJDfJ+KpjXBcvaLxeBQbQhij\n" "-----END RSA PRIVATE KEY-----";
Ruční aktualizace této řetězcové hodnoty může být náchylná k chybě. Pokud chcete vygenerovat správnou syntaxi, můžete do příkazového řádku Git Bash zkopírovat a vložit následující příkaz a stisknout ENTER. Tento příkaz vygeneruje syntaxi řetězcové
PRIVATE_KEY
konstantní hodnoty a zapíše ji do výstupu.sed -e 's/^/"/;$ !s/$/""\\n"/;$ s/$/"/' unencrypted-device-key.pem
Zkopírujte a vložte text výstupního privátního klíče pro konstantní hodnotu.
Uložte provedené změny.
Klikněte pravým tlačítkem na projekt custom_hsm_-_example a vyberte Sestavit.
Důležité
Před sestavením zbytku řešení v další části je nutné sestavit projekt custom_hsm_example .
Spuštění ukázky
V nabídce sady Visual Studio vyberte Ladit>Spustit bez ladění a spusťte řešení. Pokud se zobrazí výzva k opětovnému sestavení projektu, vyberte Ano a projekt před spuštěním znovu sestavte.
Následující výstup je příkladem úspěšného spuštění simulovaného zařízení
my-x509-device
a připojení ke službě zřizování. Zařízení se přiřadí k centru IoT a zaregistruje se:Provisioning API Version: 1.8.0 Registering Device Provisioning Status: PROV_DEVICE_REG_STATUS_CONNECTED Provisioning Status: PROV_DEVICE_REG_STATUS_ASSIGNING Registration Information received from service: contoso-iot-hub-2.azure-devices.net, deviceId: my-x509-device Press enter key to exit:
V této části použijete příkazový řádek windows.
Na webu Azure Portal vyberte kartu Přehled pro vaši službu Device Provisioning.
Zkopírujte hodnotu oboru ID.
V příkazovém řádku windows přejděte do adresáře X509Sample. Tento adresář se nachází v adresáři .\azure-iot-sdk-csharp\provisioning\device\samples\getting started\X509Sample mimo adresář, do kterého jste naklonovali ukázky ve svém počítači.
Zadáním následujícího příkazu sestavte a spusťte ukázku zřizování zařízení X.509 (nahraďte
<IDScope>
hodnotu oborem ID, který jste zkopírovali v předchozí části. Soubor certifikátu má výchozí hodnotu ./certificate.pfx a zobrazí výzvu k zadání hesla .pfx.dotnet run -- -s <IDScope>
Pokud chcete certifikát a heslo předat jako parametr, můžete použít následující formát.
Poznámka:
Při spuštění aplikace je možné předat další parametry, které změní TransportType (-t) a GlobalDeviceEndpoint (-g).
dotnet run -- -s 0ne00000A0A -c certificate.pfx -p 1234
Zařízení se připojí k DPS a přiřadí se k centru IoT. Potom zařízení odešle telemetrická zpráva do centra IoT.
Loading the certificate... Enter the PFX password for certificate.pfx: **** Found certificate: A33DB11B8883DEE5B1690ACFEAAB69E8E928080B CN=my-x509-device; PrivateKey: True Using certificate A33DB11B8883DEE5B1690ACFEAAB69E8E928080B CN=my-x509-device Initializing the device provisioning client... Initialized for registration Id my-x509-device. Registering with the device provisioning service... Registration status: Assigned. Device my-x509-device registered to MyExampleHub.azure-devices.net. Creating X509 authentication for IoT Hub... Testing the provisioned device with IoT Hub... Sending a telemetry message... Finished.
V této části použijete příkazový řádek windows.
Na webu Azure Portal vyberte kartu Přehled pro vaši službu Device Provisioning.
Zkopírujte hodnotu oboru ID.
Na příkazovém řádku Windows přejděte do ukázkového adresáře a nainstalujte balíčky potřebné ukázkou. Zobrazená cesta je relativní vzhledem k umístění, kam jste naklonovali sadu SDK.
cd .\azure-iot-sdk-node\provisioning\device\samples npm install
Ukázka používá k ověření a zřízení zařízení IoT pomocí DPS pět proměnných prostředí. Tyto proměnné prostředí jsou:
Název proměnné Popis PROVISIONING_HOST
Koncový bod, který se má použít pro připojení k vaší instanci DPS. Pro účely tohoto rychlého startu použijte globální koncový bod global.azure-devices-provisioning.net
.PROVISIONING_IDSCOPE
Rozsah ID pro vaši instanci DPS. PROVISIONING_REGISTRATION_ID
ID registrace pro vaše zařízení. Musí odpovídat běžnému názvu subjektu v certifikátu zařízení. CERTIFICATE_FILE
Cesta k souboru certifikátu zařízení. KEY_FILE
Cesta k souboru privátního klíče zařízení. Přidejte proměnné prostředí pro globální koncový bod zařízení a rozsah ID. Nahraďte
<id-scope>
hodnotou, kterou jste zkopírovali v kroku 2.set PROVISIONING_HOST=global.azure-devices-provisioning.net set PROVISIONING_IDSCOPE=<id-scope>
Nastavte proměnnou prostředí pro ID registrace zařízení. ID registrace zařízení IoT se musí shodovat s běžným názvem subjektu v certifikátu zařízení. Pokud jste postupovali podle kroků v tomto rychlém startu a vygenerovali testovací certifikát podepsaný svým držitelem,
my-x509-device
je název subjektu i ID registrace zařízení.set PROVISIONING_REGISTRATION_ID=my-x509-device
Nastavte proměnné prostředí pro certifikát zařízení a (nešifrované) soubory privátního klíče zařízení.
set CERTIFICATE_FILE=.\device-cert.pem set KEY_FILE=.\unencrypted-device-key.pem
Spusťte ukázku a ověřte, že se zařízení úspěšně zřídilo.
node register_x509.js
Měl by se zobrazit výstup podobný následujícímu příkladu:
registration succeeded assigned hub=contoso-hub-2.azure-devices.net deviceId=my-x509-device Client connected send status: MessageEnqueued
V této části použijete příkazový řádek windows.
Na webu Azure Portal vyberte kartu Přehled pro vaši službu Device Provisioning.
Zkopírujte hodnoty oboru ID a globálního koncového bodu zařízení.
V příkazovém řádku Windows přejděte do adresáře ukázky provision_x509.py . Zobrazená cesta je relativní vzhledem k umístění, kam jste naklonovali sadu SDK.
cd ./azure-iot-sdk-python/samples/async-hub-scenarios
Tato ukázka používá šest proměnných prostředí k ověření a zřízení zařízení IoT pomocí DPS. Tyto proměnné prostředí jsou:
Název proměnné Popis PROVISIONING_HOST
Globální koncový bod používaný pro připojení k vaší instanci DPS. PROVISIONING_IDSCOPE
Rozsah ID pro vaši instanci DPS. DPS_X509_REGISTRATION_ID
ID registrace pro vaše zařízení. Musí se také shodovat s názvem subjektu v certifikátu zařízení. X509_CERT_FILE
Cesta k souboru certifikátu zařízení. X509_KEY_FILE
Cesta k souboru privátního klíče certifikátu zařízení. PASS_PHRASE
Heslo, které jste použili k šifrování certifikátu a souboru privátního klíče ( 1234
).Přidejte proměnné prostředí pro globální koncový bod zařízení a rozsah ID.
set PROVISIONING_HOST=global.azure-devices-provisioning.net set PROVISIONING_IDSCOPE=<ID scope for your DPS resource>
Nastavte proměnnou prostředí pro ID registrace. ID registrace zařízení IoT musí odpovídat názvu subjektu v certifikátu zařízení. Pokud jste postupovali podle kroků v tomto rychlém startu a vygenerovali testovací certifikát podepsaný svým držitelem,
my-x509-device
je název subjektu i ID registrace zařízení.set DPS_X509_REGISTRATION_ID=my-x509-device
Nastavte proměnné prostředí pro soubor certifikátu, soubor privátního klíče a předávací frázi.
set X509_CERT_FILE=./device-cert.pem set X509_KEY_FILE=./device-key.pem set PASS_PHRASE=1234
Zkontrolujte kód pro provision_x509.py. Pokud nepoužíváte Python verze 3.7 nebo novější, proveďte změnu kódu uvedenou zde , abyste změny nahradili
asyncio.run(main())
a uložili.Spusťte ukázku. Ukázka se připojí k DPS, která zřídí zařízení do centra IoT. Po zřízení zařízení odešle ukázka do centra IoT několik testovacích zpráv.
$ python azure-iot-sdk-python/samples/async-hub-scenarios/provision_x509.py RegistrationStage(RequestAndResponseOperation): Op will transition into polling after interval 2. Setting timer. The complete registration result is my-x509-device TestHub12345.azure-devices.net initialAssignment null Will send telemetry from the provisioned device sending message #4 sending message #7 sending message #2 sending message #8 sending message #5 sending message #9 sending message #1 sending message #6 sending message #10 sending message #3 done sending message #4 done sending message #7 done sending message #2 done sending message #8 done sending message #5 done sending message #9 done sending message #1 done sending message #6 done sending message #10 done sending message #3
V této části použijete příkazový řádek Windows i příkazový řádek Git Bash.
Na webu Azure Portal vyberte kartu Přehled pro vaši službu Device Provisioning.
Zkopírujte hodnoty oboru ID a globálního koncového bodu zařízení.
Na příkazovém řádku Windows přejděte do složky ukázkového projektu. Zobrazená cesta je relativní vzhledem k umístění, kam jste naklonovali sadu SDK.
cd .\azure-iot-sdk-java\provisioning\provisioning-device-client-samples\provisioning-X509-sample
Do vzorového kódu zadejte informace o identitě služby zřizování a X.509. Tyto informace se použijí při zřizování pro ověření simulovaného zařízení před registrací zařízení.
Otevřete soubor
.\src\main\java\samples\com\microsoft\azure\sdk\iot\ProvisioningX509Sample.java
v oblíbeném editoru.Aktualizujte následující hodnoty pomocí globálního koncového bodu služby ID a oboru ID a zkopírovaného globálního koncového bodu služby.
private static final String idScope = "[Your ID scope here]"; private static final String globalEndpoint = "[Your Provisioning Service Global Endpoint here]"; private static final ProvisioningDeviceClientTransportProtocol PROVISIONING_DEVICE_CLIENT_TRANSPORT_PROTOCOL = ProvisioningDeviceClientTransportProtocol.HTTPS;
Aktualizujte hodnotu konstantního
leafPublicPem
řetězce hodnotou certifikátu device-cert.pem.Syntaxe textu certifikátu musí odpovídat následujícímu vzoru bez nadbytečných mezer nebo znaků.
private static final String leafPublicPem = "-----BEGIN CERTIFICATE-----\n" + "MIIFOjCCAyKgAwIBAgIJAPzMa6s7mj7+MA0GCSqGSIb3DQEBCwUAMCoxKDAmBgNV\n" + ... "MDMwWhcNMjAxMTIyMjEzMDMwWjAqMSgwJgYDVQQDDB9BenVyZSBJb1QgSHViIENB\n" + "-----END CERTIFICATE-----";
Ruční aktualizace této řetězcové hodnoty může být náchylná k chybě. Pokud chcete vygenerovat správnou syntaxi, můžete do příkazového řádku Git Bash zkopírovat a vložit následující příkaz a stisknout ENTER. Tento příkaz vygeneruje syntaxi řetězcové
leafPublicPem
konstantní hodnoty a zapíše ji do výstupu.sed 's/^/"/;$ !s/$/\\n" +/;$ s/$/"/' device-cert.pem
Zkopírujte a vložte text výstupního certifikátu pro konstantní hodnotu.
Aktualizujte hodnotu řetězce konstanty pomocí nešifrovaného privátního
leafPrivateKey
klíče pro certifikát zařízení, nešifrovaný-device-key.pem.Syntaxe textu privátního klíče musí odpovídat následujícímu vzoru bez nadbytečných mezer nebo znaků.
private static final String leafPrivateKey = "-----BEGIN PRIVATE KEY-----\n" + "MIIJJwIBAAKCAgEAtjvKQjIhp0EE1PoADL1rfF/W6v4vlAzOSifKSQsaPeebqg8U\n" + ... "X7fi9OZ26QpnkS5QjjPTYI/wwn0J9YAwNfKSlNeXTJDfJ+KpjXBcvaLxeBQbQhij\n" + "-----END PRIVATE KEY-----";
Ruční aktualizace této řetězcové hodnoty může být náchylná k chybě. Pokud chcete vygenerovat správnou syntaxi, můžete do příkazového řádku Git Bash zkopírovat a vložit následující příkaz a stisknout ENTER. Tento příkaz vygeneruje syntaxi řetězcové
leafPrivateKey
konstantní hodnoty a zapíše ji do výstupu.sed 's/^/"/;$ !s/$/\\n" +/;$ s/$/"/' unencrypted-device-key.pem
Zkopírujte a vložte text výstupního privátního klíče pro konstantní hodnotu.
Uložte provedené změny.
Sestavte ukázku a přejděte do
target
složky.mvn clean install cd target
Sestavení vytvoří výstup .jar soubor ve
target
složce s následujícím formátem souboru:provisioning-x509-sample-{version}-with-deps.jar
; například :provisioning-x509-sample-1.8.1-with-deps.jar
. Spusťte soubor .jar. Možná budete muset nahradit verzi v následujícím příkazu.java -jar ./provisioning-x509-sample-1.8.1-with-deps.jar
Ukázka se připojí k DPS, která zřídí zařízení do centra IoT. Po zřízení zařízení odešle ukázka do centra IoT několik testovacích zpráv.
Starting... Beginning setup. WARNING: sun.reflect.Reflection.getCallerClass is not supported. This will impact performance. 2022-05-11 09:42:05,025 DEBUG (main) [com.microsoft.azure.sdk.iot.provisioning.device.ProvisioningDeviceClient] - Initialized a ProvisioningDeviceClient instance using SDK version 2.0.0 2022-05-11 09:42:05,027 DEBUG (main) [com.microsoft.azure.sdk.iot.provisioning.device.ProvisioningDeviceClient] - Starting provisioning thread... Waiting for Provisioning Service to register 2022-05-11 09:42:05,030 INFO (global.azure-devices-provisioning.net-6255a8ba-CxnPendingConnectionId-azure-iot-sdk-ProvisioningTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.ProvisioningTask] - Opening the connection to device provisioning service... 2022-05-11 09:42:05,252 INFO (global.azure-devices-provisioning.net-6255a8ba-Cxn6255a8ba-azure-iot-sdk-ProvisioningTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.ProvisioningTask] - Connection to device provisioning service opened successfully, sending initial device registration message 2022-05-11 09:42:05,286 INFO (global.azure-devices-provisioning.net-6255a8ba-Cxn6255a8ba-azure-iot-sdk-RegisterTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.RegisterTask] - Authenticating with device provisioning service using x509 certificates 2022-05-11 09:42:06,083 INFO (global.azure-devices-provisioning.net-6255a8ba-Cxn6255a8ba-azure-iot-sdk-ProvisioningTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.ProvisioningTask] - Waiting for device provisioning service to provision this device... 2022-05-11 09:42:06,083 INFO (global.azure-devices-provisioning.net-6255a8ba-Cxn6255a8ba-azure-iot-sdk-ProvisioningTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.ProvisioningTask] - Current provisioning status: ASSIGNING Waiting for Provisioning Service to register 2022-05-11 09:42:15,685 INFO (global.azure-devices-provisioning.net-6255a8ba-Cxn6255a8ba-azure-iot-sdk-ProvisioningTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.ProvisioningTask] - Device provisioning service assigned the device successfully IotHUb Uri : MyExampleHub.azure-devices.net Device ID : java-device-01 2022-05-11 09:42:25,057 INFO (main) [com.microsoft.azure.sdk.iot.device.transport.ExponentialBackoffWithJitter] - NOTE: A new instance of ExponentialBackoffWithJitter has been created with the following properties. Retry Count: 2147483647, Min Backoff Interval: 100, Max Backoff Interval: 10000, Max Time Between Retries: 100, Fast Retry Enabled: true 2022-05-11 09:42:25,080 INFO (main) [com.microsoft.azure.sdk.iot.device.transport.ExponentialBackoffWithJitter] - NOTE: A new instance of ExponentialBackoffWithJitter has been created with the following properties. Retry Count: 2147483647, Min Backoff Interval: 100, Max Backoff Interval: 10000, Max Time Between Retries: 100, Fast Retry Enabled: true 2022-05-11 09:42:25,087 DEBUG (main) [com.microsoft.azure.sdk.iot.device.DeviceClient] - Initialized a DeviceClient instance using SDK version 2.0.3 2022-05-11 09:42:25,129 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.MqttIotHubConnection] - Opening MQTT connection... 2022-05-11 09:42:25,150 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.Mqtt] - Sending MQTT CONNECT packet... 2022-05-11 09:42:25,982 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.Mqtt] - Sent MQTT CONNECT packet was acknowledged 2022-05-11 09:42:25,983 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.Mqtt] - Sending MQTT SUBSCRIBE packet for topic devices/java-device-01/messages/devicebound/# 2022-05-11 09:42:26,068 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.Mqtt] - Sent MQTT SUBSCRIBE packet for topic devices/java-device-01/messages/devicebound/# was acknowledged 2022-05-11 09:42:26,068 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.MqttIotHubConnection] - MQTT connection opened successfully 2022-05-11 09:42:26,070 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - The connection to the IoT Hub has been established 2022-05-11 09:42:26,071 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Updating transport status to new status CONNECTED with reason CONNECTION_OK 2022-05-11 09:42:26,071 DEBUG (main) [com.microsoft.azure.sdk.iot.device.DeviceIO] - Starting worker threads 2022-05-11 09:42:26,073 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Invoking connection status callbacks with new status details 2022-05-11 09:42:26,074 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Client connection opened successfully 2022-05-11 09:42:26,075 INFO (main) [com.microsoft.azure.sdk.iot.device.DeviceClient] - Device client opened successfully Sending message from device to IoT Hub... 2022-05-11 09:42:26,077 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Message was queued to be sent later ( Message details: Correlation Id [aaaa0000-bb11-2222-33cc-444444dddddd] Message Id [aaaa0000-bb11-2222-33cc-444444dddddd] ) Press any key to exit... 2022-05-11 09:42:26,079 DEBUG (MyExampleHub.azure-devices.net-java-device-01-ee6c362d-Cxn7a1fb819-e46d-4658-9b03-ca50c88c0440-azure-iot-sdk-IotHubSendTask) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Sending message ( Message details: Correlation Id [aaaa0000-bb11-2222-33cc-444444dddddd] Message Id [aaaa0000-bb11-2222-33cc-444444dddddd] ) 2022-05-11 09:42:26,422 DEBUG (MQTT Call: java-device-01) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - IotHub message was acknowledged. Checking if there is record of sending this message ( Message details: Correlation Id [aaaa0000-bb11-2222-33cc-444444dddddd] Message Id [aaaa0000-bb11-2222-33cc-444444dddddd] ) 2022-05-11 09:42:26,425 DEBUG (MyExampleHub.azure-devices.net-java-device-01-ee6c362d-Cxn7a1fb819-e46d-4658-9b03-ca50c88c0440-azure-iot-sdk-IotHubSendTask) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Invoking the callback function for sent message, IoT Hub responded to message ( Message details: Correlation Id [aaaa0000-bb11-2222-33cc-444444dddddd] Message Id [aaaa0000-bb11-2222-33cc-444444dddddd] ) with status OK Message sent!
Potvrzení registrace zřizování zařízení
Pokud chcete zjistit, pro které centrum IoT se vaše zařízení zřídilo, projděte si podrobnosti o registraci jednotlivé registrace, kterou jste vytvořili dříve:
Na webu Azure Portal přejděte do služby Device Provisioning.
V nabídce Nastavení vyberte Spravovat registrace.
Vyberte jednotlivé registrace. Položka registrace X.509, kterou jste vytvořili dříve, by se měla v seznamu zobrazit my-x509-device.
Vyberte položku registrace. Centrum IoT, ke kterému bylo vaše zařízení přiřazeno, a jeho ID zařízení se zobrazí ve stavu Registrace.
Ověření zařízení ve službě IoT Hub:
Na webu Azure Portal přejděte do centra IoT, ke kterému bylo vaše zařízení přiřazeno.
V nabídce Správa zařízení vyberte Zařízení.
Pokud se vaše zařízení úspěšně zřídilo, mělo by se v seznamu zobrazit ID zařízení my-x509-device s nastaveným stavem jako povoleným. Pokud zařízení nevidíte, vyberte Aktualizovat.
Důležité
Pokud jste v položce registrace pro vaše zařízení změnili počáteční stav dvojčete zařízení z výchozí hodnoty, může si zařízení požadovaný stav dvojčete vyžádat z centra a příslušně na něj reagovat. Další informace najdete v tématu Principy a použití dvojčat zařízení ve službě IoT Hub.
Vyčištění prostředků
Pokud chcete pokračovat v práci na ukázce klienta zařízení a prozkoumat ji, nevyčistit prostředky vytvořené v tomto rychlém startu. Pokud pokračovat nechcete, pomocí následujícího postupu odstraňte všechny prostředky vytvořené tímto rychlým startem.
Odstranění registrace zařízení
Zavřete na svém počítači okno výstupu ukázky klienta zařízení.
V nabídce vlevo na webu Azure Portal vyberte Všechny prostředky.
Vyberte službu Device Provisioning.
V nabídce Nastavení vyberte Spravovat registrace.
Vyberte kartu Jednotlivé registrace.
Zaškrtněte políčko vedle ID registrace zařízení, které jste zaregistrovali v tomto rychlém startu.
V horní části stránky vyberte Odstranit.
Odstranění registrace zařízení ze služby IoT Hub
V nabídce vlevo na webu Azure Portal vyberte Všechny prostředky.
Vyberte centrum IoT.
V nabídce Průzkumníky vyberte zařízení IoT.
Zaškrtněte políčko vedle ID zařízení zařízení, které jste zaregistrovali v tomto rychlém startu.
V horní části stránky vyberte Odstranit.
Další kroky
V tomto rychlém startu jste pro centrum IoT zřídili jedno zařízení pomocí jednotlivé registrace. Dále se dozvíte, jak zřídit více zařízení napříč několika rozbočovači.