Jak używać certyfikatów X.509 za pośrednictwem protokołu HTTPS bez zestawu SDK

W tym artykule z instrukcjami aprowizujesz urządzenie przy użyciu certyfikatów x.509 za pośrednictwem protokołu HTTPS bez używania zestawu SDK urządzenia usługi Azure IoT DPS. Większość języków udostępnia biblioteki do wysyłania żądań HTTP, ale zamiast skupiać się na określonym języku, w tym artykule użyjesz narzędzia wiersza polecenia cURL do wysyłania i odbierania za pośrednictwem protokołu HTTPS.

Możesz wykonać kroki opisane w tym artykule na maszynie z systemem Linux lub Windows. Jeśli korzystasz z Podsystem Windows dla systemu Linux (WSL) lub na maszynie z systemem Linux, możesz wprowadzić wszystkie polecenia w systemie lokalnym w wierszu polecenia powłoki Bash. Jeśli korzystasz z systemu Windows, wprowadź wszystkie polecenia w systemie lokalnym w wierszu polecenia powłoki GitBash.

W tym artykule istnieje wiele ścieżek w zależności od typu wpisu rejestracji i certyfikatów X.509, których chcesz użyć. Po zainstalowaniu wymagań wstępnych przed kontynuowaniem zapoznaj się z omówieniem.

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.

  • Upewnij się, że na maszynie jest zainstalowany język Python w wersji 3.7 lub nowszej. Możesz sprawdzić wersję języka Python, uruchamiając polecenie python --version lub python3 --version.

  • Jeśli korzystasz z systemu Windows, zainstaluj najnowszą wersję narzędzia Git. Upewnij się, że usługa Git jest dodawana do zmiennych środowiskowych dostępnych w oknie polecenia. Zobacz Narzędzia klienckie Git firmy Software Freedom Conservancy, aby zapoznać się z najnowszą wersją git narzędzi do zainstalowania, która obejmuje powłokę Git Bash, aplikację wiersza polecenia, której można użyć do interakcji z lokalnym repozytorium Git. W systemie Windows wprowadzisz wszystkie polecenia w systemie lokalnym w wierszu polecenia powłoki GitBash.

  • Interfejs wiersza polecenia platformy Azure. Dostępne są dwie opcje uruchamiania poleceń interfejsu wiersza polecenia platformy Azure w tym artykule:

    • Użyj usługi Azure Cloud Shell — interaktywnej powłoki, która uruchamia polecenia interfejsu wiersza polecenia w przeglądarce. Ta opcja jest zalecana, ponieważ nie trzeba instalować żadnych elementów. Jeśli używasz usługi Cloud Shell po raz pierwszy, zaloguj się do witryny Azure Portal. Wykonaj kroki opisane w przewodniku Szybki start usługi Cloud Shell, aby uruchomić usługę Cloud Shell i wybrać środowisko powłoki Bash.
    • Opcjonalnie uruchom interfejs wiersza polecenia platformy Azure na komputerze lokalnym. Jeśli interfejs wiersza polecenia platformy Azure jest już zainstalowany, uruchom polecenie az upgrade , aby uaktualnić interfejs wiersza polecenia i rozszerzenia do bieżącej wersji. Aby zainstalować interfejs wiersza polecenia platformy Azure, zobacz Instalowanie interfejsu wiersza polecenia platformy Azure.
  • Jeśli używasz systemu Linux lub środowiska WSL, otwórz wiersz powłoki Bash, aby uruchomić polecenia lokalnie. Jeśli korzystasz ze środowiska systemu Windows, otwórz wiersz polecenia GitBash.

Omówienie

W tym artykule opisano trzy scenariusze, a początkowe kroki, które wykonasz, będą różne dla każdego z nich. Jeśli chcesz:

Po wykonaniu kroków dla wybranego scenariusza możesz kontynuować rejestrowanie urządzenia i wysyłanie komunikatu telemetrii.

Tworzenie certyfikatu urządzenia

W tym artykule użyjesz certyfikatu X.509 do uwierzytelniania w usłudze DPS przy użyciu rejestracji indywidualnej lub grupy rejestracji.

