Compartilhar via


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 do armazenamento local de thread, o Hub IoT apresenta certificados do 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 da Autoridade de Certificação Raiz do Microsoft RSA 2017 aos seus dispositivos para evitar interrupções caso o DigiCert Global Root G2 seja desativado inesperadamente. Embora as migrações de AC 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 AC raiz esteja comprometida ou uma migração de AC raiz de emergência seja necessária.

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

  • AC raiz do DigiCert Global G2
  • AC raiz do Microsoft RSA 2017

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

Confiança do certificado nos SDKs

O SDKs de dispositivo IoT do Azure conectar e autenticar dispositivos aos serviços de IoT do Azure. Os diferentes SDKs gerenciam certificados de maneiras diferentes dependendo do idioma e da versão, mas a maioria depende do repositório de certificados confiável 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 dão suporte ao repositório de certificados confiável:

SDK do dispositivo IoT do Azure Versões com suporte
C Todas as versões com suporte no momento
C# Todas as versões com suporte no momento
Java Versão 2.x.x e superior
Node.js Todas as versões com suporte no momento
Python Todas as versões com suporte no momento

Fixaçã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 for necessário, fixe apenas os certificados raiz.

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 a ECC confiem nas três seguintes ACs raiz:

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

Para obter links para baixar esses certificados, confira 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 com suporte 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. 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, execute 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.

    Captura de tela mostrando como ativar a imposição da TLS 1,2 durante a criação do Hub IoT

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 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 do TLS será recusado se a mensagem ClientHello não listar nenhuma das criptografias 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 configurados para aceitar apenas o TLS 1.2 também impõem o uso dos seguintes conjuntos de criptografia 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 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). Nesse caso, o Hub IoT tenta seguir a preferência do cliente, mas eventualmente negocia o pacote de criptografia com ServerHello.

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

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

Idioma 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

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