Ligar um dispositivo a jusante a um gateway do Azure IoT Edge

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

Importante

IoT Edge 1.5 LTS e IoT Edge 1.4 LTS são versões suportadas. O IoT Edge 1.4 LTS termina a vida útil em 12 de novembro de 2024. Se tiver uma versão anterior, consulte Atualizar IoT Edge.

Aqui, você encontra 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. Aqui, os termos gateway e gateway IoT Edge referem-se a um dispositivo IoT Edge configurado como um gateway transparente.

Nota

Um dispositivo downstream emite dados diretamente para a Internet ou para dispositivos de gateway (habilitado para IoT Edge ou não). Um dispositivo filho pode ser um dispositivo downstream ou um dispositivo gateway em uma topologia aninhada.

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

  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á-las para o destino adequado. Para essas etapas, consulte Configurar um dispositivo IoT Edge para atuar como um gateway transparente.

  2. Crie uma identidade de dispositivo para o dispositivo downstream para que ele possa se autenticar com o Hub IoT. Configure o dispositivo downstream para enviar mensagens através do dispositivo de gateway. Para essas etapas, consulte 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:

  • Segurança da camada de transporte (TLS) e fundamentos de certificado.
  • Bibliotecas TLS que trabalham em diferentes sistemas operacionais que lidam com certificados de forma diferente.

Em seguida, você percorre os exemplos do Azure IoT, em seu idioma preferido, para fazer com que seu dispositivo envie mensagens para o gateway.

Pré-requisitos

Adquira o seguinte para preparar o seu dispositivo a jusante:

  • Um dispositivo a jusante.

    Esse dispositivo 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 também pode ser um aplicativo em execução no próprio dispositivo de gateway IoT Edge.

    Mais tarde, este artigo fornece as etapas para conectar um dispositivo IoT como um dispositivo downstream. Se preferir usar um dispositivo IoT Edge como um dispositivo downstream, consulte Conectar dispositivos IoT Edge do Azure juntos para criar uma hierarquia (borda aninhada).

  • Um arquivo de certificado de autoridade de certificação raiz.

    Esse arquivo foi usado para gerar o certificado de CA de Borda em Configurar um dispositivo IoT Edge para atuar como um gateway transparente, que está disponível em seu dispositivo downstream.

    Seu dispositivo downstream usa esse certificado para validar a identidade do dispositivo de gateway. Esse certificado confiável valida as conexões TLS (Transport Layer Security) com o dispositivo de gateway. Consulte os detalhes de uso na seção Fornecer o certificado de autoridade de certificação raiz.

  • Uma cadeia de conexão modificada que aponta para o dispositivo de gateway.

    Como modificar sua cadeia de conexão é explicado em Autenticar um dispositivo downstream no Hub IoT do Azure.

Nota

Os dispositivos IoT registrados no Hub IoT podem usar gêmeos de módulo para isolar diferentes processos, hardware ou funções em um único dispositivo. Os gateways IoT Edge suportam conexões de módulo downstream, usando autenticação de chave simétrica, mas não autenticação de certificado X.509.

Compreender os fundamentos do TLS e do certificado

O desafio de conectar dispositivos downstream com segurança ao IoT Edge é como qualquer outra comunicação cliente/servidor segura que ocorre pela Internet. Um cliente e um servidor se comunicam com segurança pela Internet usando a segurança da camada de transporte (TLS). O TLS é construído usando construções padrão de infraestrutura de chave pública (PKI) chamadas certificados. TLS é uma especificação bastante envolvida e aborda uma ampla gama de tópicos relacionados à proteção de dois endpoints. Esta seção resume os conceitos relevantes para você conectar dispositivos com segurança a um gateway IoT Edge.

Quando um cliente se conecta a um servidor, o servidor apresenta uma cadeia de certificados, chamada cadeia de certificados do servidor. Uma cadeia de certificados normalmente compreende um certificado de autoridade de certificação (CA) raiz, um ou mais certificados de CA 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. Essa validação de cliente da cadeia de certificados do servidor é chamada de validação da cadeia de servidores. O cliente desafia o servidor a provar a posse da chave privada associada ao certificado do servidor em um processo chamado prova de posse. A combinação de validação da 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 (ou emitir) o certificado do servidor. Normalmente, ao se conectar a sites, um navegador vem pré-configurado com certificados de CA comumente usados para que o cliente tenha 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 do Hub IoT é apoiado por um certificado de CA raiz chamado Baltimore CyberTrust Root, que está disponível publicamente e é amplamente utilizado. Como o certificado de 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. No entanto, um dispositivo que se conecta com êxito ao Hub IoT pode ter problemas ao tentar se conectar a um gateway do 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 acharem melhor. Você pode optar por usar um certificado de autoridade de certificação pública, como Baltimore, ou usar um certificado de autoridade de certificação raiz autoassinado (ou interno). Os certificados de autoridade de certificação pública geralmente têm um custo associado a eles, portanto, geralmente são 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 CA raiz autoassinados.

