Łączenie urządzenia podrzędnego z bramą usługi Azure IoT Edge
Dotyczy: IoT Edge 1.1
Ważne
Data zakończenia wsparcia usługi IoT Edge 1.1 wynosiła 13 grudnia 2022 r. Zapoznaj się z cyklem życia produktów firmy Microsoft, aby uzyskać informacje na temat sposobu obsługi tego produktu lub interfejsu API albo tej usługi lub technologii. Aby uzyskać więcej informacji na temat aktualizowania do najnowszej wersji usługi IoT Edge, zobacz Aktualizowanie usługi IoT Edge.
Ten artykuł zawiera instrukcje dotyczące nawiązywania zaufanego połączenia między urządzeniami podrzędnymi i przezroczystymi bramami usługi IoT Edge. W scenariuszu przezroczystej bramy co najmniej jedno urządzenie może przekazywać komunikaty za pośrednictwem jednego urządzenia bramy, które utrzymuje połączenie z usługą IoT Hub.
Istnieją trzy ogólne kroki konfigurowania pomyślnego przezroczystego połączenia bramy. W tym artykule opisano trzeci krok:
Skonfiguruj urządzenie bramy jako serwer, aby urządzenia podrzędne mogły się z nim bezpiecznie łączyć. Skonfiguruj bramę w celu odbierania komunikatów z urządzeń podrzędnych i kierowania ich do odpowiedniego miejsca docelowego. Aby zapoznać się z tymi krokami, zobacz Konfigurowanie urządzenia usługi IoT Edge w celu działania jako przezroczystej bramy.
Utwórz tożsamość urządzenia dla urządzenia podrzędnego, aby umożliwić jego uwierzytelnianie za pomocą usługi IoT Hub. Skonfiguruj urządzenie podrzędne do wysyłania komunikatów za pośrednictwem urządzenia bramy. Aby uzyskać te kroki, zobacz Uwierzytelnianie urządzenia podrzędnego w usłudze Azure IoT Hub.
Połącz urządzenie podrzędne z urządzeniem bramy i rozpocznij wysyłanie komunikatów.
W tym artykule omówiono podstawowe pojęcia dotyczące połączeń urządzeń podrzędnych i przedstawiono sposób konfigurowania urządzeń podrzędnych przez:
- Objaśnienie podstaw zabezpieczeń warstwy transportu (TLS) i certyfikatów.
- Wyjaśnienie, jak działają biblioteki TLS w różnych systemach operacyjnych i jak każdy system operacyjny zajmuje się certyfikatami.
- Przewodnik po przykładach usługi Azure IoT w kilku językach, aby ułatwić rozpoczęcie pracy.
W tym artykule terminy bramy i bramy usługi IoT Edge odnoszą się do urządzenia usługi IoT Edge skonfigurowanego jako przezroczysta brama.
Uwaga
Urządzenie podrzędne emituje dane bezpośrednio do Internetu lub do urządzeń bramy (usługa IoT Edge jest włączona lub nie). Urządzenie podrzędne może być urządzeniem podrzędnym lub urządzeniem bramy w topologii zagnieżdżonej.
Wymagania wstępne
- Plik certyfikatu głównego urzędu certyfikacji, który został użyty do wygenerowania certyfikatu urzędu certyfikacji urządzenia w temacie Konfigurowanie urządzenia usługi IoT Edge do działania jako przezroczysta brama dostępna na urządzeniu podrzędnym. Urządzenie podrzędne używa tego certyfikatu do weryfikowania tożsamości urządzenia bramy. Jeśli użyto certyfikatów demonstracyjnych, certyfikat głównego urzędu certyfikacji nosi nazwę azure-iot-test-only.root.ca.cert.pem.
- Zmodyfikowana parametry połączenia wskazująca urządzenie bramy zgodnie z wyjaśnieniem w temacie Uwierzytelnianie urządzenia podrzędnego w usłudze Azure IoT Hub.
Przygotowywanie urządzenia podrzędnego
Urządzenie podrzędne może być dowolną aplikacją lub platformą, która ma tożsamość utworzoną za pomocą usługi w chmurze usługi Azure IoT Hub. W wielu przypadkach te aplikacje używają zestawu SDK urządzenia Azure IoT. Urządzenie podrzędne może być nawet aplikacją działającą na samym urządzeniu bramy usługi IoT Edge. Jednak inne urządzenie usługi IoT Edge nie może być podrzędne bramy usługi IoT Edge.
Uwaga
Urządzenia IoT zarejestrowane w usłudze IoT Hub mogą używać bliźniaczych reprezentacji modułów do izolowania różnych procesów, sprzętu lub funkcji na jednym urządzeniu. Bramy usługi IoT Edge obsługują połączenia modułów podrzędnych przy użyciu uwierzytelniania klucza symetrycznego, ale nie uwierzytelniania certyfikatu X.509.
Aby połączyć urządzenie podrzędne z bramą usługi IoT Edge, potrzebne są dwie elementy:
Urządzenie lub aplikacja skonfigurowana przy użyciu urządzenia usługi IoT Hub parametry połączenia dołączane z informacjami, aby połączyć je z bramą.
Ten krok został ukończony w poprzednim artykule Uwierzytelnianie urządzenia podrzędnego w usłudze Azure IoT Hub.
Urządzenie lub aplikacja musi ufać certyfikatowi głównego urzędu certyfikacji bramy w celu zweryfikowania połączeń protokołu TLS (Transport Layer Security) z urządzeniem bramy.
Ten krok został szczegółowo opisany w pozostałej części tego artykułu. Ten krok można wykonać na jeden z dwóch sposobów: instalując certyfikat urzędu certyfikacji w magazynie certyfikatów systemu operacyjnego lub (w przypadku niektórych języków), odwołując się do certyfikatu w aplikacjach przy użyciu zestawów SDK usługi Azure IoT.
Podstawy protokołu TLS i certyfikatu
Wyzwaniem bezpiecznego łączenia urządzeń podrzędnych z usługą IoT Edge jest tak samo jak każda inna bezpieczna komunikacja klienta/serwera wykonywana przez Internet. Klient i serwer bezpiecznie komunikują się przez Internet przy użyciu zabezpieczeń warstwy transportu (TLS). Protokół TLS jest tworzony przy użyciu standardowych konstrukcji infrastruktury kluczy publicznych (PKI) nazywanych certyfikatami. Protokół TLS jest dość zaangażowaną specyfikacją i zajmuje się szeroką gamą tematów związanych z zabezpieczaniem dwóch punktów końcowych. Ta sekcja zawiera podsumowanie pojęć związanych z bezpiecznym łączeniem urządzeń z bramą usługi IoT Edge.
Gdy klient łączy się z serwerem, serwer przedstawia łańcuch certyfikatów nazywany łańcuchem certyfikatów serwera. Łańcuch certyfikatów zazwyczaj składa się z certyfikatu głównego urzędu certyfikacji, co najmniej jednego certyfikatu pośredniego urzędu certyfikacji, a na koniec samego certyfikatu serwera. Klient ustanawia relację zaufania z serwerem, kryptograficznie weryfikując cały łańcuch certyfikatów serwera. Ta weryfikacja klienta łańcucha certyfikatów serwera jest nazywana weryfikacją łańcucha serwerów. Klient wzywa serwer do udowodnienia posiadania klucza prywatnego skojarzonego z certyfikatem serwera w procesie nazywanym dowodem posiadania. Połączenie weryfikacji łańcucha serwerów i potwierdzenia posiadania jest nazywane uwierzytelnianiem serwera. Aby zweryfikować łańcuch certyfikatów serwera, klient potrzebuje kopii certyfikatu głównego urzędu certyfikacji, który został użyty do utworzenia (lub wystawienia) certyfikatu serwera. Zwykle podczas nawiązywania połączenia z witrynami sieci Web przeglądarka jest wstępnie skonfigurowana z często używanymi certyfikatami urzędu certyfikacji, dzięki czemu klient ma bezproblemowy proces.
Gdy urządzenie łączy się z usługą Azure IoT Hub, urządzenie jest klientem, a usługa w chmurze usługi IoT Hub jest serwerem. Usługa W chmurze usługi IoT Hub jest wspierana przez główny certyfikat urzędu certyfikacji o nazwie Baltimore CyberTrust Root, który jest publicznie dostępny i powszechnie używany. Ponieważ certyfikat urzędu certyfikacji usługi IoT Hub jest już zainstalowany na większości urządzeń, wiele implementacji protokołu TLS (OpenSSL, Schannel, LibreSSL) jest automatycznie używanych podczas walidacji certyfikatu serwera. Jednak urządzenie, które pomyślnie łączy się z usługą IoT Hub, może mieć problemy z próbą nawiązania połączenia z bramą usługi IoT Edge.
Gdy urządzenie łączy się z bramą usługi IoT Edge, urządzenie podrzędne jest klientem, a urządzenie bramy jest serwerem. Usługa Azure IoT Edge umożliwia tworzenie łańcuchów certyfikatów bramy, jednak ich dopasowanie. Możesz użyć certyfikatu publicznego urzędu certyfikacji, takiego jak Baltimore, lub użyć certyfikatu głównego urzędu certyfikacji z podpisem własnym (lub wewnętrznego). Certyfikaty publicznego urzędu certyfikacji często wiążą się z nimi kosztami, dlatego są zwykle używane w scenariuszach produkcyjnych. Certyfikaty urzędu certyfikacji z podpisem własnym są preferowane do programowania i testowania. Jeśli używasz certyfikatów demonstracyjnych, są to certyfikaty głównego urzędu certyfikacji z podpisem własnym.
W przypadku korzystania z certyfikatu głównego urzędu certyfikacji z podpisem własnym dla bramy usługi IoT Edge należy zainstalować go na wszystkich urządzeniach podrzędnych próbujących nawiązać połączenie z bramą lub udostępnić je wszystkim urządzeniom podrzędnym.
Aby dowiedzieć się więcej na temat certyfikatów usługi IoT Edge i niektórych implikacji produkcyjnych, zobacz Szczegóły użycia certyfikatu usługi IoT Edge.
Podaj certyfikat głównego urzędu certyfikacji
Aby zweryfikować certyfikaty urządzenia bramy, urządzenie podrzędne potrzebuje własnej kopii certyfikatu głównego urzędu certyfikacji. Jeśli użyto skryptów podanych w repozytorium git usługi IoT Edge do utworzenia certyfikatów testowych, certyfikat głównego urzędu certyfikacji nosi nazwę azure-iot-test-only.root.ca.cert.pem. Jeśli nie zostały jeszcze w ramach innych kroków przygotowywania urządzenia podrzędnego, przenieś ten plik certyfikatu do dowolnego katalogu na urządzeniu podrzędnym. Aby przenieść plik certyfikatu, możesz użyć usługi, takiej jak Azure Key Vault lub funkcji takiej jak Protokół Secure copy .
Instalowanie certyfikatów w systemie operacyjnym
Gdy certyfikat głównego urzędu certyfikacji znajduje się na urządzeniu podrzędnym, należy upewnić się, że aplikacje, które łączą się z bramą, mogą uzyskiwać dostęp do certyfikatu.
Zainstalowanie certyfikatu głównego urzędu certyfikacji w magazynie certyfikatów systemu operacyjnego zazwyczaj umożliwia większości aplikacji korzystanie z certyfikatu głównego urzędu certyfikacji. Istnieją pewne wyjątki, takie jak aplikacje NodeJS, które nie korzystają z magazynu certyfikatów systemu operacyjnego, ale raczej używają wewnętrznego magazynu certyfikatów środowiska uruchomieniowego węzła. Jeśli nie możesz zainstalować certyfikatu na poziomie systemu operacyjnego, przejdź do sekcji Używanie certyfikatów z zestawami SDK usługi Azure IoT.
Ubuntu
Poniższe polecenia są przykładem sposobu instalowania certyfikatu urzędu certyfikacji na hoście z systemem Ubuntu. W tym przykładzie przyjęto założenie, że używasz certyfikatu azure-iot-test-only.root.ca.cert.pem z artykułów dotyczących wymagań wstępnych i że certyfikat został skopiowany do lokalizacji na urządzeniu podrzędnym.
sudo cp <path>/azure-iot-test-only.root.ca.cert.pem /usr/local/share/ca-certificates/azure-iot-test-only.root.ca.cert.pem.crt
sudo update-ca-certificates
Powinien zostać wyświetlony komunikat "Trwa aktualizowanie certyfikatów w plikach /etc/ssl/certs... 1 dodane, 0 usunięte; gotowe.
Windows
Poniższe kroki to przykład instalowania certyfikatu urzędu certyfikacji na hoście systemu Windows. W tym przykładzie przyjęto założenie, że używasz certyfikatu azure-iot-test-only.root.ca.cert.pem z artykułów dotyczących wymagań wstępnych i że certyfikat został skopiowany do lokalizacji na urządzeniu podrzędnym.
Certyfikaty można zainstalować przy użyciu certyfikatu Import-Certificate programu PowerShell jako administrator:
import-certificate <file path>\azure-iot-test-only.root.ca.cert.pem -certstorelocation cert:\LocalMachine\root
Certyfikaty można również zainstalować za pomocą narzędzia certlm :
- W menu Start wyszukaj i wybierz pozycję Zarządzaj certyfikatami komputerów. Zostanie otwarte narzędzie o nazwie certlm .
- Przejdź do pozycji Certyfikaty — zaufane główne urzędy certyfikacji komputera>lokalnego.
- Kliknij prawym przyciskiem myszy pozycję Certyfikaty i wybierz pozycję Wszystkie zadania>importu. Kreator importu certyfikatów powinien zostać uruchomiony.
- Wykonaj kroki opisane zgodnie z instrukcjami i zaimportuj plik
<path>/azure-iot-test-only.root.ca.cert.pem
certyfikatu . Po zakończeniu powinien zostać wyświetlony komunikat "Pomyślnie zaimportowano".
Certyfikaty można również zainstalować programowo przy użyciu interfejsów API platformy .NET, jak pokazano w przykładzie platformy .NET w dalszej części tego artykułu.
Zazwyczaj aplikacje używają udostępnionego stosu TLS systemu Windows o nazwie Schannel , aby bezpiecznie nawiązać połączenie za pośrednictwem protokołu TLS. Usługa Schannel wymaga zainstalowania wszystkich certyfikatów w magazynie certyfikatów systemu Windows przed podjęciem próby nawiązania połączenia TLS.
Używanie certyfikatów z zestawami SDK usługi Azure IoT
W tej sekcji opisano sposób łączenia zestawów SDK usługi Azure IoT z urządzeniem usługi IoT Edge przy użyciu prostych przykładowych aplikacji. Celem wszystkich przykładów jest połączenie klienta urządzenia i wysłanie komunikatów telemetrycznych do bramy, a następnie zamknięcie połączenia i wyjście.
Przygotuj dwie rzeczy przed użyciem przykładów na poziomie aplikacji:
Usługa IoT Hub urządzenia podrzędnego parametry połączenia zmodyfikowana w celu wskazania urządzenia bramy oraz wszelkich certyfikatów wymaganych do uwierzytelniania urządzenia podrzędnego w usłudze IoT Hub. Aby uzyskać więcej informacji, zobacz Uwierzytelnianie urządzenia podrzędnego w usłudze Azure IoT Hub.
Pełna ścieżka do certyfikatu głównego urzędu certyfikacji skopiowanego i zapisanego gdzieś na urządzeniu podrzędnym.
Na przykład
<path>/azure-iot-test-only.root.ca.cert.pem
.
NodeJS
Ta sekcja zawiera przykładową aplikację do łączenia klienta urządzenia Azure IoT NodeJS z bramą usługi IoT Edge. W przypadku aplikacji NodeJS należy zainstalować certyfikat głównego urzędu certyfikacji na poziomie aplikacji, jak pokazano tutaj. Aplikacje NodeJS nie używają magazynu certyfikatów systemu.
- Pobierz przykład dla edge_downstream_device.js z repozytorium przykładów zestawu SDK urządzeń usługi Azure IoT dla Node.js przykładów.
- Upewnij się, że masz wszystkie wymagania wstępne dotyczące uruchamiania przykładu, przeglądając plik readme.md .
- W pliku edge_downstream_device.js zaktualizuj zmienne connectionString i edge_ca_cert_path .
- Zapoznaj się z dokumentacją zestawu SDK, aby uzyskać instrukcje dotyczące uruchamiania przykładu na urządzeniu.
Aby zrozumieć przykład, który jest uruchomiony, poniższy fragment kodu to sposób, w jaki zestaw SDK klienta odczytuje plik certyfikatu i używa go do ustanowienia bezpiecznego połączenia TLS:
// Provide the Azure IoT device client via setOptions with the X509
// Edge root CA certificate that was used to setup the Edge runtime
var options = {
ca : fs.readFileSync(edge_ca_cert_path, 'utf-8'),
};
.NET
W tej sekcji przedstawiono przykładową aplikację do łączenia klienta urządzenia platformy .NET usługi Azure IoT z bramą usługi IoT Edge. Jednak aplikacje platformy .NET są automatycznie w stanie używać wszystkich zainstalowanych certyfikatów w magazynie certyfikatów systemu na hostach systemów Linux i Windows.
- Pobierz przykład dla elementu EdgeDownstreamDevice z folderu przykładów usługi IoT Edge .NET.
- Upewnij się, że masz wszystkie wymagania wstępne dotyczące uruchamiania przykładu, przeglądając plik readme.md .
- W pliku Właściwości/launchSettings.json zaktualizuj zmienne DEVICE_CONNECTION_STRING i CA_CERTIFICATE_PATH. Jeśli chcesz użyć certyfikatu zainstalowanego w magazynie zaufanych certyfikatów w systemie hosta, pozostaw tę zmienną pustą.
- Zapoznaj się z dokumentacją zestawu SDK, aby uzyskać instrukcje dotyczące uruchamiania przykładu na urządzeniu.
Aby programowo zainstalować zaufany certyfikat w magazynie certyfikatów za pośrednictwem aplikacji .NET, zapoznaj się z funkcją InstallCACert() w pliku EdgeDownstreamDevice/Program.cs . Ta operacja jest idempotentna, więc można uruchomić wiele razy z tymi samymi wartościami bez dodatkowego efektu.
C
W tej sekcji przedstawiono przykładową aplikację do łączenia klienta urządzenia usługi Azure IoT C z bramą usługi IoT Edge. Zestaw C SDK może obsługiwać wiele bibliotek TLS, w tym OpenSSL, WolfSSL i Schannel. Aby uzyskać więcej informacji, zobacz zestaw SDK języka C usługi Azure IoT.
- Pobierz aplikację iotedge_downstream_device_sample z zestawu SDK urządzenia usługi Azure IoT dla przykładów języka C.
- Upewnij się, że masz wszystkie wymagania wstępne dotyczące uruchamiania przykładu, przeglądając plik readme.md .
- W pliku iotedge_downstream_device_sample.c zaktualizuj zmienne connectionString i edge_ca_cert_path .
- Zapoznaj się z dokumentacją zestawu SDK, aby uzyskać instrukcje dotyczące uruchamiania przykładu na urządzeniu.
Zestaw SDK urządzenia usługi Azure IoT dla języka C zapewnia opcję zarejestrowania certyfikatu urzędu certyfikacji podczas konfigurowania klienta. Ta operacja nie instaluje certyfikatu w dowolnym miejscu, ale używa formatu ciągu certyfikatu w pamięci. Zapisany certyfikat jest dostarczany do bazowego stosu PROTOKOŁU TLS podczas nawiązywania połączenia.
(void)IoTHubDeviceClient_SetOption(device_handle, OPTION_TRUSTED_CERT, cert_string);
Uwaga
Metoda rejestrowania certyfikatu urzędu certyfikacji podczas konfigurowania klienta może ulec zmianie w przypadku korzystania z zarządzanego pakietu lub biblioteki. Na przykład biblioteka oparta na środowisku IDE Arduino będzie wymagać dodania certyfikatu urzędu certyfikacji do tablicy certyfikatów zdefiniowanej w pliku global certs.c , a nie przy użyciu IoTHubDeviceClient_LL_SetOption
operacji.
Jeśli na hostach systemu Windows nie używasz biblioteki OpenSSL lub innej biblioteki TLS, zestaw SDK jest domyślnie używany przez usługę Schannel. Aby usługa Schannel działała, certyfikat głównego urzędu certyfikacji usługi IoT Edge powinien być zainstalowany w magazynie certyfikatów systemu Windows, a nie ustawiany przy użyciu IoTHubDeviceClient_SetOption
operacji.
Java
W tej sekcji przedstawiono przykładową aplikację do łączenia klienta urządzenia Java usługi Azure IoT z bramą usługi IoT Edge.
- Pobierz przykład dla zdarzenia send-from the Azure IoT device SDK for Java samples (Przykładowe dane dotyczące wysyłania zdarzeń z zestawu SDK urządzenia Azure IoT dla języka Java).
- Upewnij się, że masz wszystkie wymagania wstępne dotyczące uruchamiania przykładu, przeglądając plik readme.md .
- Zapoznaj się z dokumentacją zestawu SDK, aby uzyskać instrukcje dotyczące uruchamiania przykładu na urządzeniu.
Python
W tej sekcji przedstawiono przykładową aplikację w celu połączenia klienta urządzenia azure IoT Python z bramą usługi IoT Edge.
- Pobierz przykład dla send_message_downstream z zestawu SDK urządzenia usługi Azure IoT dla przykładów języka Python.
IOTHUB_DEVICE_CONNECTION_STRING
Ustaw zmienne środowiskowe iIOTEDGE_ROOT_CA_CERT_PATH
określone w komentarzach skryptu języka Python.- Zapoznaj się z dokumentacją zestawu SDK, aby uzyskać dodatkowe instrukcje dotyczące uruchamiania przykładu na urządzeniu.
Testowanie połączenia bramy
Użyj tego przykładowego polecenia na urządzeniu podrzędnym, aby przetestować, czy może nawiązać połączenie z urządzeniem bramy:
openssl s_client -connect mygateway.contoso.com:8883 -CAfile <CERTDIR>/certs/azure-iot-test-only.root.ca.cert.pem -showcerts
To polecenie testuje połączenia za pośrednictwem protokołu MQTTS (port 8883). Jeśli używasz innego protokołu, dostosuj polecenie zgodnie z potrzebami dla protokołu AMQPS (5671) lub HTTPS (443)
Dane wyjściowe tego polecenia mogą być długie, w tym informacje o wszystkich certyfikatach w łańcuchu. Jeśli połączenie zakończy się pomyślnie, zobaczysz wiersz podobny do Verification: OK
lub Verify return code: 0 (ok)
.
Rozwiązywanie problemów z połączeniem bramy
Jeśli urządzenie podrzędne ma sporadyczne połączenie z urządzeniem bramy, spróbuj wykonać następujące kroki w celu rozwiązania problemu.
- Czy nazwa hosta bramy w parametry połączenia taka sama jak wartość nazwy hosta w pliku konfiguracji usługi IoT Edge na urządzeniu bramy?
- Czy nazwa hosta bramy jest rozpoznawana jako adres IP? Sporadyczne połączenia można rozwiązać przy użyciu systemu DNS lub przez dodanie wpisu pliku hosta na urządzeniu podrzędnym.
- Czy porty komunikacyjne są otwarte w zaporze? Komunikacja oparta na używanym protokole (MQTTS:8883/AMQPS:5671/HTTPS:433) musi być możliwa między urządzeniem podrzędnym a przezroczystą usługą IoT Edge.
Następne kroki
Dowiedz się, jak usługa IoT Edge może rozszerzać możliwości trybu offline na urządzenia podrzędne .