Поддержка протокола TLS в Центре Интернета вещей

Центр Интернета вещей использует протокол TLS для защиты подключений от устройств и служб Интернета вещей. Сейчас поддерживаются три версии протокола TLS: 1.0, 1.1 и 1.2.

Протоколы TLS 1.0 и 1.1 считаются устаревшими, и в будущем их использование будет прекращено. Дополнительные сведения см. в статье Устаревшие протоколы TLS 1.0 и 1.1 для центра Интернета вещей. Чтобы избежать проблем в будущем, используйте TLS 1.2 в качестве единственной версии TLS при подключении к Центру Интернета вещей.

Сертификат TLS сервера Центра Интернета вещей

Во время подтверждения TLS Центр Интернета вещей предоставляет сертификаты сервера с ключом RSA для подключения клиентов. В прошлом сертификаты были коренились от Корневого ЦС Балтимора Cybertrust. Поскольку корень Балтимора находится в конце жизни, мы в процессе миграции в новый корень под названием DigiCert Global G2. Эта миграция влияет на все устройства, которые в настоящее время подключаются к Центр Интернета вещей. Дополнительные сведения см. в разделе об обновлении сертификата TLS Интернета вещей.

Хотя миграции корневого ЦС являются редкими, для обеспечения устойчивости в современном ландшафте безопасности следует подготовить сценарий Интернета вещей к маловероятному событию, что корневой ЦС скомпрометирован или требуется миграция корневого ЦС для аварийного реагирования. Настоятельно рекомендуется, чтобы все устройства доверяли следующим трем корневым ЦС:

  • Балтимор CyberTrust корневой ЦС
  • Корневой ЦС DigiCert Global G2
  • Корневой ЦС Microsoft RSA 2017

Ссылки на скачивание этих сертификатов см. в разделе "Центр сертификации Azure".

TLS-сертификат сервера Elliptic Curve Cryptography (ECC) (предварительная версия)

TLS-сертификат сервера ECC Центра Интернета вещей доступен в общедоступной предварительной версии. Обеспечивая почти тот же уровень безопасности, что и сертификаты RSA, проверка сертификата ECC (с уникальными наборами шифров) использует до 40 % меньше вычислительных ресурсов, памяти и пропускной способности. Эта экономия важна для устройств Интернета вещей из-за небольших профилей и памяти, а также для поддержки вариантов использования в средах с ограниченной пропускной способностью сети.

Настоятельно рекомендуется, чтобы все устройства, использующие ECC, доверяли следующим двум корневым ЦС:

  • Корневой ЦС DigiCert Global G3
  • Корневой ЦС Microsoft RSA 2017

Ссылки на скачивание этих сертификатов см. в разделе "Центр сертификации Azure".

Использование предварительной версии сертификата сервера ECC Центра Интернета вещей

  1. Создайте новый центр Интернета вещей с режимом предварительной версии.
  2. Настройте клиент так, чтобы он включал только наборы шифров ECDSA и не включал наборы шифров RSA. Это поддерживаемые наборы шифров для общедоступной предварительной версии сертификата ECC:
    • TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
    • TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
    • TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
    • TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
  3. Подключите клиент к Центру Интернета вещей предварительной версии.

Принудительное применение TLS 1.2 доступно в некоторых регионах

Для повышения безопасности настройте Центры Интернета вещей так, чтобы разрешать подключения клиентов только по протоколу TLS версии 1.2 и с использованием наборов шифров. Эта функция поддерживается только в следующих регионах.

  • Восточная часть США
  • Центрально-южная часть США
  • Западная часть США 2
  • US Gov (Аризона)
  • US Gov (Вирджиния) (поддержка TLS 1.0/1.1 недоступна в этом регионе — необходимо включить принудительное использование TLS 1.2, иначе не удастся создать Центр Интернета вещей)

Чтобы включить принудительное применение TLS 1.2, выполните действия, описанные в разделе Создание центра Интернета вещей на портале Azure, но внесите некоторые изменения.

  • Выберите Регион из указанного выше списка.

  • В разделе Управление -> Расширенные-> TLS -> Минимальная версия TLS выберите 1.2. Этот параметр отображается только для центра Интернета вещей, созданного в поддерживаемом регионе.

    Screenshot showing how to turn on TLS 1.2 enforcement during IoT hub creation

Чтобы использовать шаблон ARM для создания, подготовьте новый центр Интернета вещей в любом из поддерживаемых регионов и присвойте свойству minTlsVersion значение 1.2 в спецификации ресурсов:

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "resources": [
        {
            "type": "Microsoft.Devices/IotHubs",
            "apiVersion": "2020-01-01",
            "name": "<provide-a-valid-resource-name>",
            "location": "<any-of-supported-regions-below>",
            "properties": {
                "minTlsVersion": "1.2"
            },
            "sku": {
                "name": "<your-hubs-SKU-name>",
                "tier": "<your-hubs-SKU-tier>",
                "capacity": 1
            }
        }
    ]
}

Созданный с такой конфигурацией ресурс Центра Интернета вещей будет отклонять попытки подключения от устройств и служб с использованием TLS версий 1.0 и 1.1. Аналогичным образом подтверждение TLS отклоняется, если в сообщении приветствия ClientHello нет ни одного из рекомендуемых шифров.

Примечание.

Свойство minTlsVersion доступно только для чтения. После создания ресурса Центра Интернета вещей изменить это свойство нельзя. Поэтому важно заранее убедиться, что все ваши устройства и службы Интернета вещей совместимы с TLS 1.2 и рекомендуемыми шифрами.

После отработки отказа свойство minTlsVersion Центра Интернета вещей останется в силе в регионе, географически связанном с исходным.

Комплекты шифров

