Partilhar via


Suporte a Transport Layer Security (TLS) no Hub IoT

O Hub IoT usa TLS (Transport Layer Security) para proteger conexões de dispositivos e serviços IoT. Três versões do protocolo TLS são suportadas atualmente, ou seja, as versões 1.0, 1.1 e 1.2.

TLS 1.0 e 1.1 são considerados legados e estão planejados para descontinuação. Para obter mais informações, consulte Substituindo o TLS 1.0 e 1.1 para o Hub IoT. Para evitar problemas futuros, use o TLS 1.2 como a única versão do TLS ao se conectar ao Hub IoT.

Certificado TLS do servidor do Hub IoT

Durante um handshake TLS, o Hub IoT apresenta certificados de servidor com chave RSA para conectar clientes. Todos os hubs IoT na nuvem global do Azure usam o certificado TLS emitido pelo DigiCert Global Root G2.

Também recomendamos adicionar os certificados Microsoft RSA Root Certificate Authority 2017 aos seus dispositivos para evitar interrupções caso o DigiCert Global Root G2 seja desativado inesperadamente. Embora as migrações de autoridade de certificação raiz sejam raras, para resiliência no cenário de segurança moderno, você deve preparar seu cenário de IoT para o evento improvável de que uma autoridade de certificação raiz seja comprometida ou uma migração de autoridade de certificação raiz de emergência seja necessária.

É altamente recomendável que todos os dispositivos confiem nas seguintes CAs raiz:

  • DigiCert Global G2 raiz CA
  • Raiz do Microsoft RSA CA 2017

Para obter links para baixar esses certificados, consulte Detalhes da Autoridade de Certificação do Azure.

Confiança de certificado nos SDKs

Os SDKs de dispositivo do Azure IoT conectam e autenticam dispositivos aos serviços do Azure IoT. Os diferentes SDKs gerenciam certificados de maneiras diferentes, dependendo do idioma e da versão, mas a maioria depende do armazenamento de certificados confiáveis do dispositivo, em vez de fixar certificados diretamente na base de código. Essa abordagem fornece flexibilidade e resiliência para lidar com alterações futuras em certificados raiz.

A tabela a seguir resume quais versões do SDK oferecem suporte ao armazenamento de certificados confiáveis:

Azure IoT Device SDK Versões suportadas
C Todas as versões atualmente suportadas
C# Todas as versões atualmente suportadas
Java Versão 2.x.x e superior
Node.js Todas as versões atualmente suportadas
Python Todas as versões atualmente suportadas

Fixação do certificado

A fixação e filtragem de certificados do servidor TLS (também conhecidos como certificados folha) e certificados intermediários associados aos pontos de extremidade do Hub IoT é desencorajada, pois a Microsoft frequentemente rola esses certificados com pouco ou nenhum aviso. Se for necessário, fixe apenas os certificados raiz.

Certificado TLS do servidor ECC (Elliptic Curve Cryptography) (visualização)

O certificado TLS do servidor ECC do Hub IoT está disponível para visualização pública. Embora ofereça segurança semelhante aos certificados RSA, a validação de certificados ECC (com pacotes de codificação somente ECC) usa até 40% menos computação, memória e largura de banda. Essas economias são importantes para dispositivos IoT por causa de seus perfis e memória menores, e para suportar casos de uso em ambientes de largura de banda de rede limitados.

É altamente recomendável que todos os dispositivos que usam ECC confiem nas duas CAs raiz a seguir:

  • DigiCert Global G3 raiz CA
  • Raiz do Microsoft RSA CA 2017

Para obter links para baixar esses certificados, consulte Detalhes da Autoridade de Certificação do Azure.

Para visualizar o certificado do servidor ECC do Hub IoT:

  1. Crie um novo hub IoT com o modo de visualização ativado.
  2. Configure seu cliente para incluir apenas pacotes de codificação ECDSA e excluir quaisquer pacotes RSA . Estes são os pacotes de codificação suportados para a visualização pública do certificado 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. Conecte seu cliente ao hub IoT de visualização.

Aplicação do TLS 1.2 disponível em regiões selecionadas

Para maior segurança, configure seus Hubs IoT para permitir apenas conexões de cliente que usam TLS versão 1.2 e para impor o uso de pacotes de codificação. Este recurso só é suportado nestas regiões:

  • E.U.A. Leste
  • E.U.A. Centro-Sul
  • E.U.A. Oeste 2
  • US Gov - Arizona
  • US Gov Virginia (o suporte a TLS 1.0/1.1 não está disponível nesta região - a imposição do TLS 1.2 deve estar habilitada ou a criação do hub IoT falha)

Para habilitar a imposição do TLS 1.2, siga as etapas em Criar um hub IoT no portal do Azure, exceto

  • Escolha uma região de uma na lista acima.

  • Em Gerenciamento -> Avançado -> Transport Layer Security (TLS) -> Versão mínima do TLS, selecione 1.2. Essa configuração só aparece para o hub IoT criado na região suportada.

    Captura de tela mostrando como ativar a imposição do TLS 1.2 durante a criação do hub IoT

Para usar o modelo ARM para criação, provisione um novo Hub IoT em qualquer uma das regiões suportadas e defina a minTlsVersion propriedade como 1.2 na especificação do recurso:

{
    "$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
            }
        }
    ]
}

O recurso do Hub IoT criado usando essa configuração recusa clientes de dispositivo e serviço que tentam se conectar usando as versões 1.0 e 1.1 do TLS. Da mesma forma, o handshake TLS será recusado se a ClientHello mensagem não listar nenhuma das cifras recomendadas.

Nota

A minTlsVersion propriedade é somente leitura e não pode ser alterada depois que o recurso do Hub IoT for criado. Portanto, é essencial que você teste e valide adequadamente se todos os seus dispositivos e serviços IoT são compatíveis com TLS 1.2 e as cifras recomendadas com antecedência.

Após failovers, a minTlsVersion propriedade do seu Hub IoT permanecerá efetiva na região pós-failover emparelhada geograficamente.

Conjuntos de cifras

Os Hubs IoT configurados para aceitar apenas TLS 1.2 também impõem o uso dos seguintes pacotes de codificação recomendados:

  • 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

Para Hubs IoT não configurados para imposição de TLS 1.2, o TLS 1.2 ainda funciona com os seguintes pacotes de criptografia:

  • 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(Esta cifra será preterida em 10/01/2022 e não será mais usada para apertos de mão TLS)

Um cliente pode sugerir uma lista de pacotes de codificação mais altos para usar durante ClientHelloo . No entanto, alguns deles podem não ser suportados pelo Hub IoT (por exemplo, ECDHE-ECDSA-AES256-GCM-SHA384). Neste caso, o Hub IoT tenta seguir a preferência do cliente, mas eventualmente negocia o pacote de codificação com ServerHelloa .

Configuração TLS para SDK e IoT Edge

Use os links a seguir para configurar o TLS 1.2 e as cifras permitidas em SDKs de cliente do Hub IoT.

Idioma Versões que suportam TLS 1.2 Documentação
C Tag 2019-12-11 ou mais recente Ligação
Python Versão 2.0.0 ou mais recente Ligação
C# Versão 1.21.4 ou mais recente Ligação
Java Versão 1.19.0 ou mais recente Ligação
NodeJS Versão 1.12.2 ou mais recente Ligação

Os dispositivos IoT Edge podem ser configurados para usar TLS 1.2 ao se comunicar com o Hub IoT. Para isso, use a página de documentação do IoT Edge.

Autenticação do dispositivo

Após um handshake TLS bem-sucedido, o Hub IoT pode autenticar um dispositivo usando uma chave simétrica ou um certificado X.509. Para autenticação baseada em certificado, pode ser qualquer certificado X.509, incluindo ECC. O Hub IoT valida o certificado em relação à impressão digital ou à autoridade de certificação (CA) fornecida. Para saber mais, consulte Certificados X.509 suportados.

Suporte TLS mútuo

A autenticação TLS mútua garante que o cliente autentique o certificado do servidor (Hub IoT) e o servidor (Hub IoT) autentique o certificado do cliente X.509 ou a impressão digital X.509. A autorização é executada pelo Hub IoT após a conclusão da autenticação .

Para protocolos AMQP e MQTT, o Hub IoT solicita um certificado de cliente no handshake TLS inicial. Se for fornecido, o Hub IoT autentica o certificado do cliente e o cliente autentica o certificado do Hub IoT. Esse processo é chamado de autenticação TLS mútua. Quando o Hub IoT recebe um pacote de conexão MQTT ou um link AMQP é aberto, o Hub IoT executa a autorização para o cliente solicitante e determina se o cliente requer autenticação X.509. Se a autenticação TLS mútua foi concluída e o cliente está autorizado a se conectar como o dispositivo, ela é permitida. No entanto, se o cliente exigir autenticação X.509 e a autenticação do cliente não tiver sido concluída durante o handshake TLS, o Hub IoT rejeitará a conexão.

Para o protocolo HTTP, quando o cliente faz sua primeira solicitação, o Hub IoT verifica se o cliente requer autenticação X.509 e se a autenticação do cliente foi concluída, o Hub IoT executa a autorização. Se a autenticação do cliente não estiver concluída, o Hub IoT rejeitará a conexão

Negociação de comprimento máximo de fragmento TLS (visualização)

O Hub IoT também oferece suporte à negociação de comprimento máximo de fragmento TLS, que às vezes é conhecida como negociação de tamanho de quadro TLS. Esta funcionalidade está em pré-visualização pública.

Use esse recurso para especificar o comprimento máximo do fragmento de texto sem formatação para um valor menor do que os 2^14 bytes padrão. Uma vez negociado, o Hub IoT e o cliente começam a fragmentar as mensagens para garantir que todos os fragmentos sejam menores do que o comprimento negociado. Esse comportamento é útil para dispositivos com restrição de memória ou computação. Para saber mais, consulte as especificações oficiais da extensão TLS.

O suporte oficial do SDK para este recurso de visualização pública ainda não está disponível. Para começar

  1. Crie um novo hub IoT com o modo de visualização ativado.
  2. Ao usar OpenSSL, chame SSL_CTX_set_tlsext_max_fragment_length para especificar o tamanho do fragmento.
  3. Conecte seu cliente à visualização do Hub IoT.

Próximos passos