Suporte do Transport Layer Security (TLS) no Hub IoT

Hub IoT utiliza o Transport Layer Security (TLS) para proteger ligações de dispositivos e serviços IoT. Atualmente, são suportadas três versões do protocolo TLS, nomeadamente as versões 1.0, 1.1 e 1.2.

O TLS 1.0 e o 1.1 são considerados legados e estão previstos para depreciação. Para obter mais informações, veja Preterir o TLS 1.0 e 1.1 para Hub IoT. Para evitar problemas futuros, utilize o TLS 1.2 como a única versão do TLS ao ligar ao Hub IoT.

Certificado TLS do servidor do Hub IoT

Durante um handshake do TLS, Hub IoT apresenta certificados de servidor com chave RSA para ligar clientes. A sua raiz é a AC de Raiz cybertrust de Baltimore. Como a raiz de Baltimore está no fim da vida, vamos migrar para uma nova raiz chamada DigiCert Global G2. Esta alteração afetará todos os dispositivos atualmente ligados ao Hub IoT. Para se preparar para esta migração e para todos os outros detalhes, veja Atualização do certificado do IoT TLS.

Certificado TLS do servidor Eliptic Curve Cryptography (ECC) (pré-visualização)

Hub IoT certificado TLS do servidor ECC está disponível para pré-visualização pública. Ao mesmo tempo que oferece segurança semelhante aos certificados RSA, a validação de certificadoS ECC (com conjuntos de cifras apenas ECC) utiliza até 40% menos computação, memória e largura de banda. Estas poupanças são importantes para os dispositivos IoT devido aos perfis e memória mais pequenos e para suportar casos de utilização em ambientes limitados de largura de banda de rede. A raiz do certificado de servidor ECC é DigiCert Global Root G3.

Para pré-visualizar o certificado de servidor ECC do Hub IoT:

  1. Crie um novo hub IoT com o modo de pré-visualização ativado.
  2. Configure o seu cliente para incluir apenas conjuntos de cifras ECDSA e excluir quaisquer conjuntos de cifras RSA. Estes são os conjuntos de cifras suportados para a pré-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. Ligue o cliente ao hub IoT de pré-visualização.

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

Para maior segurança, configure os Hubs IoT para permitir apenas ligações de cliente que utilizem a versão 1.2 do TLS e para impor a utilização de conjuntos de cifras. Esta funcionalidade só é suportada 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 do TLS 1.0/1.1 não está disponível nesta região – a imposição do TLS 1.2 tem de estar ativada ou a criação do hub IoT falha)

Para ativar a imposição do TLS 1.2, siga os passos em Criar hub IoT no portal do Azure, exceto

  • Selecione uma Região a partir de uma na lista acima.

  • Em Gestão –> Avançada –> Transport Layer Security (TLS) –> Versão mínima do TLS, selecione 1.2. Esta definição só é apresentada para o hub IoT criado na região suportada.

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

Para utilizar o modelo arm para criação, aprovisione uma nova 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 criado Hub IoT com esta configuração irá recusar clientes de dispositivos e serviços que tentam ligar-se com as versões TLS 1.0 e 1.1. Da mesma forma, o handshake TLS será recusado se a ClientHello mensagem não listar nenhuma das cifras recomendadas.

Nota

A minTlsVersion propriedade é só de leitura e não pode ser alterada quando o recurso Hub IoT for criado. Por conseguinte, é essencial testar e validar corretamente que todos os seus dispositivos e serviços IoT são compatíveis com o TLS 1.2 e as cifras recomendadas com antecedência.

Após as ativações pós-falha, a minTlsVersion propriedade do seu Hub IoT permanecerá em vigor na região geocon emparelhada após a ativação pós-falha.

Conjuntos de cifras

Os Hubs IoT configurados para aceitar apenas o TLS 1.2 também imporão a utilização dos seguintes conjuntos de cifras 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 os Hubs IoT não configurados para a imposição do TLS 1.2, o TLS 1.2 ainda funciona com os seguintes conjuntos de cifras:

  • 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 a 01/10/2022 e deixará de ser utilizada para handshakes TLS)

