Suporte ao protocolo (TLS) no Hub IoT

O Hub IoT usa o protocolo TLS para proteger as conexões contra dispositivos e serviços de IoT. Atualmente, três versões do protocolo TLS são compatíveis, principalmente as versões 1.0, 1.1 e 1.2.

O TLS 1.0 e o 1.1 são considerados herdados e são planejados para substituição. Para obter mais informações, confira Substituir 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 do TLS do servidor do Hub IoT

Durante um handshake TLS, o Hub IoT apresenta certificados de servidor com chave RSA para clientes que se conectam. No passado, os certificados eram todos enraizados da CA raiz da Baltimore Cybertrust. Como a raiz de Baltimore está em fim de vida, estamos no processo de migração para uma nova raiz chamada DigiCert Global G2. Essa migração afeta todos os dispositivos que atualmente se conectam ao Hub IoT. Para obter mais informações, consulte Atualização de certificado TLS da IoT.

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 três CAs raiz a seguir:

  • CA raiz do Baltimore CyberTrust
  • CA raiz do DigiCert Global G2
  • CA raiz do Microsoft RSA 2017

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

O certificado TLS do servidor de criptografia de curva elíptica (ECC) (pré-visualização)

O certificado TLS do servidor ECC do Hub IoT está disponível para versão prévia pública. Ao mesmo tempo em que oferece segurança semelhante aos certificados RSA, a validação do certificado ECC (de conjuntos de codificação somente ECC) usa até 40% menos de computação, memória e largura de banda. Estas economias são importantes para os dispositivos não agrupados IoT devido a seus perfis e memória menores e para dar suporte a casos de uso em ambientes limitados de largura de banda de rede.

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

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

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

A pré-visualização do certificado do servidor ECC do Hub IoT:

  1. Crie um novo hub IoT com o modo de pré-visualização ativado.
  2. Configure o clientepara incluirapenasconjuntos de codificação de ECDSA eexcluirqualquer RSA. Estes são os conjuntos 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 o cliente ao Hub IoT de pré- visualização.

A imposição do TLS 1,2 disponível nas regiões selecionadas

Para aumentar a segurança, é aconselhável configurar os Hubs IoT para permitirsomenteas conexões de clientes que usam a versão 1.2 do TLS e para impor o uso dascodificações recomendadas. Esta funcionalidade só tem suporte nestas regiões:

  • Leste dos EUA
  • Centro-Sul dos Estados Unidos
  • Oeste dos EUA 2
  • Governo dos EUA do Arizona
  • US Gov - Virgínia (o suporte da TLS 1.0/1.1 não está disponível nesta região-a imposição da TLS 1,2 deve ser habilitada ou o script de criação do Hub IoT falhará)

Para habilitar a imposição da TLS 1,2, siga as etapas emCriar o Hub IoT no portal do Azure,exceto

  • Escolha umaRegiãode uma na lista acima.

  • EmGerenciamento -> Avançado -> Segurança de Camada de Transporte (TLS) -> versão mínima do TLS, selecione 1.2. Esta configuração só aparece para o Hub IoT criado na região com suporte.

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

Para usar o modelo do ARM para a criação, provisione um novo Hub IoT em qualquer uma das regiões com suporte e defina aminTlsVersion propriedade1.2na especificação da funcionalidade:

