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.
Observação
O Hub IoT do Azure encerrará o suporte ao TLS 1.0 e 1.1 em alinhamento com o comunicado de descontinuação do serviço TLS 1.0 e 1.1 em 31 de agosto de 2025.
Portanto, é essencial que você teste e valide corretamente e com antecedência para que todos os dispositivos e serviços de IoT sejam compatíveis com o TLS 1.2 e com as criptografias recomendadas. É altamente recomendável usar o recurso mínimo de imposição de TLS como o mecanismo de teste e conformidade
Para descobrir a versão do TLS em que os dispositivos do Hub IoT estão em execução, confira guia de fim de suporte do TLS 1.0 e 1.1.
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 cliente usando o certificado de cliente X.509 ou a impressão digital X.509. O Hub IoT executa a autorização após a conclusão da autenticação.
Para protocolos AMQP (Advanced Message Queuing Protocol) e MQTT (Message Queuing Telemetry Transport), o Hub IoT solicita um certificado de cliente no handshake do 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 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 do 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 for concluída, o Hub IoT rejeitará a conexão
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 autenticação baseada em certificado, o Hub IoT valida o certificado em relação à AC (autoridade de certificação) ou impressão digital fornecida. Para saber mais, confiracertificados X. 509 com suporte.
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.
É altamente recomendável que todos os dispositivos confiem nas três seguintes ACs 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.
As migrações da AC raiz são raras. Você sempre deve preparar sua solução de IoT para o evento improvável de que uma AC raiz esteja comprometida e uma migração de AC raiz de emergência seja necessária.
Conjuntos de Criptografia
Para cumprir a política de segurança do Azure para uma conexão segura, o Hub IoT dá suporte aos seguintes pacotes de criptografia RSA e ECDSA para TLS 1.2:
- 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
- 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
Atualmente, os seguintes conjuntos de criptografia são permitidos no Hub IoT. No entanto, esses conjuntos de criptografia não são mais recomendados pelas diretrizes de segurança do Azure.
Conjuntos de Criptografia | Suporte à versão do TLS |
---|---|
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 | TLS 1.2 |
TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 | TLS 1.2 |
TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 | TLS 1.2 |
TLS_RSA_WITH_AES_256_GCM_SHA384 | TLS 1.2 |
TLS_RSA_WITH_AES_128_GCM_SHA256 | TLS 1.2 |
TLS_RSA_WITH_AES_256_CBC_SHA256 | TLS 1.2 |
TLS_RSA_WITH_AES_128_CBC_SHA256 | TLS 1.2 |
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA | TLS 1.0/1.1/1.2 |
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA | TLS 1.0/1.1/1.2 |
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA | TLS 1.0/1.1/1.2 |
TLS_RSA_WITH_3DES_EDE_CBC_SHA | TLS 1.0/1.1/1.2 |
TLS_RSA_WITH_3DES_EDE_CBC_SHA | TLS 1.0/1.1/1.2 |
TLS_RSA_WITH_AES_128_CBC_SHA | TLS 1.0/1.1/1.2 |
TLS_RSA_WITH_AES_256_CBC_SHA | TLS 1.0/1.1/1.2 |
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
.
Impor o Hub IoT para usar o TLS 1.2 e os conjuntos de criptografia fortes
Para garantir que seus dispositivos IoT estejam em conformidade com o TLS 1.2 e conjuntos de criptografia fortes, você pode impor a conformidade usando o recurso de imposição de TLS mínimo no Hub IoT do Azure.
Atualmente, esse recurso só está disponível nas seguintes regiões e durante a criação do Hub IoT (outras regiões do Azure terão suporte em 2025):
- 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 o TLS 1.2 e a imposição de conjuntos de criptografia fortes no portal do Azure:
Comece com o assistente de criação do Hub IoT no portal do Azure
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.
Clique em Criar
Conecte seus dispositivos IoT a este 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.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 do Hub IoT é criado. Portanto, é essencial que você teste e valide corretamente e com antecedência para que todos os dispositivos e serviços de IoT sejam compatíveis com o TLS 1.2 e com as criptografias recomendadas.
Após os failovers, a propriedade minTlsVersion
de seu Hub IoT permanecerá efetiva na região emparelhada geograficamente após o failover.
Verifique as versões do TLS para dispositivos do Hub IoT
O Hub IoT do Azure pode fornecer logs de diagnóstico para várias categorias que podem ser analisadas usando os logs do Azure Monitor. No log de conexões, você pode encontrar a versão do TLS para seus dispositivos do Hub IoT.
Para exibir esses logs, siga estas etapas:
- No portal do Azure, vá para o hub IoT.
- No menu de recursos em Monitoramento, selecione Configurações de diagnóstico. Verifique se as configurações de diagnóstico têm "Conexões" marcadas.
- No menu do recurso, em Monitoramento, selecione Logs.
- Insira a consulta a seguir:
AzureDiagnostics
| where ResourceProvider == "MICROSOFT.DEVICES" and ResourceType == "IOTHUBS"
| where Category == "Connections"
| where OperationName == "deviceConnect"
| extend props_json = parse_json(properties_s)
| project DeviceId = props_json.deviceId, TLSVersion = props_json.tlsVersion
- Veja um exemplo dos resultados da consulta:
- Observação: a consulta de versão do TLS não está disponível para dispositivos que usam conexões HTTPS.
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.
O certificado TLS do servidor de ECC (criptografia de curva elíptica)
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.
Para usar o certificado de servidor do ECC do Hub IoT:
- Verifique se todos os dispositivos confiam nos seguintes CAs raiz:
- AC raiz do DigiCert Global G2
- AC raiz do Microsoft RSA 2017
- Configure o clientepara incluirapenasconjuntos de codificação de ECDSA eexcluirqualquer RSA. Estes são os pacotes de criptografia com suporte para o 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 seu cliente ao hub IoT.
Negociação de comprimento máximo do fragmento de TLS
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 Hub IoT.
- Ao usar o OpenSSL, chame oSSL_CTX_set_tlsext_max_fragment_lengthpara especificar o tamanho do fragmento.
- Conecte seu cliente ao Hub IoT.
Fixação de certificado
A Anexação de certificado e a filtragem dos certificados de servidor TLS e os certificados intermediários associados aos pontos de extremidade do Hub IoT são altamente desaconselhados, pois a Microsoft frequentemente lança esses certificados com pouco ou nenhum aviso. Se isso for necessário, anexe apenas os certificados raiz conforme a descrição nesta postagem no blog do Azure IoT.
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