Suporte a TLS no Serviço de Provisionamento de Dispositivo (DPS) do Hub IoT do Azure
O DPS usa TLS (Transport Layer Security) para proteger conexões de dispositivos IoT.
As versões atuais do protocolo TLS suportadas pelo DPS são:
- TLS 1.2
Restringir conexões a uma versão mínima do TLS
Você pode configurar suas instâncias DPS para permitir somente conexões de cliente de dispositivo que usam uma versão mínima de TLS ou superior.
Importante
Atualmente, o DPS suporta apenas TLS 1.2, portanto, não há necessidade de especificar a versão mínima do TLS quando você cria uma instância do DPS. Este recurso é fornecido para expansão futura.
Para fazer isso, provisione um novo recurso DPS definindo a minTlsVersion
propriedade como na 1.2
especificação de recurso DPS do seu modelo do Azure Resource Manager. O modelo JSON de exemplo a seguir especifica a minTlsVersion
propriedade para uma nova instância do DPS.
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"type": "Microsoft.Devices/ProvisioningServices",
"apiVersion": "2020-01-01",
"name": "<provide-a-valid-DPS-resource-name>",
"location": "<any-region>",
"properties": {
"minTlsVersion": "1.2"
},
"sku": {
"name": "S1",
"capacity": 1
},
}
]
}
Você pode implantar o modelo com o seguinte comando da CLI do Azure.
az deployment group create -g <your resource group name> --template-file template.json
Para obter mais informações sobre como criar recursos do DPS com modelos do Gerenciador de Recursos, consulte Configurar o DPS com um modelo do Azure Resource Manager.
O recurso DPS criado usando essa configuração recusa dispositivos que tentam se conectar usando as versões 1.0 e 1.1 do TLS.
Nota
A minTlsVersion
propriedade é somente leitura e não pode ser alterada depois que o recurso DPS é criado. Portanto, é essencial que você teste e valide corretamente se todos os seus dispositivos IoT são compatíveis com TLS 1.2 e as cifras recomendadas com antecedência.
Nota
Após failovers, a minTlsVersion
propriedade do seu DPS permanecerá efetiva na região emparelhada geograficamente após o failover.
Cifras recomendadas
As instâncias DPS impõem o uso dos seguintes pacotes de codificação recomendados e herdados:
Pacotes de codificação TLS 1.2 recomendados |
---|
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 |
Pacotes de codificação legados
Esses pacotes de codificação ainda são suportados pelo DPS, mas serão depreciados. Use os pacotes de codificação recomendados, se possível.
Opção #1 (melhor segurança) |
---|
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384 (uses SHA-1) TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA_P256 (uses SHA-1) TLS_RSA_WITH_AES_256_GCM_SHA384 (lack of Perfect Forward Secrecy) TLS_RSA_WITH_AES_128_GCM_SHA256 (lack of Perfect Forward Secrecy) TLS_RSA_WITH_AES_256_CBC_SHA256 (lack of Perfect Forward Secrecy) TLS_RSA_WITH_AES_128_CBC_SHA256 (lack of Perfect Forward Secrecy) TLS_RSA_WITH_AES_256_CBC_SHA (uses SHA-1, lack of Perfect Forward Secrecy) TLS_RSA_WITH_AES_128_CBC_SHA (uses SHA-1, lack of Perfect Forward Secrecy) |
Opção #2 (melhor desempenho) |
---|
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA_P256 (uses SHA-1) TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384 (uses SHA-1) TLS_RSA_WITH_AES_128_GCM_SHA256 (lack of Perfect Forward Secrecy) TLS_RSA_WITH_AES_256_GCM_SHA384 (lack of Perfect Forward Secrecy) TLS_RSA_WITH_AES_128_CBC_SHA256 (lack of Perfect Forward Secrecy) TLS_RSA_WITH_AES_256_CBC_SHA256 (lack of Perfect Forward Secrecy) TLS_RSA_WITH_AES_128_CBC_SHA (uses SHA-1, lack of Perfect Forward Secrecy) TLS_RSA_WITH_AES_256_CBC_SHA (uses SHA-1, lack of Perfect Forward Secrecy) |
Suporte TLS mútuo
Quando os registros de DPS são configurados para autenticação X.509, o TLS mútuo (mTLS) é suportado pelo DPS.
Certificado TLS do servidor
Durante um handshake TLS, o DPS apresenta certificados de servidor com chave RSA para conectar clientes. Todas as instâncias DPS na nuvem global do Azure usam o certificado TLS emitido pelo certificado DigiCert Global Root G2.
Também recomendamos adicionar os certificados Microsoft RSA Root Certificate Authority 2017 aos seus dispositivos para evitar interrupções caso o DigiCert Global Root G2 seja desativado inesperadamente. 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 seguintes CAs raiz:
- DigiCert Global G2 raiz CA
- Raiz do Microsoft RSA CA 2017
Para obter links para baixar esses certificados, consulte Detalhes da Autoridade de Certificação do Azure.
Confiança de certificado nos SDKs
Os SDKs de dispositivo do Azure IoT conectam e autenticam dispositivos aos serviços do Azure IoT. Os diferentes SDKs gerenciam certificados de maneiras diferentes, dependendo do idioma e da versão, mas a maioria depende do armazenamento de certificados confiáveis 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 oferecem suporte ao armazenamento de certificados confiáveis:
Azure IoT Device SDK | Versões suportadas |
---|---|
C | Todas as versões atualmente suportadas |
C# | Todas as versões atualmente suportadas |
Java | Versão 2.x.x e superior |
Node.js | Todas as versões atualmente suportadas |
Python | Todas as versões atualmente suportadas |
Fixação do certificado
A fixação e filtragem de certificados do servidor TLS (também conhecidos como certificados folha) e certificados intermediários associados a pontos de extremidade DPS é desencorajada, pois a Microsoft frequentemente rola esses certificados com pouco ou nenhum aviso. Se for necessário, fixe apenas os certificados raiz.
Usar TLS 1.2 nos SDKs de IoT
Use os links abaixo para configurar o TLS 1.2 e as cifras permitidas nos SDKs de cliente do Azure IoT.
Idioma | Versões que suportam TLS 1.2 | Documentação |
---|---|---|
C | Tag 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 |
Usar TLS 1.2 com o Hub IoT
O Hub IoT pode ser configurado para usar o TLS 1.2 ao se comunicar com dispositivos. Para obter mais informações, consulte Substituindo o TLS 1.0 e 1.1 para o Hub IoT.
Usar o TLS 1.2 com o IoT Edge
Os dispositivos IoT Edge podem ser configurados para usar TLS 1.2 ao se comunicar com o Hub IoT e o DPS. Para obter mais informações, consulte a página de documentação do IoT Edge.