Conectar um dispositivo downstream para um gateway do Azure IoT Edge

Aplica-se a: Marca de seleção do IoT Edge 1.5 IoT Edge 1.5 marca de seleção do IoT Edge 1.4 IoT Edge 1.4

Importante

O IoT Edge 1.5 LTS e o IoT Edge 1.4 LTS são versões com suporte. O IoT Edge 1.4 LTS chegará ao fim da vida útil em 12 de novembro de 2024. Se você estiver em uma versão anterior, confira Atualizar o IoT Edge.

Aqui, você encontra instruções para estabelecer uma conexão confiável entre os dispositivos downstream e os 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. Aqui, os termos gateway e gateway do 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.

Há três etapas gerais para configurar uma conexão de gateway transparente bem-sucedida. Este artigo explica a terceira etapa.

  1. 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.

  2. 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.

  3. Conecte o dispositivo downstream ao dispositivo de gateway e comece a enviar mensagens.

Este artigo ajuda você a entender os componentes de conexão de dispositivo downstream, como:

  • TLS (segurança de camada de transporte) e conceitos básicos do certificado.
  • Bibliotecas TLS que funcionam em diferentes sistemas operacionais que lidam com certificados de forma diferente.

Em seguida, você percorre as amostras de Internet das Coisas do Azure, em seu idioma preferido, para fazer com que seu dispositivo envie mensagens para o gateway.

Pré-requisitos

Adquira o seguinte para preparar seu dispositivo downstream:

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.

Entenda os conceitos básicos do TLS e do 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 AC comumente usados para que o cliente tenha um processo ininterrupto.

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. Os certificados de demonstração sã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.

Captura de tela da configuração do certificado do 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.

Caso ainda não o tenha feito, mova esse arquivo de certificado para qualquer diretório em seu dispositivo downstream. Você pode mover o arquivo instalando o certificado de AC no repositório de certificados do sistema operacional ou (para determinados idiomas) fazendo referência ao certificado em aplicativos usando os SDKs de Internet das Coisas do Azure.

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 AC raiz estiver no dispositivo downstream, verifique 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.

Instale o certificado de AC raiz no Ubuntu ou no Windows.

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 <file 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."

Usar certificados com SDKs de IoT do Azure

SDKs da Internet das Coisas do Azure se conectam a um dispositivo IoT Edge usando aplicativos de exemplo simples. O objetivo de todas as amostras é conectar o cliente do dispositivo e enviar mensagens de telemetria ao gateway, fechar a conexão e sair.

Antes de usar as amostras no nível do aplicativo, obtenha os seguintes itens:

  • Sua cadeia de conexão do Hub IoT, do seu dispositivo downstream, modificada para apontar para o dispositivo de gateway.

  • Todos os certificados necessários para autenticar 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: <file path>/azure-iot-test-only.root.ca.cert.pem.

Agora você está pronto para usar certificados com uma amostra no idioma de sua escolha:

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.

  1. Obter a amostra para edge_downstream_device.js da repositório de exemplos do SDK do dispositivo IoT do Azure para Node. js.
  2. Confira o arquivo readme.md para verificar se você tem todos os pré-requisitos para executar o exemplo.
  3. No arquivo edge_downstream_device.js, atualize as variáveis connectionString e edge_ca_cert_path.
  4. 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'),
};

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).

Captura de tela de como verificar uma conexão de gateway.

Solucionar problemas de conexão do gateway

Se a conexão do dispositivo downstream com seu dispositivo de gateway for instável, considere essas perguntas para uma 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.