Udostępnij za pośrednictwem


Obsługa protokołu TLS w usłudze Azure IoT Hub Device Provisioning Service (DPS)

Usługa DPS używa protokołu Transport Layer Security (TLS) do zabezpieczania połączeń z urządzeń IoT.

Bieżące wersje protokołu TLS obsługiwane przez usługę DPS to:

  • TLS 1.2

Ograniczanie połączeń do minimalnej wersji protokołu TLS

Wystąpienia usługi DPS można skonfigurować tak, aby zezwalały tylko na połączenia klienckie urządzeń używające minimalnej wersji protokołu TLS lub nowszej.

Ważne

Obecnie usługa DPS obsługuje tylko protokół TLS 1.2, więc nie ma potrzeby określania minimalnej wersji protokołu TLS podczas tworzenia wystąpienia usługi DPS. Ta funkcja jest udostępniana na potrzeby przyszłego rozszerzenia.

W tym celu należy aprowizować nowy zasób usługi DPS ustawiając minTlsVersion właściwość na 1.2 wartość w specyfikacji zasobów usługi DPS szablonu usługi Azure Resource Manager. Poniższy przykładowy kod JSON szablonu określa minTlsVersion właściwość dla nowego wystąpienia usługi DPS.

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "resources": [
        {
            "type": "Microsoft.Devices/ProvisioningServices",
            "apiVersion": "2020-01-01",
            "name": "<provide-a-valid-DPS-resource-name>",
            "location": "<any-region>",
            "properties": {
                "minTlsVersion": "1.2"
            },
            "sku": {
                "name": "S1",
                "capacity": 1
            },
        }     
    ]
}

Szablon można wdrożyć za pomocą następującego polecenia interfejsu wiersza polecenia platformy Azure.

az deployment group create -g <your resource group name> --template-file template.json

Aby uzyskać więcej informacji na temat tworzenia zasobów usługi DPS przy użyciu szablonów usługi Resource Manager, zobacz Konfigurowanie usługi DPS przy użyciu szablonu usługi Azure Resource Manager.

Zasób usługi DPS utworzony przy użyciu tej konfiguracji odrzuca urządzenia, które próbują nawiązać połączenie przy użyciu protokołu TLS w wersji 1.0 i 1.1.

Uwaga

Właściwość minTlsVersion jest tylko do odczytu i nie można jej zmienić po utworzeniu zasobu usługi DPS. Dlatego ważne jest, aby prawidłowo przetestować i zweryfikować, czy wszystkie urządzenia IoT są zgodne z protokołem TLS 1.2 i zalecanymi szyframi z wyprzedzeniem.

Uwaga

Po przejściu minTlsVersion w tryb failover właściwość usługi DPS pozostanie skuteczna w sparowanym geograficznie regionie po przejściu w tryb failover.

Wystąpienia usługi DPS wymuszają użycie następujących zalecanych i starszych zestawów szyfrowania:

Zalecane zestawy szyfrowania TLS 1.2
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256

Starsze zestawy szyfrowania

Te zestawy szyfrowania są nadal obsługiwane przez usługę DPS, ale zostaną wycofane. Jeśli to możliwe, użyj zalecanych zestawów szyfrowania.

Opcja 1 (lepsze zabezpieczenia)
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384 (uses SHA-1)
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA_P256 (uses SHA-1)
TLS_RSA_WITH_AES_256_GCM_SHA384 (lack of Perfect Forward Secrecy)
TLS_RSA_WITH_AES_128_GCM_SHA256 (lack of Perfect Forward Secrecy)
TLS_RSA_WITH_AES_256_CBC_SHA256 (lack of Perfect Forward Secrecy)
TLS_RSA_WITH_AES_128_CBC_SHA256 (lack of Perfect Forward Secrecy)
TLS_RSA_WITH_AES_256_CBC_SHA (uses SHA-1, lack of Perfect Forward Secrecy)
TLS_RSA_WITH_AES_128_CBC_SHA (uses SHA-1, lack of Perfect Forward Secrecy)
Opcja 2 (lepsza wydajność)
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA_P256 (uses SHA-1)
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384 (uses SHA-1)
TLS_RSA_WITH_AES_128_GCM_SHA256 (lack of Perfect Forward Secrecy)
TLS_RSA_WITH_AES_256_GCM_SHA384 (lack of Perfect Forward Secrecy)
TLS_RSA_WITH_AES_128_CBC_SHA256 (lack of Perfect Forward Secrecy)
TLS_RSA_WITH_AES_256_CBC_SHA256 (lack of Perfect Forward Secrecy)
TLS_RSA_WITH_AES_128_CBC_SHA (uses SHA-1, lack of Perfect Forward Secrecy)
TLS_RSA_WITH_AES_256_CBC_SHA (uses SHA-1, lack of Perfect Forward Secrecy)