{
    "$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 de Hub IoT criado usando essa configuração recusará clientes de dispositivos e serviços que tentam se conectar usando as versões 1.0 e 1.1 do TLS. Do mesmo modo, o handshake do TLS será recusado se aClientHello mensagem não listar nenhumadas codificações recomendadas.

Observação

A propriedade minTlsVersion é somente leitura e não pode ser alterada depois que o recurso de Hub IoT é criado. Portanto, é essencial que você teste e valide corretamente e com antecedência que todos os dispositivos e serviços de IoT são compatíveis com o TLS 1.2 e com as codificações recomendadas.

Após os failovers, a propriedade minTlsVersion de seu Hub IoT permanecerá efetiva na região emparelhada geograficamente após o failover.

Conjuntos de criptografia

Os Hubs IoT são configurados para aceitar somente a TLS 1.2 também impedirão o uso das seguintes codificações recomendadas:

  • 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 os Hubs IoT não configurados para imposição da TLS 1.2, a TLS 1.2 ainda funcionará com as seguintes codificações:

  • 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(Essa criptografia será preterida em 01/10/2022 e não será mais usada para handshakes TLS)

Um cliente pode sugerir uma lista de pacotes de criptografia mais altos a serem usados duranteClientHello. No entanto, alguns deles podem não estar com suporte do Hub IoT (por exemplo,ECDHE-ECDSA-AES256-GCM-SHA384). Neste caso, o Hub IoT tentará seguir a preferência do cliente, mas, eventualmente, negociará o pacote de codificação com ServerHello.

Configuração da TLS para SDK e o IoT Edge

Use os links abaixo para configurar o TLS 1.2 e as codificações permitidas nos SDKs do cliente do Hub IoT.

Linguagem Versões compatíveis com o TLS 1.2 Documentação
C Marca 2019-12-11 ou mais recente Link
Python Versão 2.0.0 ou mais recente Link
C# Versão 1.21.4 ou mais recente Link
Java Versão 1.19.0 ou mais recente Link
NodeJS Versão 1.12.2 ou mais recente Link

Dispositivos do IoT Edge podem ser configurados para usar o TLS 1.2 ao se comunicarem com o Hub IoT. Para essa finalidade, use a página de documentação do IoT Edge.

Autenticação de dispositivo

Depois de um handshake de TLS for bem-sucedido, o Hub IoT pode autenticar um dispositivo usando uma chave simétrica ou um certificado X. 509. Para a autenticação baseada em certificado, isto pode ser qualquer certificado X. 509, incluindo ECC. O Hub IoT valida o certificado mediante a impressão digital ou à AC (autoridade de certificação) fornecida por você. Para saber mais, confiracertificados X. 509 com suporte.

Suporte mútuo ao TLS

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 de cliente X.509 ou a impressão digital X.509. A autorização é executada por Hub IoT após a conclusão da autenticação.

Para os protocolos AMQP e MQTT, o Hub IoT solicita um certificado do cliente no handshake de TLS inicial. Se um 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 tiver sido concluída e o cliente estiver autorizado a conectar como o dispositivo, ele terá permissão. 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 de 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 executará a autorização. Se a autenticação do cliente não foi concluída, o Hub IoT rejeitará a conexão

Anexação de certificado

A anexação e a filtragem de certificados do servidor TLS (também conhecidos como certificados folha) e de certificados intermediários associados a pontos de extremidade do Hub IoT são altamente desencorajadas, pois a Microsoft costuma distribuir esses certificados com notificação mínima ou sem notificação. Se isso for necessário, anexe apenas os certificados raiz conforme a descrição nesta postagem no blog do Azure IoT.

Negociação de comprimento máximo do fragmento de TLS (pré-visualização)

O Hub IoT dá suporte também à negociação de comprimento máximo do fragmento TLS, que às vezes é conhecida como negociação de tamanho de quadro TLS. Esse recurso está em uma versão prévia.

Use este recurso para especificar o comprimento máximo do fragmento de texto não criptografado com um valor menor que o padrão de 2 ^ 14 bytes. 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. Este comportamento é útil para a computação ou dispositivos com restrição de memória. Para saber mais, confira aespecificação de extensão do TLS oficial.

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

  1. Crie um novo hub IoT com o modo de pré-visualização ativado.
  2. Ao usar o OpenSSL, chame oSSL_CTX_set_tlsext_max_fragment_lengthpara especificar o tamanho do fragmento.
  3. Conectar o cliente ao Hub IoT de pré- visualização.

Próximas etapas