Jeśli używasz rejestracji indywidualnej, możesz użyć certyfikatu X.509 z podpisem własnym lub łańcucha certyfikatów składającego się z certyfikatu urządzenia oraz co najmniej jednego certyfikatu podpisywania. Jeśli używasz grupy rejestracji, musisz użyć łańcucha certyfikatów.

Ważne

W przypadku uwierzytelniania rejestracji X.509 nazwa pospolita podmiotu (CN) certyfikatu urządzenia jest używana jako identyfikator rejestracji urządzenia. Identyfikator rejestracji jest ciągiem bez uwzględniania wielkości liter znaków alfanumerycznych oraz znakami specjalnymi: '-', , '.''_', ':'. Ostatni znak musi być alfanumeryczny lub kreskowy ('-'). Usługa DPS obsługuje identyfikatory rejestracji o długości do 128 znaków; jednak nazwa pospolita podmiotu certyfikatu X.509 jest ograniczona do 64 znaków. Jeśli w poniższych krokach zmienisz nazwę pospolitą podmiotu certyfikatu urządzenia, upewnij się, że jest on zgodny z tym formatem.

Używanie certyfikatu z podpisem własnym

Aby utworzyć certyfikat z podpisem własnym do użycia z rejestracją indywidualną, przejdź do katalogu, w którym chcesz utworzyć certyfikat i wykonaj następujące kroki:

  1. Uruchom następujące polecenie:

    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"
    

    Ważne

    Dodatkowy ukośnik podany dla nazwy podmiotu (//CN=my-x509-device) jest wymagany tylko do ucieczki ciągu z usługą Git na platformach Windows.

  2. Po wyświetleniu monitu o wprowadzenie frazy przekazywania PEM użyj frazy 1234pass .

  3. Po wyświetleniu monitu Weryfikowanie — wprowadź frazę przekazywania PEM:, ponownie użyj frazy 1234 przekazywania.

    Plik certyfikatu klucza publicznego (device-cert.pem) i plik klucza prywatnego (device-key.pem) powinien zostać wygenerowany w katalogu, w którym uruchomiono openssl polecenie.

    Plik certyfikatu ma nazwę pospolitą podmiotu (CN) ustawioną na .my-x509-device

    Plik klucza prywatnego jest chroniony przez frazę pass: 1234.

  4. Plik certyfikatu jest zakodowany w formacie Base64. Aby wyświetlić nazwę pospolitą podmiotu (CN) i inne właściwości pliku certyfikatu, wprowadź następujące polecenie:

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

Korzystanie z łańcucha certyfikatów

Jeśli używasz grupy rejestracji, musisz uwierzytelnić się za pomocą łańcucha certyfikatów. W przypadku rejestracji indywidualnej można użyć łańcucha certyfikatów lub certyfikatu z podpisem własnym.

Aby utworzyć łańcuch certyfikatów, postępuj zgodnie z instrukcjami w temacie Tworzenie łańcucha certyfikatów X.509. W tym artykule potrzebujesz tylko jednego urządzenia, więc możesz zatrzymać się po utworzeniu klucza prywatnego i łańcucha certyfikatów dla pierwszego urządzenia.

Po zakończeniu powinny znajdować się następujące pliki:

Certyfikat Plik opis
Certyfikat głównego urzędu certyfikacji. certs/azure-iot-test-only.root.ca.cert.pem Zostanie przekazany do usługi DPS i zweryfikowany.
Certyfikat pośredniego urzędu certyfikacji certs/azure-iot-test-only.intermediate.cert.pem Zostanie użyta do utworzenia 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 device-01 certs/device-01.cert.pem Służy do tworzenia wpisu rejestracji indywidualnej w usłudze 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.

Używanie rejestracji indywidualnej

Aby utworzyć rejestrację indywidualną do użycia w tym artykule, użyj polecenia az iot dps enrollment create .

Następujące polecenie tworzy wpis rejestracji indywidualnej z domyślnymi zasadami alokacji dla wystąpienia usługi DPS przy użyciu określonego certyfikatu urządzenia.

az iot dps enrollment create -g {resource_group_name} --dps-name {dps_name} --enrollment-id {enrollment_id} --attestation-type x509 --certificate-path {path to your certificate}
  • Zastąp nazwę grupy zasobów i wystąpienia usługi DPS.

  • Identyfikator rejestracji to identyfikator rejestracji urządzenia, a w przypadku rejestracji X.509 musi być zgodna z nazwą pospolitą podmiotu (CN) certyfikatu urządzenia.

    • Jeśli wykonano instrukcje opisane w artykule Korzystanie z certyfikatu z podpisem własnym, identyfikator rejestracji to my-x509-device.

    • Jeśli wykonano instrukcje opisane w artykule Korzystanie z łańcucha certyfikatów, identyfikator rejestracji to device-01.

  • Ścieżka certyfikatu to ścieżka do certyfikatu urządzenia.

    • Jeśli wykonano instrukcje opisane w artykule Używanie certyfikatu z podpisem własnym, nazwa pliku to device-cert.pem.

    • Jeśli wykonano instrukcje opisane w artykule Korzystanie z łańcucha certyfikatów, nazwa pliku to certs/device-01.cert.pem.

Uwaga

Jeśli używasz usługi Cloud Shell do uruchamiania poleceń interfejsu wiersza polecenia platformy Azure, możesz użyć przycisku przekazywania, aby przekazać plik certyfikatu na dysk w chmurze przed uruchomieniem polecenia .

Screenshot that shows the upload file button in Azure Cloud Shell.

Korzystanie z grupy rejestracji

Aby utworzyć grupę rejestracji do użycia w tym artykule, użyj polecenia az iot dps enrollment-group create .

Następujące polecenie tworzy wpis grupy rejestracji z domyślnymi zasadami alokacji dla wystąpienia usługi DPS przy użyciu pośredniego certyfikatu urzędu certyfikacji:

az iot dps enrollment-group create -g {resource_group_name} --dps-name {dps_name} --enrollment-id {enrollment_id} --certificate-path {path_to_your_certificate}
  • Zastąp nazwę grupy zasobów i wystąpienia usługi 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 ('-'). Może to być dowolna nazwa, której chcesz użyć dla grupy rejestracji.

  • Ścieżka certyfikatu to ścieżka do certyfikatu pośredniego. Jeśli wykonano instrukcje opisane w artykule Korzystanie z łańcucha certyfikatów, nazwa pliku to certs/azure-iot-test-only.intermediate.cert.pem.

Uwaga

Jeśli używasz usługi Cloud Shell do uruchamiania poleceń interfejsu wiersza polecenia platformy Azure, możesz użyć przycisku przekazywania, aby przekazać plik certyfikatu na dysk w chmurze przed uruchomieniem polecenia .

Screenshot that shows the upload file button in Azure Cloud Shell.

Uwaga

Jeśli wolisz, możesz utworzyć grupę rejestracji na podstawie certyfikatu podpisywania, który został wcześniej przekazany i zweryfikowany za pomocą usługi DPS (zobacz następną sekcję). W tym celu należy określić nazwę certyfikatu z parametrem --ca-name i pominąć --certificate-path parametr w poleceniu az iot dps enrollment-group create .

Przekazywanie i weryfikowanie certyfikatu podpisywania

Jeśli używasz łańcucha certyfikatów dla rejestracji indywidualnej lub grupy rejestracji, musisz przekazać i zweryfikować co najmniej jeden certyfikat w łańcuchu podpisywania certyfikatu urządzenia do usługi DPS.

  • W przypadku rejestracji indywidualnej może to być dowolny certyfikat podpisywania w łańcuchu certyfikatów urządzenia.

  • W przypadku grupy rejestracji może to być certyfikat ustawiony w grupie rejestracji lub dowolny certyfikat w łańcuchu rejestracji do i dołączanie certyfikatu głównego urzędu certyfikacji.

Aby przekazać i zweryfikować certyfikat, użyj polecenia az iot dps certificate create :

az iot dps certificate create -g {resource_group_name} --dps-name {dps_name} --certificate-name {friendly_name_for_your_certificate} --path {path_to_your_certificate} --verified true
  • Zastąp nazwę grupy zasobów i wystąpienia usługi DPS.

  • Ścieżka certyfikatu to ścieżka do certyfikatu podpisywania. W tym artykule zalecamy przekazanie certyfikatu głównego urzędu certyfikacji. Jeśli wykonano instrukcje opisane w artykule Korzystanie z łańcucha certyfikatów, nazwa pliku to certs/azure-iot-test-only.root.ca.cert.pem.

  • Nazwa certyfikatu może zawierać tylko znaki alfanumeryczne lub następujące znaki specjalne: -._. Odstępy nie są dozwolone. Na przykład "azure-iot-test-only-root".

Uwaga

Jeśli używasz usługi Cloud Shell do uruchamiania poleceń interfejsu wiersza polecenia platformy Azure, możesz użyć przycisku przekazywania, aby przekazać plik certyfikatu na dysk w chmurze przed uruchomieniem polecenia .

Screenshot that shows the upload file button in Azure Cloud Shell.

Uwaga

Kroki opisane w tej sekcji automatycznie zweryfikowały certyfikat podczas przekazywania. Można również przeprowadzić ręczną weryfikację certyfikatu. Aby dowiedzieć się więcej, zobacz Ręczne weryfikowanie pośredniego lub głównego urzędu certyfikacji.

Rejestrowanie własnego urządzenia

Aby aprowizować urządzenie za pośrednictwem usługi DPS, należy wywołać interfejs API REST rejestrowania urządzeń .

Użyj następującego polecenia curl:

curl -L -i -X PUT --cert [path_to_your_device_cert] --key [path_to_your_device_private_key] -H 'Content-Type: application/json' -H 'Content-Encoding:  utf-8' -d '{"registrationId": "[registration_id]"}' https://global.azure-devices-provisioning.net/[dps_id_scope]/registrations/[registration_id]/register?api-version=2019-03-31

Gdzie:

  • -L polecenie curl, aby postępować zgodnie z przekierowaniami HTTP.

  • –i polecenie curl, aby uwzględnić nagłówki protokołu w danych wyjściowych. Te nagłówki nie są ściśle niezbędne, ale mogą być przydatne.

  • -X PUT polecenie curl informuje, że jest to polecenie HTTP PUT. Wymagane dla tego wywołania interfejsu API.

  • --cert [path_to_your_device_cert] polecenie curl gdzie znaleźć certyfikat X.509 urządzenia. Jeśli klucz prywatny urządzenia jest chroniony przez frazę pass, możesz dodać frazę pass po ścieżce certyfikatu poprzedzonej dwukropkiem, na przykład: --cert my-device.pem:1234.

    • Jeśli używasz certyfikatu z podpisem własnym, plik certyfikatu urządzenia będzie zawierać tylko jeden certyfikat X.509. Jeśli wykonano instrukcje opisane w temacie Używanie certyfikatu z podpisem własnym, nazwa pliku to device-cert.pem , a fraza przekazywania klucza prywatnego to 1234, więc użyj polecenia --cert device-cert.pem:1234.

    • Jeśli używasz łańcucha certyfikatów, na przykład podczas uwierzytelniania za pośrednictwem grupy rejestracji, plik certyfikatu urządzenia musi zawierać prawidłowy łańcuch certyfikatów. Łańcuch certyfikatów musi zawierać certyfikat urządzenia i wszystkie certyfikaty podpisywania do i uwzględniać zweryfikowany certyfikat. Jeśli wykonano instrukcje opisane w temacie Używanie łańcucha certyfikatów do utworzenia łańcucha certyfikatów, ścieżka pliku to certs/device-01-full-chain.cert.pem, więc użyj polecenia --cert certs/device-01-full-chain.cert.pem.

  • --key [path_to_your_device_private_key] polecenie curl gdzie znaleźć klucz prywatny urządzenia.

    • Jeśli wykonano instrukcje opisane w temacie Używanie certyfikatu z podpisem własnym, nazwa pliku to device-key.pem, więc użyj polecenia --key device-cert.pem:1234.

    • Jeśli wykonano instrukcje opisane w artykule Korzystanie z łańcucha certyfikatów, ścieżka klucza to certs/device-01-full-chain.cert.pem, więc użyj polecenia --cert certs/device-01-full-chain.cert.pem.

  • -H 'Content-Type: application/json' informuje usługę DPS, że publikujemy zawartość JSON i musi mieć wartość "application/json"

  • -H 'Content-Encoding: utf-8' informuje usługę DPS o kodowaniu używanym dla naszej treści komunikatu. Ustaw odpowiednią wartość dla systemu operacyjnego/klienta; jednak zazwyczaj jest to utf-8.

  • -d '{"registrationId": "[registration_id]"}'–d, parametr to "dane" lub treść komunikatu, który publikujemy. Musi to być kod JSON w postaci "{"registrationId":"[registration_id"}". Należy pamiętać, że w przypadku elementu curl jest on owinięty pojedynczym cudzysłowem; w przeciwnym razie należy ująć podwójne cudzysłowy w formacie JSON. W przypadku rejestracji X.509 identyfikator rejestracji jest nazwą pospolitą podmiotu (CN) certyfikatu urządzenia.

  • Na koniec ostatnim parametrem jest adres URL do opublikowania. W przypadku "zwykłego" (tj. nie lokalnego) usługi DPS globalny punkt końcowy usługi DPS jest używany global.azure-devices-provisioning.net : https://global.azure-devices-provisioning.net/[dps_id_scope]/registrations/[registration_id]/register?api-version=2019-03-31. Należy pamiętać, że musisz zastąpić [dps_scope_id] wartości i [registration_id] odpowiednimi wartościami.

Przykład:

  • Jeśli wykonano instrukcje opisane w temacie Używanie certyfikatu z podpisem własnym:

    curl -L -i -X PUT --cert device-cert.pem:1234 --key device-key.pem -H 'Content-Type: application/json' -H 'Content-Encoding:  utf-8' -d '{"registrationId": "my-x509-device"}' https://global.azure-devices-provisioning.net/0ne00111111/registrations/my-x509-device/register?api-version=2021-06-01
    
  • Jeśli wykonano instrukcje opisane w temacie Korzystanie z łańcucha certyfikatów:

    curl -L -i -X PUT --cert certs/device-01-full-chain.cert.pem --key private/device-01.key.pem -H 'Content-Type: application/json' -H 'Content-Encoding:  utf-8' -d '{"registrationId": "device-01"}' https://global.azure-devices-provisioning.net/0ne00111111/registrations/device-01/register?api-version=2021-06-01
    

Pomyślne wywołanie będzie miało odpowiedź podobną do następującej:

HTTP/1.1 202 Accepted
Date: Sat, 27 Aug 2022 17:53:18 GMT
Content-Type: application/json; charset=utf-8
Transfer-Encoding: chunked
Location: https://global.azure-devices-provisioning.net/0ne00111111/registrations/my-x509-device/register
Retry-After: 3
x-ms-request-id: 05cdec07-c0c7-48f3-b3cd-30cfe27cbe57
Strict-Transport-Security: max-age=31536000; includeSubDomains

{"operationId":"5.506603669bd3e2bf.b3602f8f-76fe-4341-9214-bb6cfb891b8a","status":"assigning"}

Odpowiedź zawiera identyfikator operacji i stan. W takim przypadku stan ma wartość assigning. Rejestracja w usłudze DPS jest potencjalnie długotrwałą operacją, więc jest wykonywana asynchronicznie. Zazwyczaj sondujesz stan przy użyciu interfejsu API REST wyszukiwania stanu operacji, aby określić, kiedy urządzenie zostało przypisane lub czy wystąpił błąd.

Prawidłowe wartości stanu dla usługi DPS to:

  • assigned: wartość zwracana z wywołania stanu wskaże, do czego przypisano urządzenie.

  • assigning: operacja jest nadal uruchomiona.

  • disabled: rekord rejestracji jest wyłączony w usłudze DPS, więc nie można przypisać urządzenia.

  • failed: przypisanie nie powiodło się. W odpowiedzi zostanie errorCode zwrócony registrationState element i errorMessage , aby wskazać, co się nie powiodło.

  • unassigned

Aby wywołać interfejs API wyszukiwania stanu operacji, użyj następującego polecenia curl:

curl -L -i -X GET --cert [path_to_your_device_cert] --key [path_to_your_device_private_key] -H 'Content-Type: application/json' -H 'Content-Encoding:  utf-8' https://global.azure-devices-provisioning.net/[dps_id_scope]/registrations/[registration_id]/operations/[operation_id]?api-version=2019-03-31

Użyjesz tego samego zakresu identyfikatora, identyfikatora rejestracji oraz certyfikatu i klucza, jak pokazano w żądaniu rejestrowanie urządzenia . Użyj identyfikatora operacji zwróconego w odpowiedzi Zarejestruj urządzenie .

Na przykład następujące polecenie dotyczy certyfikatu z podpisem własnym utworzonego w temacie Używanie certyfikatu z podpisem własnym. (Należy zmodyfikować zakres identyfikatorów i identyfikator operacji).

curl -L -i -X GET --cert ./device-certPUT --cert device-cert.pem:1234 --key device-key.pem -H 'Content-Type: application/json' -H 'Content-Encoding:  utf-8' https://global.azure-devices-provisioning.net/0ne00111111/registrations/my-x509-device/operations/5.506603669bd3e2bf.b3602f8f-76fe-4341-9214-bb6cfb891b8a?api-version=2021-06-01

W poniższych danych wyjściowych przedstawiono odpowiedź urządzenia, które zostało pomyślnie przypisane. Zwróć uwagę, że status właściwość to assigned i że registrationState.assignedHub właściwość jest ustawiona na centrum IoT, w którym aprowizowano urządzenie.

HTTP/1.1 200 OK
Date: Sat, 27 Aug 2022 18:10:49 GMT
Content-Type: application/json; charset=utf-8
Transfer-Encoding: chunked
x-ms-request-id: 8f211bc5-3ed8-4c8b-9a79-e003e756e9e4
Strict-Transport-Security: max-age=31536000; includeSubDomains

{
   "operationId":"5.506603669bd3e2bf.b3602f8f-76fe-4341-9214-bb6cfb891b8a",
   "status":"assigned",
   "registrationState":{
      "x509":{
         
      },
      "registrationId":"my-x509-device",
      "createdDateTimeUtc":"2022-08-27T17:53:19.5143497Z",
      "assignedHub":"MyExampleHub.azure-devices.net",
      "deviceId":"my-x509-device",
      "status":"assigned",
      "substatus":"initialAssignment",
      "lastUpdatedDateTimeUtc":"2022-08-27T17:53:19.7519141Z",
      "etag":"IjEyMDA4NmYyLTAwMDAtMDMwMC0wMDAwLTYzMGE1YTBmMDAwMCI="
   }
}

Zanotuj identyfikator urządzenia i przypisane centrum IoT. Użyjesz ich do wysłania komunikatu telemetrii w następnej sekcji.

Wysyłanie komunikatu telemetrii

Wywołasz interfejs API REST wysyłania zdarzeń urządzenia w usłudze IoT Hub, aby wysyłać dane telemetryczne do urządzenia.

Użyj następującego polecenia curl:

curl -L -i -X POST --cert [path_to_your_device_cert] --key [path_to_your_device_private_key] -H 'Content-Type: application/json' -H 'Content-Encoding:  utf-8' -d '{"temperature": 30}' https://[assigned_iot_hub_name].azure-devices.net/devices/[device_id]/messages/events?api-version=2020-03-13

Gdzie:

  • -X POST polecenie curl informuje, że jest to polecenie HTTP POST. Wymagane dla tego wywołania interfejsu API.

  • --cert [path_to_your_device_cert] polecenie curl gdzie znaleźć certyfikat X.509 urządzenia. Jeśli klucz prywatny urządzenia jest chroniony przez frazę pass, możesz dodać frazę pass po ścieżce certyfikatu poprzedzonej dwukropkiem, na przykład: --cert my-device.pem:1234.

    • Jeśli używasz certyfikatu z podpisem własnym, plik certyfikatu urządzenia będzie zawierać tylko jeden certyfikat X.509. Jeśli wykonano instrukcje opisane w temacie Używanie certyfikatu z podpisem własnym, nazwa pliku to device-cert.pem , a fraza przekazywania klucza prywatnego to 1234, więc użyj polecenia --cert device-cert.pem:1234.

    • Jeśli używasz łańcucha certyfikatów, plik certyfikatu urządzenia musi zawierać prawidłowy łańcuch certyfikatów. Jeśli wykonano instrukcje opisane w temacie Używanie łańcucha certyfikatów do utworzenia łańcucha certyfikatów, ścieżka pliku to certs/device-01-full-chain.cert.pem, więc użyj polecenia --cert certs/device-01-full-chain.cert.pem.

  • --key [path_to_your_device_private_key] polecenie curl gdzie znaleźć klucz prywatny urządzenia.

    • Jeśli wykonano instrukcje opisane w temacie Używanie certyfikatu z podpisem własnym, nazwa pliku to device-key.pem, więc użyj polecenia --key device-cert.pem:1234.

    • Jeśli wykonano instrukcje opisane w artykule Korzystanie z łańcucha certyfikatów, ścieżka klucza to certs/device-01-full-chain.cert.pem, więc użyj polecenia --cert certs/device-01-full-chain.cert.pem.

  • -H 'Content-Type: application/json' informuje usługę IoT Hub, że publikujemy zawartość JSON i musi mieć wartość "application/json".

  • -H 'Content-Encoding: utf-8' informuje usługę IoT Hub o kodowaniu używanym dla treści komunikatu. Ustaw odpowiednią wartość dla systemu operacyjnego/klienta; jednak zazwyczaj jest to utf-8.

  • -d '{"temperature": 30}'–d, parametr to "dane" lub treść komunikatu, który publikujemy. W tym artykule publikujemy pojedynczy punkt danych temperatury. Typ zawartości został określony jako application/json, więc dla tego żądania treść to JSON. Należy pamiętać, że w przypadku elementu curl jest on owinięty pojedynczym cudzysłowem; w przeciwnym razie należy ująć podwójne cudzysłowy w formacie JSON.

  • Ostatnim parametrem jest adres URL do opublikowania. W przypadku interfejsu API wysyłania zdarzeń urządzenia adres URL to: https://[assigned_iot_hub_name].azure-devices.net/devices/[device_id]/messages/events?api-version=2020-03-13.

    • Zastąp [assigned_iot_hub_name] ciąg nazwą centrum IoT, do którego przypisano urządzenie.

    • Zastąp [device_id] element identyfikatorem urządzenia, który został przypisany podczas rejestrowania urządzenia. W przypadku urządzeń aprowizowania za pośrednictwem grup rejestracji identyfikator urządzenia będzie identyfikatorem rejestracji. W przypadku rejestracji indywidualnych można opcjonalnie określić identyfikator urządzenia inny niż identyfikator rejestracji we wpisie rejestracji.

Przykład:

  • Jeśli wykonano instrukcje opisane w temacie Używanie certyfikatu z podpisem własnym:

    curl -L -i -X POST --cert device-cert.pem:1234 --key device-key.pem -H 'Content-Type: application/json' -H 'Content-Encoding:  utf-8' -d '{"temperature": 30}' https://MyExampleHub.azure-devices.net/devices/my-x509-device/messages/events?api-version=2020-03-13
    
  • Jeśli wykonano instrukcje opisane w temacie Korzystanie z łańcucha certyfikatów:

    curl -L -i -X POST --cert certs/device-01-full-chain.cert.pem --key private/device-01.key.pem -H 'Content-Type: application/json' -H 'Content-Encoding:  utf-8' -d '{"temperature": 30}' https://MyExampleHub.azure-devices.net/devices/my-x509-device/messages/events?api-version=2020-03-13
    

Pomyślne wywołanie będzie miało odpowiedź podobną do następującej:

HTTP/1.1 204 No Content
Content-Length: 0
Vary: Origin
Server: Microsoft-HTTPAPI/2.0
x-ms-request-id: aa58c075-20d9-4565-8058-de6dc8524f14
Date: Wed, 31 Aug 2022 18:34:44 GMT

Następne kroki

  • Aby dowiedzieć się więcej na temat zaświadczania za pomocą certyfikatów X.509, zobacz Zaświadczenie certyfikatów X.509.

  • Aby dowiedzieć się więcej na temat przekazywania i weryfikowania certyfikatów X.509, zobacz Konfigurowanie zweryfikowanych certyfikatów urzędu certyfikacji.