Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Aplica-se a:
IoT Edge 1.1
Importante
IoT Edge 1.1 data de fim do suporte foi 13 de dezembro de 2022. Consulte o Ciclo de Vida de Produtos da Microsoft para obter informações sobre como é suportado este 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 fornece 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 abrange 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á-las para o destino adequado. Para essas etapas, consulte Configurar um dispositivo IoT Edge para atuar como um gateway transparente.
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.
Conecte o dispositivo downstream ao dispositivo de gateway e comece a enviar mensagens.
Este artigo discute conceitos básicos para conexões de dispositivos downstream e orienta você na configuração de seus dispositivos downstream:
- Explicando os fundamentos da segurança da camada de transporte (TLS) e do certificado.
- Explicando como as bibliotecas TLS funcionam em diferentes sistemas operacionais e como cada sistema operacional lida com certificados.
- Percorrer exemplos do Azure IoT em vários idiomas para ajudá-lo a começar.
Neste artigo, os termos gateway e gateway IoT Edge referem-se a um dispositivo IoT Edge configurado como um gateway transparente.
Observação
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 numa 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 esse certificado para validar a identidade do dispositivo de gateway. Se você usou os certificados de demonstração, o certificado de CA raiz é chamado azure-iot-test-only.root.ca.cert.pem.
- Obtenha 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 de fluxo descendente
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 IoT Edge. No entanto, outro dispositivo IoT Edge não pode estar abaixo de um gateway IoT Edge.
Observação
Os dispositivos IoT registados no Hub IoT podem utilizar gémeos de módulo para isolar diferentes processos, hardware ou funções num ú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.
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 do 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 aplicação precisa confiar no root CA certificate do gateway para validar as conexões TLS (Transport Layer Security) com o dispositivo de gateway.
Esta etapa é explicada em detalhes no restante deste artigo. Esta etapa pode ser executada de duas maneiras: 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.
Fundamentos de TLS e 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 pelo cliente da cadeia de certificados do servidor é chamada de validação da cadeia de certificados do servidor. 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 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 escolher usar um certificado de uma autoridade certificadora pública, como a Baltimore, ou um certificado de autoridade certificadora 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. Se você estiver usando os certificados de demonstração, esses 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.
Para saber mais sobre certificados do IoT Edge e algumas implicações de produção, consulte Detalhes de uso do certificado do IoT Edge.
Proporcione o certificado da 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 você ainda não o fez como parte das outras etapas de preparação do dispositivo downstream, mova esse arquivo de certificado para qualquer diretório no seu dispositivo downstream. 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, você precisará certificar-se de que os aplicativos que estão se conectando ao gateway possam acessar o certificado.
A instalação do certificado de autoridade de certificação raiz no armazenamento de certificados do sistema operativo geralmente permite que a maioria dos aplicativos use este certificado. 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 os SDKs IoT do Azure.
Ubuntu
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 <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."
Windows
As etapas a seguir são um exemplo de como instalar um certificado de autoridade de certificação em um host 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 tenha copiado o certificado para um local no dispositivo downstream.
Você pode instalar certificados usando o Import-Certificate do PowerShell como 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, procure e selecione Gerenciar certificados de computador. Um utilitário chamado certlm é aberto.
- Navegue até Certificados - Computador Local>Autoridades de Certificação Raiz Confiáveis.
- Clique com o botão direito do mouse em Certificados e selecione Todas as Tarefas>Importar. O assistente de importação de certificados deve ser lançado.
- Siga as etapas conforme indicado e importe o arquivo de
<path>/azure-iot-test-only.root.ca.cert.pemcertificado . Quando concluído, você verá uma mensagem "Importado com êxito".
Você também pode instalar certificados programaticamente usando APIs .NET, conforme mostrado no exemplo .NET mais adiante neste artigo.
Normalmente, as aplicações usam a pilha TLS fornecida pelo Windows chamada Schannel para se conectar com segurança através de TLS. O Schannel requer que todos os certificados sejam instalados no armazenamento de certificados do Windows antes de tentar estabelecer uma conexão TLS.
Usar certificados com SDKs do Azure IoT
Esta seção descreve como os SDKs do Azure IoT se conectam a um dispositivo IoT Edge usando aplicativos de exemplo simples. O objetivo de todos os exemplos é conectar o cliente do dispositivo e enviar mensagens de telemetria para o gateway, fechar a conexão e sair.
Tenha 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 foi modificada para direcionar para o dispositivo gateway, incluindo todos os certificados necessários para autenticar o 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,
<path>/azure-iot-test-only.root.ca.cert.pem.
NodeJS
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.
- Obtenha o exemplo para edge_downstream_device.js do repositório de exemplos do SDK de dispositivo IoT do Azure para Node.js.
- Certifique-se de que você tem todos os pré-requisitos para executar o exemplo, revisando o arquivo readme.md .
- 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 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'),
};
.NET
Esta seção apresenta um aplicativo de exemplo para conectar um cliente de dispositivo do Azure IoT .NET a um gateway do IoT Edge. No entanto, os aplicativos .NET são automaticamente capazes de usar quaisquer certificados instalados no armazenamento de certificados do sistema em hosts Linux e Windows.
- Obtenha o exemplo para EdgeDownstreamDevice da pasta de exemplos do IoT Edge .NET.
- Certifique-se de que você tem todos os pré-requisitos para executar o exemplo, revisando o arquivo readme.md .
- No arquivo Propriedades / launchSettings.json, atualize as variáveis DEVICE_CONNECTION_STRING e CA_CERTIFICATE_PATH. Se você quiser usar o certificado instalado no armazenamento 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 o exemplo no seu dispositivo.
Para instalar programaticamente um certificado confiável no armazenamento de certificados por meio de um aplicativo .NET, consulte a função InstallCACert() no arquivo EdgeDownstreamDevice / Program.cs . Esta operação é idempotente, por isso pode ser executada várias vezes com os mesmos valores sem efeito adicional.
C
Esta seção apresenta um aplicativo de exemplo 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 a aplicação iotedge_downstream_device_sample dos exemplos do SDK de dispositivos IoT do Azure em C.
- Certifique-se de que você tem todos os pré-requisitos para executar o exemplo, revisando o arquivo readme.md .
- 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 o exemplo 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. Esta operação não instala o certificado em nenhum lugar, mas usa um formato de cadeia de caracteres do certificado na memória. Ao estabelecer uma conexão, o certificado guardado é fornecido à pilha TLS subjacente.
(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 no IDE do Arduino exigirá a adição do certificado da autoridade de certificação a uma matriz de certificados definida num arquivo certs.c global, em vez de usar a IoTHubDeviceClient_LL_SetOption operação.
Em hosts Windows, se não estiver a usar OpenSSL ou outra biblioteca TLS, o SDK utiliza por padrão o Schannel. Para que o Schannel funcione, o certificado de CA raiz do IoT Edge deve ser instalado no armazenamento de certificados do Windows, e não configurado por meio da operação IoTHubDeviceClient_SetOption.
Java
Esta seção apresenta um aplicativo de exemplo para conectar um cliente de dispositivo Java do Azure IoT a um gateway do IoT Edge.
- Obtenha o exemplo para Send-event dos exemplos do SDK do dispositivo IoT do Azure para Java.
- Certifique-se de que você tem todos os pré-requisitos para executar o exemplo, revisando o arquivo readme.md .
- Consulte a documentação do SDK para obter instruções sobre como executar o exemplo no seu dispositivo.
Python
Esta seção apresenta um aplicativo de exemplo para conectar um cliente de dispositivo Python do Azure IoT a um gateway do IoT Edge.
- Obtenha o exemplo do send_message_downstream nos exemplos do SDK do dispositivo IoT do Azure para Python.
- Defina as variáveis de ambiente
IOTHUB_DEVICE_CONNECTION_STRINGeIOTEDGE_ROOT_CA_CERT_PATHconforme especificado nos comentários do script Python. - Consulte a documentação do SDK para obter instruções adicionais sobre como executar o exemplo no seu dispositivo.
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 conexões sobre 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).
Solucionar problemas na conexão do gateway
Se o dispositivo downstream tiver uma conexão instável com o dispositivo gateway, tente as etapas a seguir para resolver.
- O nome de anfitrião do gateway na cadeia de conexão é igual ao valor do nome de anfitrião no ficheiro de configuração do IoT Edge no dispositivo de gateway?
- É possível resolver o nome do host do gateway 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.