Um cliente pode sugerir uma lista de conjuntos de cifras superiores a utilizar durante ClientHelloo . No entanto, alguns deles podem não ser suportados por Hub IoT (por exemplo, ECDHE-ECDSA-AES256-GCM-SHA384). Neste caso, Hub IoT tentará seguir a preferência do cliente, mas eventualmente negociará o conjunto de cifras com ServerHello.

Configuração do TLS para SDK e IoT Edge

Utilize as ligações abaixo para configurar o TLS 1.2 e as cifras permitidas em SDKs de cliente Hub IoT.

Linguagem Versões que suportam o TLS 1.2 Documentação
C Etiqueta 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

IoT Edge dispositivos podem ser configurados para utilizar o TLS 1.2 ao comunicar com Hub IoT. Para esta finalidade, utilize a página de documentação IoT Edge.

Autenticação do dispositivo

Após um handshake TLS bem-sucedido, Hub IoT pode autenticar um dispositivo com uma chave simétrica ou um certificado X.509. Para autenticação baseada em certificados, pode ser qualquer certificado X.509, incluindo ECC. Hub IoT valida o certificado em relação ao thumbprint ou autoridade de certificação (AC) que fornecer. Para saber mais, veja Certificados X.509 suportados.

Suporte de TLS Mútuo

A autenticação TLS Mútua garante que o cliente autentica o certificado do servidor (Hub IoT) e o servidor (Hub IoT) autentica o certificado de cliente X.509 ou o thumbprint X.509. A autorização é efetuada por Hub IoT após a conclusão da autenticação.

Para protocolos AMQP e MQTT, Hub IoT pede um certificado de cliente no handshake TLS inicial. Se for fornecido um, Hub IoT autentica o certificado de cliente e o cliente autentica o certificado de Hub IoT. Este processo chama-se autenticação TLS mútua. Quando Hub IoT recebe um pacote de ligação MQTT ou é aberta uma ligação AMQP, Hub IoT efetua a autorização para o cliente requerente e determina se o cliente necessita de autenticação X.509. Se a autenticação TLS mútua tiver sido concluída e o cliente estiver autorizado a ligar-se como o dispositivo, é permitido. No entanto, se o cliente exigir autenticação X.509 e a autenticação de cliente não tiver sido concluída durante o handshake TLS, Hub IoT rejeita a ligação.

Para o protocolo HTTP, quando o cliente faz o seu primeiro pedido, Hub IoT verifica se o cliente necessita de autenticação X.509 e se a autenticação do cliente foi concluída, Hub IoT efetua a autorização. Se a autenticação do cliente não tiver sido concluída, Hub IoT rejeita a ligação

Afixação de certificados

A afixação e filtragem de certificados de servidor TLS (também conhecidos como certificados de folha) e certificados intermédios associados a pontos finais Hub IoT é fortemente desencorajada, uma vez que a Microsoft lança frequentemente estes certificados com pouco ou nenhum aviso. Se for necessário, afixe apenas os certificados de raiz, conforme descrito nesta publicação de blogue do Azure IoT.

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

Hub IoT também suporta a negociação do comprimento máximo de fragmentos do TLS, que por vezes é conhecida como negociação do tamanho do fotograma TLS. Esta funcionalidade está em pré-visualização pública.

Utilize esta funcionalidade para especificar o comprimento máximo de fragmento de texto simples para um valor menor do que os 2^14 bytes predefinidos. Uma vez negociados, Hub IoT e o cliente começam a fragmentar mensagens para garantir que todos os fragmentos são menores do que o comprimento negociado. Este comportamento é útil para computação ou dispositivos restritos de memória. Para saber mais, veja a especificação oficial da extensão TLS.

O suporte oficial do SDK para esta funcionalidade de pré-visualização 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 utilizar o OpenSSL, chame SSL_CTX_set_tlsext_max_fragment_length para especificar o tamanho do fragmento.
  3. Ligue o cliente à Hub IoT de pré-visualização.

Passos seguintes