Conectar um dispositivo downstream para um gateway do Azure IoT Edge
Aplica-se a: IoT Edge 1.1
Importante
IoT Edge 1.1 a data de término do suporte foi 13 de dezembro de 2022. Confira o Ciclo de Vida do Produto da Microsoft para obter informações sobre o suporte deste produto, serviço, tecnologia ou API. Para obter mais informações sobre como atualizar para a versão mais recente do IoT Edge, consulte Atualizar o IoT Edge.
Este artigo oferece instruções para estabelecer uma conexão confiável entre dispositivos downstream e gateways transparentes do IoT Edge. Em um cenário de gateway transparente, um ou mais dispositivos podem passar suas mensagens por meio de um único dispositivo de gateway que mantém a conexão com o Hub IoT.
Há três etapas gerais para configurar uma conexão de gateway transparente bem-sucedida. Este artigo aborda a terceira etapa:
Configure o dispositivo de gateway como um servidor para que os dispositivos downstream possam se conectar a ele com segurança. Configure o gateway para receber mensagens de dispositivos downstream e encaminhá-los para o destino adequado. Para essas etapas, confira Configurar um dispositivo IoT Edge para atuar como um gateway transparente.
Crie uma identidade do dispositivo para que o dispositivo downstream possa se autenticar no Hub IoT. Configure o dispositivo downstream para enviar mensagens por meio do dispositivo de gateway. Para essas etapas, confira Autenticar um dispositivo downstream no Hub IoT do Azure.
Conecte o dispositivo downstream ao dispositivo de gateway e comece a enviar mensagens.
Este artigo discute os conceitos básicos para conexões de dispositivos downstream e orienta você na configuração de seus dispositivos downstream:
- Explicando a segurança do protocolo TLS e os fundamentos do certificado.
- Explicando como as bibliotecas TLS funcionam em diferentes sistemas operacionais e como cada sistema operacional lida com certificados.
- Explicando passo a passo exemplos de IoT do Azure em vários idiomas para ajudar você a começar.
Neste artigo, os termos gateway e gateway IoT Edge se referem a um dispositivo IoT Edge configurado como um gateway transparente.
Observação
Um dispositivo de downstream emite dados diretamente para a Internet ou para dispositivos de gateway (habilitados para IoT Edge ou não). Um dispositivo filho pode ser um dispositivo de downstream ou um dispositivo de gateway em uma topologia aninhada.
Pré-requisitos
- Tenha o arquivo de certificado de autoridade de certificação raiz que foi usado para gerar o certificado de autoridade de certificação do dispositivo em Configurar um dispositivo IoT Edge para atuar como um gateway transparente disponível em seu dispositivo downstream. Seu dispositivo downstream usa este certificado para validar a identidade do dispositivo de gateway. Se você tiver usado os certificados de demonstração, o certificado de autoridade de certificação raiz será chamado azure-iot-test-only.root.ca.cert.pem.
- Tenha a cadeia de conexão modificada que aponta para o dispositivo de gateway, conforme explicado em Autenticar um dispositivo downstream no Hub IoT do Azure.
Preparar um dispositivo downstream
Um dispositivo downstream pode ser qualquer aplicativo ou plataforma que tenha uma identidade criada com o serviço de nuvem do Hub IoT do Azure. Em muitos casos, esses aplicativos usam o SDK do dispositivo IoT do Azure. Um dispositivo downstream pode até ser um aplicativo em execução no próprio dispositivo de gateway do IoT Edge. No entanto, outro dispositivo IoT Edge não pode estar localizado downstream em relação a um gateway IoT Edge.
Observação
Os dispositivos IoT registrados com o Hub IoT podem usar módulos gêmeos para isolar diferentes processos, hardware ou funções em um único dispositivo. Os gateways do IoT Edge dão suporte a conexões de módulo downstream usando a autenticação de chave simétrica, mas não a autenticação de certificado X.509.
Para conectar um dispositivo downstream a um gateway IoT Edge, você precisa de duas coisas:
Um dispositivo ou aplicativo configurado com uma cadeia de conexão de dispositivo Hub IoT anexada com informações para conectá-lo ao gateway.
Esta etapa foi concluída no artigo anterior, Autenticar um dispositivo downstream no Hub IoT do Azure.
O dispositivo ou aplicativo precisa confiar no certificado AC raiz para validar as conexões TLS (Segurança da Camada de Transporte) com o dispositivo de gateway.
Essa etapa é explicada em detalhes no restante deste artigo. Essa etapa pode ser executada de duas maneiras: instalando o certificado de autoridade de certificação no repositório de certificados do sistema operacional ou (para determinados idiomas) fazendo referência ao certificado nos aplicativos que usam os SDKs da Internet das Coisas do Azure.
Conceitos básicos TLS e o certificado
O desafio de conectar com segurança dispositivos downstream ao IoT Edge é como qualquer outra comunicação cliente/servidor segura que ocorre na Internet. Um cliente e um servidor se comunicam com segurança pela Internet usando segurança do protocolo TLS. O TLS é construído usando as construções padrão de infraestrutura de chave pública (PKI) chamadas de certificados. O TLS é uma especificação bastante complexa e aborda uma ampla variedade de tópicos relacionados à proteção de dois pontos de extremidade. Esta seção resume os conceitos relevantes para você conectar dispositivos com segurança a um gateway do IoT Edge.
Quando um cliente se conecta a um servidor, o servidor apresenta uma cadeia de certificados, chamada de cadeia de certificados do servidor. Uma cadeia de certificados normalmente inclui um certificado de autoridade de certificação raiz (AC), um ou mais certificados AC intermediários e, finalmente, o próprio certificado do servidor. Um cliente estabelece confiança com um servidor, verificando criptograficamente toda a cadeia de certificados do servidor. Esta validação do cliente da cadeia de certificados do servidor é chamada de validação da cadeia do servidor. O cliente desafia o servidor a provar a posse da chave privada associada ao certificado do servidor em um processo denominado prova de posse. A combinação de validação de cadeia de servidores e prova de posse é chamada de autenticação de servidor. Para validar uma cadeia de certificados de servidor, um cliente precisa de uma cópia do certificado de autoridade de certificação raiz que foi usado para criar o certificado do servidor (ou emitir uma). Normalmente ao se conectar a sites, um navegador vem pré-configurado com certificados de autoridade de certificação comumente usados para que o cliente tem um processo contínuo.
Quando um dispositivo se conecta ao Hub IoT do Azure, o dispositivo é o cliente e o serviço de nuvem do Hub IoT é o servidor. O serviço de nuvem Hub IoT é respaldado por um certificado de AC raiz chamado Baltimore CyberTrust Root, que está publicamente disponível e é amplamente usado. Como o certificado CA do Hub IoT já está instalado na maioria dos dispositivos, muitas implementações TLS (OpenSSL, Schannel, LibreSSL) o usam automaticamente durante a validação do certificado do servidor. Entretanto, um dispositivo que pode se conectar com êxito ao Hub IoT pode ter problemas ao tentar se conectar a um gateway IoT Edge.
Quando um dispositivo se conecta a um gateway IoT Edge, o dispositivo downstream é o cliente e o dispositivo de gateway é o servidor. O Azure IoT Edge permite que você crie cadeias de certificados de gateway da maneira que achar melhor. Você pode optar por usar um certificado de autoridade de certificação público, como o Baltimore, ou usar um certificado de autoridade de certificação raiz autoassinado (ou interno). Os certificados públicos de CA costumam ter um custo associado a eles, então são normalmente usados em cenários de produção. Os certificados de CA autoassinados são preferidos para desenvolvimento e teste. Se você estiver usando os certificados de demonstração, eles serão certificados de AC raiz autoassinados.
Quando você usa um certificado de autoridade de certificação AC raiz autoassinado para um gateway IoT Edge, ele precisa ser instalado ou fornecido a todos os dispositivos de recebimento de dados que tentam se conectar ao gateway.
Para saber mais sobre os certificados do IoT Edge e algumas implicações de produção, consulte Detalhes do uso do certificado do IoT Edge.
Fornecer o certificado de AC raiz
Para verificar os certificados do dispositivo de gateway, o dispositivo downstream precisa de sua cópia do certificado CA raiz. Se você usou os scripts fornecidos no repositório git IoT Edge para criar certificados de teste, o certificado de CA raiz é chamado de azure-iot-test-only.root.ca.cert.pem. Se você ainda não o fez, como parte das outras etapas de preparação do dispositivo downstream, mova este arquivo de certificado para qualquer diretório em seu dispositivo downstream. Você pode usar um serviço como Azure Key Vault ou uma função como Protocolo de cópia segura para mover o arquivo de certificado.
Instale certificados no sistema operacional
Depois que o certificado de autoridade de certificação raiz estiver no dispositivo downstream, você precisará verificar se os aplicativos que estão se conectando ao gateway podem acessar o certificado.
A instalação do certificado da autoridade de certificação raiz no repositório de certificados do sistema operacional geralmente permite que a maioria dos aplicativos use o certificado da autoridade de certificação raiz. Existem algumas exceções, como o aplicativo NodeJS, que não usa o repositório de certificados do sistema operacional, mas usa o repositório de certificados interno do runtime do nó. Se não for possível instalar o certificado no nível do sistema operacional, vá direto para Usar certificados com SDKs da Internet das Coisas do Azure.
Ubuntu
Os seguintes comandos são um exemplo de como instalar um certificado de CA em um host Ubuntu. Este exemplo pressupõe que você esteja usando o certificado azure-iot-test-only.root.ca.cert.pem dos artigos de pré-requisitos e que você tenha copiado o certificado em um local no dispositivo downstream.
sudo cp <path>/azure-iot-test-only.root.ca.cert.pem /usr/local/share/ca-certificates/azure-iot-test-only.root.ca.cert.pem.crt
sudo update-ca-certificates
Você deve ver uma mensagem que diz "Atualizando certificados no /etc/ssl/certs... 1 adicionado, 0 removidos; concluído."
Windows
As etapas a seguir são um exemplo de como instalar um certificado de autoridade de certificação em um host do Windows. Este exemplo pressupõe que você esteja usando o certificado azure-iot-test-only.root.ca.cert.pem dos artigos de pré-requisitos e que você tenha copiado o certificado em um local no dispositivo downstream.
Você pode instalar certificados usando o Import-Certificate do PowerShell como um administrador:
import-certificate <file path>\azure-iot-test-only.root.ca.cert.pem -certstorelocation cert:\LocalMachine\root
Você também pode instalar certificados usando o utilitário certlm:
- No menu Iniciar, pesquise e selecione Gerenciar certificados de computador. Um utilitário chamado certlm é aberto.
- Navegue para Certificados - Computador Local>Autoridades de Certificação Raiz Confiáveis.
- Clique com o botão direito do mouse em Certificates e selecione All Tasks>Import. O assistente para importação de certificados deve ser iniciado.
- Siga as etapas conforme direcionado e importe o arquivo de certificado
<path>/azure-iot-test-only.root.ca.cert.pem
. Quando concluído, você verá uma mensagem "Importada com êxito".
Você também pode instalar certificados programaticamente usando APIs .NET, conforme mostrado na amostra .NET mais adiante neste artigo.
Geralmente, os aplicativos usam a pilha TLS fornecida pelo Windows chamada Schannel para se conectar com segurança através de TLS. O Schannel requer que quaisquer certificados sejam instalados no repositório de certificados do Windows antes de tentar estabelecer uma conexão TLS.
Usar certificados com SDKs de IoT do Azure
Esta seção descreve como os SDKs do IoT do Azure se conectam a um dispositivo IoT Edge usando aplicativos de amostra simples. O objetivo de todas as amostras é conectar o cliente do dispositivo e enviar mensagens de telemetria ao gateway, em seguida, fechar a conexão e sair.
Ter duas coisas prontas antes de usar os exemplos de nível de aplicativo:
A cadeia de conexão do Hub IoT do seu dispositivo downstream modificada para apontar para o dispositivo de gateway e quaisquer certificados necessários para autenticar o seu dispositivo downstream no Hub IoT. Para saber mais, confira Autenticar um dispositivo downstream no Hub IoT do Azure.
O caminho completo para o certificado de AC raiz que você copiou e salvou em algum lugar em seu dispositivo downstream.
Por exemplo,
<path>/azure-iot-test-only.root.ca.cert.pem
.
NodeJS
Esta seção fornece um aplicativo de amostra para conectar um cliente de dispositivo do Azure IoT NodeJS a um gateway do IoT Edge. Para aplicativos NodeJS, você deve instalar o certificado de autoridade de certificação raiz no nível do aplicativo, conforme mostrado aqui. Os aplicativos NodeJS não usam o repositório de certificados do sistema.
- Obter a amostra para edge_downstream_device.js da repositório de exemplos do SDK do dispositivo IoT do Azure para Node. js.
- Confira o arquivo readme.md para verificar se você tem todos os pré-requisitos para executar o exemplo.
- No arquivo edge_downstream_device.js, atualize as variáveis connectionString e edge_ca_cert_path.
- Consulte a documentação do SDK para obter instruções sobre como executar a amostra no seu dispositivo.
Para reconhecimento da amostra que você está executando, o snippet de código a seguir é como o SDK do cliente lê o arquivo de certificado e o utiliza para estabelecer uma conexão TLS segura:
// Provide the Azure IoT device client via setOptions with the X509
// Edge root CA certificate that was used to setup the Edge runtime
var options = {
ca : fs.readFileSync(edge_ca_cert_path, 'utf-8'),
};
.NET
Esta seção apresenta um aplicativo de exemplo para se conectar a um cliente do dispositivo IoT do Azure .NET para um gateway IoT Edge. No entanto, os aplicativos .NET são capazes de usar automaticamente quaisquer certificados instalados no repositório de certificados do sistema em hosts Linux e Windows.
- Obtenha o exemplo para EdgeDownstreamDevice da pasta de exemplos .NET do IoT Edge.
- Confira o arquivo readme.md para verificar se você tem todos os pré-requisitos para executar o exemplo.
- No arquivo Properties / launchSettings.json, atualize as variáveis DEVICE_CONNECTION_STRING e CA_CERTIFICATE_PATH. Se você quiser usar o certificado instalado no repositório de certificados confiáveis no sistema host, deixe essa variável em branco.
- Consulte a documentação do SDK para obter instruções sobre como executar a amostra no seu dispositivo.
Para instalar programaticamente um certificado confiável no repositório de certificados por meio de um aplicativo .NET, consulte a função InstallCACert () no arquivo EdgeDownstreamDevice / Program.cs. Essa operação é idempotente, portanto, pode ser executada várias vezes com os mesmos valores sem efeito adicional.
C
Esta seção apresenta um aplicativo de amostra para conectar um cliente de dispositivo do Azure IoT C a um gateway do IoT Edge. O C SDK pode operar com muitas bibliotecas TLS, incluindo OpenSSL, WolfSSL e Schannel. Para obter mais informações, consulte o SDK do Azure IoT C.
- Obtenha o aplicativo iotedge_downstream_device_sample do SDK do dispositivo IoT do Azure para amostras C.
- Confira o arquivo readme.md para verificar se você tem todos os pré-requisitos para executar o exemplo.
- No arquivo iotedge_downstream_device_sample.c, atualize as variáveis connectionString e edge_ca_cert_path.
- Consulte a documentação do SDK para obter instruções sobre como executar a amostra no seu dispositivo.
O SDK do dispositivo IoT do Azure para C fornece uma opção para registrar um certificado de CA ao configurar o cliente. Essa operação não instala o certificado em nenhum lugar, mas usa um formato de cadeia de caracteres do certificado na memória. O certificado salvo é fornecido para a pilha TLS subjacente ao estabelecer uma conexão.
(void)IoTHubDeviceClient_SetOption(device_handle, OPTION_TRUSTED_CERT, cert_string);
Observação
O método para registrar um certificado de autoridade de certificação ao configurar o cliente pode mudar se estiver usando um pacote gerenciado ou biblioteca. Por exemplo, a biblioteca baseada em Arduino IDE exigirá a adição do certificado de autoridade de certificação a uma matriz de certificados definida em um arquivo certs.c global, em vez de usar a operação IoTHubDeviceClient_LL_SetOption
.
Nos hosts do Windows, se você não estiver usando o OpenSSL ou outra biblioteca TLS, o padrão do SDK será usar o Schannel. Para que o Schannel funcione, o certificado da AC raiz da IoT Edge deve ser instalado no repositório de certificados do Windows, não definido usando a operação IoTHubDeviceClient_SetOption
.
Java
Esta seção apresenta um aplicativo de amostra para conectar um cliente de dispositivo Java IoT do Azure a um gateway IoT Edge.
- Obter a amostra para evento de envio da SDK do dispositivo IoT do Azure para exemplos de Java.
- Confira o arquivo readme.md para verificar se você tem todos os pré-requisitos para executar o exemplo.
- Consulte a documentação do SDK para obter instruções sobre como executar a amostra no seu dispositivo.
Python
Esta seção apresenta um aplicativo de exemplo para conectar um cliente de dispositivo Python do IoT do Azure a um gateway do IoT Edge.
- Obtenha a amostra para send_message_downstream do SDK do dispositivo IoT do Azure para amostras do Python.
- Defina as variáveis de ambiente
IOTHUB_DEVICE_CONNECTION_STRING
eIOTEDGE_ROOT_CA_CERT_PATH
conforme especificado nos comentários do script do Python. - Confira a documentação do SDK para obter instruções adicionais sobre como executar a amostra no seu dispositivo.
Testar a conexão de gateway
Use este comando de amostra no dispositivo downstream para testar se ele pode se conectar ao dispositivo de gateway:
openssl s_client -connect mygateway.contoso.com:8883 -CAfile <CERTDIR>/certs/azure-iot-test-only.root.ca.cert.pem -showcerts
Este comando testa conexões em MQTTS (porta 8883). Se você estiver usando um protocolo diferente, ajuste o comando conforme necessário para AMQPS (5671) ou HTTPS (443)
A saída desse comando pode ser longa, incluindo informações sobre todos os certificados na cadeia. Se a conexão for bem-sucedida, você verá uma linha como Verification: OK
ou Verify return code: 0 (ok)
.
Solucionar problemas de conexão do gateway
Se o dispositivo downstream tiver conexão intermitente com o dispositivo de gateway, tente as etapas a seguir para resolução.
- O nome do host do gateway na cadeia de conexão é igual ao valor do nome do host no arquivo de configuração do IoT Edge no dispositivo de gateway?
- O nome do host do gateway é resolvível para um endereço IP? Você pode resolver conexões intermitentes usando o DNS ou adicionando uma entrada do arquivo do host no dispositivo downstream.
- As portas de comunicação estão abertas em seu firewall? A comunicação com base no protocolo usado (MQTTS:8883/AMQPS:5671/HTTPS:433) deve ser possível entre o dispositivo downstream e o IoT Edge transparente.
Próximas etapas
Saiba como o IoT Edge pode estender recursos off-line para dispositivos downstream.