Łączenie urządzenia podrzędnego z bramą usługi Azure IoT Edge

Dotyczy:Znacznik wyboru usługi IoT Edge 1.4 IoT Edge 1.4

Ważne

Azure IoT Edge1.4 jest obsługiwaną wersją. Jeśli korzystasz z wcześniejszej wersji, zobacz aktualizację Azure IoT Edge.

W tym miejscu znajdziesz 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. W tym miejscu 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.

Istnieją trzy ogólne kroki konfigurowania pomyślnego przezroczystego połączenia bramy. W tym artykule wyjaśniono trzeci krok.

  1. 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.

  2. 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.

  3. Połączenie urządzenia podrzędnego do urządzenia bramy i rozpocznij wysyłanie komunikatów.

Ten artykuł ułatwia zrozumienie składników połączenia urządzeń podrzędnych, takich jak:

  • Zabezpieczenia warstwy transportu (TLS) i podstawy certyfikatów.
  • Biblioteki TLS działające w różnych systemach operacyjnych, które obsługują certyfikaty inaczej.

Następnie zapoznaj się z przykładami usługi Azure IoT w preferowanym języku, aby urządzenie mogło wysyłać komunikaty do bramy.

Wymagania wstępne

Uzyskaj następujące informacje, aby przygotować urządzenie podrzędne:

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.

Informacje o protokole TLS i podstawach certyfikatów

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 internetowymi 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. Certyfikaty demonstracyjne to certyfikaty z podpisem własnym głównego urzędu certyfikacji.

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.

Zrzut ekranu przedstawiający konfigurację certyfikatu bramy.

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 jeszcze tego nie zrobiono, przenieś ten plik certyfikatu do dowolnego katalogu na urządzeniu podrzędnym. Plik można przenieść, 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.

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, upewnij się, że aplikacje, które łączą się z bramą, mogą uzyskać 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.

Zainstaluj certyfikat głównego urzędu certyfikacji w systemie Ubuntu lub Windows.

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 <file 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.

Używanie certyfikatów z zestawami SDK usługi Azure IoT

Zestawy SDK usługi Azure IoT łączą się z urządzeniem usługi IoT Edge przy użyciu prostych przykładowych aplikacji. Celem 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.

Przed rozpoczęciem korzystania z przykładów na poziomie aplikacji uzyskaj następujące elementy:

  • Usługa IoT Hub parametry połączenia z urządzenia podrzędnego została zmodyfikowana tak, aby wskazywała urządzenie bramy.

  • Wszystkie certyfikaty wymagane 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: <file path>/azure-iot-test-only.root.ca.cert.pem.

Teraz możesz używać certyfikatów z przykładem w wybranym języku:

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.

  1. 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.
  2. Upewnij się, że masz wszystkie wymagania wstępne dotyczące uruchamiania przykładu, przeglądając plik readme.md .
  3. W pliku edge_downstream_device.js zaktualizuj zmienne connectionString i edge_ca_cert_path .
  4. 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'),
};

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łączenie 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, zostanie wyświetlony wiersz podobny do Verification: OK lub Verify return code: 0 (ok).

Zrzut ekranu przedstawiający sposób weryfikowania połączenia bramy.

Rozwiązywanie problemów z połączeniem bramy

Jeśli połączenie urządzenia podrzędnego z urządzeniem bramy jest niestabilne, rozważ rozwiązanie tych pytań.

  • 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 .