Configurando conexão segura com o uso de TLS na plataforma dojot

Este post faz parte da série Dispositivos reais e segurança na comunicação. Leia também os outros posts da série:

A dojot é uma plataforma brasileira desenvolvida principalmente pelo CPqD e que surgiu com uma proposta open source, visando facilitar o desenvolvimento de soluções e subsidiar o ecossistema IoT com conteúdo local voltado às necessidades do País.

O código dos componentes que compõem a solução está disponível no repositório do Github. Descritivos detalhados da arquitetura, do funcionamento dos componentes e alguns casos de uso podem ser encontrados na documentação.

Introdução

No artigo anterior, abordamos a configuração da comunicação entre uma Raspberry Pi e a plataforma dojot. Um ponto ainda não avaliado na comunicação é a garantia que a conversa está ocorrendo de fato entre a dojot e o correto dispositivo.

Visando solucionar essa questão, este artigo visa implementar a segurança dos dados trafegados a partir da encriptação das mensagens com o uso de certificados digitais.

Iniciaremos utilizando um dispositivo simples e enviando sinais através da linha de comando.

Iremos então alterar a configuração de segurança da dojot, forçando o uso de TLS em toda a comunicação MQTT.

Em seguida, iremos solicitar à plataforma dojot a assinatura de um novo certificado e então utilizá-lo para que comunicação seja restabelecida.

Por fim, seguiremos os mesmos passos para configurar a Raspberry Pi utilizada no artigo anterior, permitindo que ela também se comunique com a dojot de forma segura.

Criação do device

Seguindo os mesmos passos descritos na série introdutória à plataforma dojot, criamos um dispositivo diretamente pela interface gráfica, ao qual foi atribuído o device id 7b7184. Esse será o dispositivo utilizado ao longo deste artigo.

Dispositivo criado sob o ID 7b7184

No artigo de introdução também mencionamos o comando a seguir, que permite a comunicação com o broker MQTT.

Em destaque, o device id, que deve ser atualizado de acordo com o id gerado pelo sistema.

Note que a comunicação é realizada através da porta 1883. Essa é a porta padrão para comunicação MQTT.

Para casos onde a comunicação MQTT utiliza TLS, a porta padrão passa a ser a 8883.

Habilitando TLS na plataforma dojot

Buscando facilitar a rotina de desenvolvimento, as configurações da plataforma presentes no repositório mantêm o TLS desabilitado por padrão. Para que a comunicação possa ser realizada com o uso de TLS, precisaremos inicialmente habilitar esta funcionalidade.

Vá até o diretório docker-compose, baixado durante o processo de instalação, e abra o arquivo docker-compose.yml.

Nele, estão listados todos os contêineres utilizados pela solução.

Procure pelo contêiner nomeado iotagent-mqtt:

Neste trecho, estão listados quais contêineres compõem as dependências deste componente, junto com as portas que serão vinculadas ao host, o critério de inicialização, as variáveis de ambiente e as opções de log.

Nas variáveis de ambiente, habilite a comunicação TLS adicionando uma nova variável, conforme destacado a seguir:

Para que a modificação seja aplicada ao ambiente, execute o seguinte comando:

Aplicando as alterações de configuração.
Note que apenas os serviços afetados são reiniciados.

Agora, ao tentarmos conectar à porta 1883, a conexão é rejeitada.

O mesmo ocorre para conexão na 8883, pois é preciso enviar um certificado para validação de autenticidade.

Configurando um certificado para o dispositivo

O servidor precisa ter em sua posse o certificado digital dos dispositivos que enviarão mensagens.

De forma geral, a troca de mensagens é realizada com a utilização das chaves privadas de ambas as partes e suas correspondentes chaves públicas, contidas nos certificados.

A plataforma dojot conta com uma Autoridade Certificadora, baseada em EJBCA e denominada IOTmidCA.

Para obtenção do certificado, os seguintes passos devem ser seguidos:

  • Criação do par de chaves (arquivo .key)
  • Criação o pedido de certificado (arquivo .csr)
  • Obtenção do certificado junto à Autoridade Certificadora (arquivo .crt)

Para facilitar essas etapas, recomendamos a utilização da ferramenta certificate-retriever, criada exatamente para este fim. Seu código está contido neste repositório.

Os comandos abaixo realizam a cópia dos arquivos para o diretório local e a criação o diretório certs dentro do mesmo.

O script generateLoginPwd.py deve ser utilizado para obtenção do certificado assinado.

Neste script, são necessários os seguintes parâmetros:

  • host: protocolo e endereço onde a plataforma dojot está sendo executada. No nosso caso, http://localhost:8000
  • device_name: ID do dispositivo para o qual será criado o certificado. Aqui, continuaremos utilizando o dispositivo 7b7184.
  • ca_name: nome da Autoridade Certificadora. Na dojot, a CA existente leva o nome IOTmidCA.