Quando você usa um certificado de CA raiz autoassinado para um gateway IoT Edge, ele precisa ser instalado ou fornecido a todos os dispositivos downstream que tentam se conectar ao gateway.

Captura de tela da configuração do certificado de gateway.

Para saber mais sobre certificados do IoT Edge e algumas implicações de produção, consulte Detalhes de uso do certificado do IoT Edge.

Fornecer o certificado de autoridade de certificação raiz

Para verificar os certificados do dispositivo gateway, o dispositivo downstream precisa de sua própria cópia do certificado da autoridade de certificação raiz. Se você usou os scripts fornecidos no repositório git do IoT Edge para criar certificados de teste, o certificado da autoridade de certificação raiz será chamado azure-iot-test-only.root.ca.cert.pem.

Se ainda não o fez, mova este ficheiro de certificado para qualquer diretório no seu dispositivo a jusante. Você pode mover o arquivo instalando o certificado da autoridade de certificação no armazenamento de certificados do sistema operacional ou (para determinados idiomas) fazendo referência ao certificado em aplicativos que usam os SDKs do Azure IoT.

Você pode usar um serviço como o Azure Key Vault ou uma função como o protocolo de cópia segura para mover o arquivo de certificado.

Instalar certificados no SO

Quando o certificado de autoridade de certificação 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 de autoridade de certificação raiz no armazenamento de certificados do sistema operacional geralmente permite que a maioria dos aplicativos use o certificado de autoridade de certificação raiz. Há algumas exceções, como aplicativos NodeJS que não usam o armazenamento de certificados do sistema operacional, mas usam o armazenamento de certificados interno do tempo de execução do Node. Se não conseguir instalar o certificado ao nível do sistema operativo, avance para Utilizar certificados com SDKs IoT do Azure.

Instale o certificado de autoridade de certificação raiz no Ubuntu ou no Windows.

Os comandos a seguir são um exemplo de como instalar um certificado 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 tenha copiado o certificado para 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ê verá uma mensagem que diz: "Atualizando certificados em /etc/ssl/certs... 1 adicionado, 0 removido; feito."

Usar certificados com SDKs do Azure IoT

Os SDKs do Azure IoT se conectam a um dispositivo IoT Edge usando aplicativos de exemplo simples. O objetivo dos exemplos é conectar o cliente do dispositivo e enviar mensagens de telemetria para o gateway, fechar a conexão e sair.

Antes de usar os exemplos 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 obter mais informações, consulte Autenticar um dispositivo downstream no Hub IoT do Azure.

  • O caminho completo para o certificado de autoridade de certificação 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 exemplo para conectar um cliente de dispositivo Azure IoT NodeJS a um gateway 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 armazenamento de certificados do sistema.

  1. Obtenha o exemplo para edge_downstream_device.js do SDK do dispositivo IoT do Azure para Node.js repositório de exemplos.
  2. Certifique-se de que você tem todos os pré-requisitos para executar o exemplo, revisando o arquivo readme.md .
  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 o exemplo no seu dispositivo.

Para entender o exemplo que você está executando, o trecho de código a seguir é como o SDK do cliente lê o arquivo de certificado e o usa 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 do gateway

Use este comando de exemplo 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 a conexão através do 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 deste 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 de gateway

Se a conexão do dispositivo downstream com o dispositivo gateway for instável, considere estas perguntas para uma resolução.

  • O nome do host do gateway na cadeia de conexão é o mesmo que o valor do nome do host no arquivo de configuração do IoT Edge no dispositivo do gateway?
  • O nome do host do gateway pode ser resolvido para um endereço IP? Você pode resolver conexões intermitentes usando DNS ou adicionando uma entrada de arquivo host no dispositivo downstream.
  • As portas de comunicação estão abertas no seu firewall? A comunicação baseada no protocolo usado (MQTTS:8883/AMQPS:5671/HTTPS:433) deve ser possível entre o dispositivo downstream e o IoT Edge transparente.

Próximos passos

Saiba como o IoT Edge pode estender os recursos offline para dispositivos downstream.