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:
- Crie um novo hub IoT com o modo de pré-visualização ativado.
- 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
- 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.
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.2
na 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
- Crie um novo hub IoT com o modo de pré-visualização ativado.
- Ao usar o OpenSSL, chame oSSL_CTX_set_tlsext_max_fragment_lengthpara especificar o tamanho do fragmento.
- Conectar o cliente ao Hub IoT de pré- visualização.
Próximas etapas
- Para saber mais sobre segurança e controle de acesso do Hub IoT, confiraControlar o acesso ao Hub IoT.
- Para saber mais de como usar o certificado X509 para autenticação do dispositivo, confiraAutenticação do dispositivo usando certificados de AC X. 509