Importante: o certificado só pode ser criado para deviceIDs que estejam presentes na plataforma - e, portanto, visíveis pela interface web.

Utilize python3 para a execução do script, enviando também os parâmetros mencionados.

As credenciais de acesso a serem utilizadas são:

  • user: admin
  • password: admin

O log de saída deverá exibir uma mensagem similar à listada abaixo:

Neste caso,o certificado foi criado em ./certs/7b7184.crt.

Adicionalmente, o certificado da Autoridade Certificadora foi armazenado em ./certs/IOTmidCA.crt

Ambos serão utilizados - em conjunto com o arquivo 7b7184.key - para a comunicação entre o client MQTT e o servidor da dojot.

Utilizando a conexão com TLS

Finalmente, uma vez criado o par de chaves do dispositivo e obtido o certificado, podemos realizar a comunicação utilizando TLS.

Para essa finalidade, utilizaremos o cliente mosquitto_pub, visando manter um nível mínimo de complexidade, facilitando assim a depuração de possíveis erros.

Partindo do comando anterior:

Precisaremos alterar a porta a ser utilizada, passando também os parâmetros que indiquem a localização da chave e do certificado assinado do dispositivo, juntamente com o certificado da CA.

Sendo assim, o comando que exemplifica essas mudanças é mostrado a seguir:

Note que os caminhos para o arquivo são relativos ao diretório atual, então os configure de acordo, caso esteja em um diretório diferente do ./certificate-retriever.

Utilizando um dispositivo real para comunicação com TLS

No artigo anterior, configuramos a utilização de uma Raspberry Pi em conjunto com o SensorHat para envio de dados de temperatura, pressão e umidade à plataforma dojot. Neste dispositivo, também recebíamos alertas nos casos de temperatura abaixo de 20ºC ou acima de 40ºC.

Como a plataforma dojot agora está com a configuração de TLS ativada, precisaremos configurar este dispositivo para utilizar certificado em sua comunicação.

Partiremos do script criado para este dispositivo e, então, o modificaremos para que o cliente realize a conexão com o broker de forma segura.

Criando o dispositivo na plataforma dojot

Como o modelo virtual do Raspberry Pi foi criado no artigo acima mencionado, iremos assumir que a plataforma já o possua em sua listagem de dispositivos.

Dispositivo criado no artigo anterior, ao qual foi atribuído o ID 36fc0a.

Criando o certificado para a Raspberry Pi

A partir do utilitário de configuração de certificados, podemos gerar um novo certificado para este dispositivo - lembrando que as credenciais são admin/admin.

Com isso, os seguintes arquivos serão gerados no diretório ./certs:

  • IOTmidCA.crt
  • 36fc0a.crt
  • 36fc0a.key

Configurando a comunicação com TLS a partir do Raspberry Pi

Copie os três arquivos gerados no passo anterior para um diretório da Raspberry Pi. Neste exemplo, utilizaremos o diretório /etc/ssl/certs. Caso esteja utilizando o emulador, faça referência ao path local que leva aos arquivos.

Será utilizado como base o script de comunicação criado no artigo anterior, onde a Raspberry Pi foi configurada para trocar dados com a dojot:

Faremos as alterações necessárias para que a conexão do cliente com o broker seja realizada utilizando os certificados criados. As linhas em destaque no trecho a seguir foram incluídas com tal finalidade. Nelas, foram inseridas as seguintes funcionalidades:

  • Importação da biblioteca para ssl.
  • Indicação do diretório de certificados.
  • Indicação dos arquivos de certificado da CA, do dispositivo e chave do dispositivo.
  • Configuração do uso de certificado na biblioteca MQTT.
  • Alteração da porta de comunicação para a 8883 - padrão para MQTT com TLS

Com isso, a troca de dados entre o dispositivo e a plataforma já pode ser retomada, desta vez utilizando uma via segura para comunicação.

Conclusão

Até aqui, foram vistos os principais procedimentos envolvendo a geração e utilização de certificados a partir da plataforma dojot. Com isso, a comunicação entre dispositivo e dojot passa a ser segura, garantindo ainda que a autoria dos dados gerados realmente é do dispositivo esperado.

Nas séries futuras, utilizaremos essa segurança para que então possamos integrar a plataforma dojot com uma solução de blockchain, garantindo a autenticidade do histórico das informações a partir do uso de um ledger distribuído, potencializando a auditoria de dados.

Outros artigos da série

<< Trocando informações com uma Raspberry Pi e plataforma dojot
Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Internet Das Coisas » Configurando conexão segura com o uso de TLS na plataforma dojot
Comentários:
Notificações
Notificar
guest
0 Comentários
Inline Feedbacks
View all comments
Talvez você goste:

Séries



Outros da Série

Menu

WEBINAR
 
RISC-V:
Novidades de 2020

 

Data: 26/08 às 19:30h - Apoio: Mouser Elecctronics
 
INSCREVA-SE AGORA »



 
close-link