Центры Интернета вещей, настроенные на прием подключений только по протоколу TLS 1.2, также будут требовать использования следующих рекомендуемых наборов шифров:

  • TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
  • TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
  • TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
  • TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384

В центрах Интернета вещей, для которых не настроено требование использовать только протокол TLS 1.2, версия протокола 1.2 будет работать со следующими наборами шифров:

  • TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
  • TLS_DHE_RSA_WITH_AES_256_GCM_SHA384
  • TLS_DHE_RSA_WITH_AES_128_GCM_SHA256
  • TLS_RSA_WITH_AES_256_GCM_SHA384
  • TLS_RSA_WITH_AES_128_GCM_SHA256
  • TLS_RSA_WITH_AES_256_CBC_SHA256
  • TLS_RSA_WITH_AES_128_CBC_SHA256
  • TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
  • TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
  • TLS_RSA_WITH_AES_256_CBC_SHA
  • TLS_RSA_WITH_AES_128_CBC_SHA
  • TLS_RSA_WITH_3DES_EDE_CBC_SHA(Этот шифр будет считаться устаревшим начиная с 01.10.2022 и больше не будет использоваться для подтверждения TLS.)

Клиент может предложить список наборов шифров более поздних версий для использования во время ClientHello. Однако некоторые из них могут не поддерживаться Центром Интернета вещей (например, ECDHE-ECDSA-AES256-GCM-SHA384). В этом случае Центр Интернета вещей попытается следовать предпочтениям клиента, но в конечном итоге согласует набор шифров с ServerHello.

Конфигурация TLS для пакета SDK и IoT Edge

Используйте приведенные ниже ссылки, чтобы настроить TLS 1.2 и разрешенные шифры в пакетах SDK для клиента Центра Интернета вещей.

Язык Версии, поддерживающие TLS 1.2 Документация
О Тег 2019-12-11 или более новый Ссылка
Python Версия 2.0.0 или более новая Ссылка
C# Версия 1.21.4 или более новая Ссылка
Java Версия 1.19.0 или более новая Ссылка
NodeJS Версия 1.12.2 или более новая Ссылка

Устройства IoT Edge можно настроить для использования TLS 1.2 при обмене данными с Центром Интернета вещей. Дополнительные сведения см. на странице документации IoT Edge.

Проверка подлинности устройства

После успешного подтверждения TLS Центр Интернета вещей может проверить подлинность устройства с помощью симметричного ключа или сертификата X.509. Для проверки подлинности на основе сертификата можно использовать любой сертификат X.509, в том числе ECC. Центр Интернета вещей проверяет сертификат по отпечатку или указанному центру сертификации. Дополнительные сведения см. в разделе Поддерживаемые сертификаты X.509.

Взаимная поддержка TLS

Взаимная проверка подлинности TLS гарантирует, что клиент проходит проверку подлинности сертификата сервера (Центр Интернета вещей), а сервер (Центр Интернета вещей) выполняет проверку подлинности сертификата клиента X.509 или отпечатка X.509. Авторизация выполняется Центр Интернета вещей после завершения проверки подлинности.

Для протоколов AMQP и MQTT Центр Интернета вещей запрашивает сертификат клиента в первоначальном подтверждении TLS. Если он указан, Центр Интернета вещей проверяет подлинность сертификата клиента, а клиент выполняет проверку подлинности сертификата Центр Интернета вещей. Этот процесс называется взаимной проверкой подлинности TLS. Когда Центр Интернета вещей получает пакет подключения MQTT или откроется ссылка AMQP, Центр Интернета вещей выполняет авторизацию для запрашивающего клиента и определяет, требуется ли проверка подлинности X.509. Если взаимная проверка подлинности TLS завершена, и клиент авторизован для подключения как устройства, это разрешено. Однако если клиенту требуется проверка подлинности X.509 и проверка подлинности клиента не завершена во время подтверждения TLS, то Центр Интернета вещей отклоняет подключение.

Для протокола HTTP, когда клиент выполняет свой первый запрос, Центр Интернета вещей проверка, если клиенту требуется проверка подлинности X.509 и если проверка подлинности клиента завершена, Центр Интернета вещей выполняет авторизацию. Если проверка подлинности клиента не завершена, Центр Интернета вещей отклоняет подключение.

Привязка к сертификату

Привязка к сертификату и фильтрация сертификатов TLS-сервера (сертификаты LEAF) и промежуточных сертификатов, связанных с конечными точками Центра Интернета вещей, не рекомендуется ни в коих случаях, так как корпорация Майкрософт выпускает эти сертификаты без уведомления или с минимальной информацией о них. Если необходимо, привяжите только корневые сертификаты, как описано в этой записи блога Azure IoT.

Согласование максимальной длины фрагмента TLS (предварительная версия)

Центр Интернета вещей также поддерживает согласование максимальной длины фрагмента TLS, которое иногда называют согласованием размера кадра TLS. Эта функция предоставляется в общедоступной предварительной версии.

Используйте эту функцию, чтобы указать максимальную длину фрагмента в виде открытого текста, значение которого меньше значения по умолчанию 2^14 байт. После согласования Центр Интернета вещей и клиент начинают фрагментирование сообщений, чтобы все фрагменты были меньше согласованной длины. Такое поведение полезно для устройств с ограниченным объемом памяти или вычислительных ресурсов. Дополнительные сведения см. в официальной спецификации расширения TLS.

Официальная поддержка пакета SDK для этой общедоступной предварительной версии пока недоступна. Начало работы

  1. Создайте новый центр Интернета вещей с режимом предварительной версии.
  2. При использовании OpenSSL вызовите SSL_CTX_set_tlsext_max_fragment_length, чтобы указать размер фрагмента.
  3. Подключите клиент к Центру Интернета вещей предварительной версии.

Следующие шаги