Obsługa wzajemnego protokołu TLS

Gdy rejestracje usługi DPS są skonfigurowane do uwierzytelniania X.509, wzajemne protokoły TLS (mTLS) są obsługiwane przez usługę DPS.

Certyfikat TLS serwera

Podczas uzgadniania protokołu TLS usługa DPS prezentuje certyfikaty serwera z kluczem RSA do łączenia klientów. Wszystkie wystąpienia usługi DPS w globalnej chmurze platformy Azure używają certyfikatu TLS wystawionego przez globalny certyfikat G2 firmy DigiCert.

Zalecamy również dodanie certyfikatów głównego urzędu certyfikacji RSA 2017 firmy Microsoft do urządzeń, aby zapobiec zakłóceniom w przypadku nieoczekiwanego wycofania globalnego katalogu głównego G2 firmy DigiCert. Chociaż migracje głównego urzędu certyfikacji są rzadkie, aby zapewnić odporność w nowoczesnym środowisku zabezpieczeń, należy przygotować scenariusz IoT pod kątem mało prawdopodobnego zdarzenia, że główny urząd certyfikacji jest naruszony lub konieczne jest awaryjne migracji głównego urzędu certyfikacji.

Zdecydowanie zalecamy, aby wszystkie urządzenia ufały następującym głównym urzędom certyfikacji:

  • Globalny urząd certyfikacji G2 firmy DigiCert
  • Główny urząd certyfikacji RSA firmy Microsoft 2017

Aby uzyskać linki do pobierania tych certyfikatów, zobacz Szczegóły urzędu certyfikacji platformy Azure.

Zaufanie do certyfikatów w zestawach SDK

Zestawy SDK urządzeń Azure IoT łączą się i uwierzytelniają urządzenia z usługami Azure IoT. Różne zestawy SDK zarządzają certyfikatami na różne sposoby w zależności od języka i wersji, ale większość polega na zaufanym magazynie certyfikatów urządzenia, a nie przypinaniu certyfikatów bezpośrednio w bazie kodu. Takie podejście zapewnia elastyczność i odporność na obsługę przyszłych zmian w certyfikatach głównych.

Poniższa tabela zawiera podsumowanie wersji zestawu SDK obsługujących zaufany magazyn certyfikatów:

Zestaw SDK urządzenia usługi Azure IoT Obsługiwane wersje
C Wszystkie obecnie obsługiwane wersje
C# Wszystkie obecnie obsługiwane wersje
Java Wersja 2.x.x i nowsze
Node.js Wszystkie obecnie obsługiwane wersje
Python Wszystkie obecnie obsługiwane wersje

Przypinanie certyfikatu

Przypinanie certyfikatów i filtrowanie certyfikatów serwera TLS (znanych również jako certyfikaty liści) i certyfikatów pośrednich skojarzonych z punktami końcowymi usługi DPS jest odradzane, ponieważ firma Microsoft często wprowadza te certyfikaty z niewielkim wyprzedzeniem lub bez powiadomienia. Jeśli musisz, przypnij tylko certyfikaty główne.

Używanie protokołu TLS 1.2 w zestawach SDK IoT

Skorzystaj z poniższych linków, aby skonfigurować protokół TLS 1.2 i dozwolone szyfry w zestawach SDK klienta usługi Azure IoT.

Język Wersje obsługujące protokół TLS 1.2 Dokumentacja
C Tag 2019-12-11 lub nowszy Link
Python Wersja 2.0.0 lub nowsza Link
C# Wersja 1.21.4 lub nowsza Link
Java Wersja 1.19.0 lub nowsza Link
NodeJS Wersja 1.12.2 lub nowsza Link

Używanie protokołu TLS 1.2 z usługą IoT Hub

Usługę IoT Hub można skonfigurować do używania protokołu TLS 1.2 podczas komunikowania się z urządzeniami. Aby uzyskać więcej informacji, zobacz Wymuszanie protokołu TLS w usłudze IoT Hub.

Używanie protokołu TLS 1.2 z usługą IoT Edge

Urządzenia usługi IoT Edge można skonfigurować do używania protokołu TLS 1.2 podczas komunikacji z usługami IoT Hub i DPS. Aby uzyskać więcej informacji, zobacz stronę dokumentacji usługi IoT Edge.