Comunicação segura entre cliente e servidor através do protocolo de segurança TLS usando Mosquitto Broker: IOT Parte 42

Comunicação segura entre cliente e servidor através do protocolo de segurança TLS usando Mosquitto Broker: IOT Parte 42

Transport Layer Security (TLS) é um protocolo de segurança que usa criptografia simétrica para proteger dados. Neste tutorial, a comunicação cliente-servidor será configurada usando o protocolo TLS para que os dados possam ser trocados com segurança entre eles. O corretor Mosquitto é usado para fornecer segurança TLS. O corretor Mosquitto usa a porta 8883 como porta de transmissão criptografada para trocar dados com segurança entre clientes.
Para saber mais sobre os padrões e protocolos IoT, confira o seguinte tutorial –
Padrões e protocolos IoT
Saiba mais sobre protocolos da camada de transporte no seguinte tutorial –
Protocolos da camada de transporte
Imagem mostrando comunicação segura entre cliente e servidor através do protocolo TLS usando Mosquitto Broker

Fig. 1: Imagem mostrando comunicação segura cliente-servidor sobre protocolo TLS usando Mosquitto Broker

Software necessário –
• Plataforma – Linux
• Corretor Mosquitto instalado
• Cliente espião MQTT ou Terminal Linux.
Protocolo TLS –
O protocolo TLS oferece os seguintes recursos –
1) Criptografia de dados – Os dados são criptografados de ponta a ponta para que, além das duas partes que estão trocando as informações, ninguém possa entendê-los.
2) Integridade dos Dados – Os dados criptografados não podem ser manipulados por ninguém.
3) Autenticação – Uma parte pode enviar os dados para outra parte somente quando tiver autenticidade para enviar os dados para essa parte.
Na segurança TLS, o Cliente ou Corretor usa chave pública para criptografar as mensagens, chave privada para descriptografar as mensagens e certificado para assinar a mensagem. Para ativar a segurança TLS, um cliente requer o seguinte –
1) Certificado de cliente certificado por CA (autoridade de certificação)
2) Chave privada do cliente para descriptografia
3) Certificado CA que assinou o certificado do servidor.
Para ativar a segurança TLS, o servidor requer o seguinte –
1) Certificado de servidor certificado pela CA
2) Chave privada do servidor para descriptografia
3) Certificado CA que assinou o certificado do cliente.
O openssl é usado para criar a própria autoridade de certificação (CA), chaves de cliente, chaves de servidor e certificados. O openssl pode ser instalado pelos seguintes comandos –
Captura de tela do comando para instalar o Openssl
Fig. 2: Captura de tela do comando para instalar o Openssl
Em seguida, crie uma pasta (qualquer nome) no diretório inicial e vá para esse diretório pelo terminal. Agora siga as etapas abaixo para gerar as chaves e certificados.
1) Crie o par de chaves pública e privada da CA executando o seguinte comando no terminal –
Captura de tela do comando para criar pares de chaves públicas e privadas de CA
Fig. 3: Captura de tela do comando para criar pares de chaves públicas e privadas de CA
No comando acima –
genrsa: Gera uma chave privada RSA
-des3: Vamos usar a cifra DES3 para a geração da chave (senha)
size_of_private_key_in_bits é 2048
-out: especifica o nome do arquivo para a chave (.key)
Este comando irá gerar um arquivo de chave privada da CA. Ele solicitará a gravação da senha definida pelo usuário. Esta senha será usada posteriormente quando o certificado CA for assinado com esta chave privada.
2) Crie um certificado CA usando a chave CA executando o seguinte comando –
Captura de tela do comando para criar certificado CA
Fig. 4: Captura de tela do comando para criar certificado CA
No comando acima,
req: é solicitação de certificado
-new: gera um novo certificado e solicitará ao usuário vários campos de entrada.
-x509: cria um certificado autoassinado.
-days: especifica o número de dias que o certificado é válido.
-key: é o arquivo-chave com a chave privada a ser usada para assinatura
-out: especifica o nome do arquivo do certificado (.crt)
3) Agora crie o par de chaves do servidor executando o seguinte comando –
Captura de tela do comando para criar par de chaves do servidor
Fig. 5: Captura de tela do comando para criar par de chaves do servidor
opensslgenrsa -out mosquitto_server.keysize da chave privada em bits.
Não está protegido com senha aqui. No comando acima,
genrsa: gera uma chave privada RSA
-out: especifica o nome do arquivo para a chave (.key)
size_of_private_key_in_bits é 2048
4) Agora crie uma solicitação de certificado para o servidor usando a chave privada do servidor executando o seguinte comando –
Captura de tela do comando para criar uma solicitação de certificado para servidor
Fig. 6: Captura de tela do comando para criar uma solicitação de certificado para servidor
No comando acima –
req: é solicitação de certificado
-new: gera um novo certificado e solicitará ao usuário vários campos de entrada.
-key: é o arquivo-chave com a chave privada a ser usada para assinatura
-out: especifica o nome do arquivo do certificado (.csr)
5) Em seguida, use o certificado CA para assinar a solicitação de certificado do corretor executando o seguinte comando –
Captura de tela do comando para assinar o certificado do corretor
Fig. 7: Captura de tela do comando para assinar o certificado do corretor
No comando acima,
x509: cria um certificado autoassinado.
-req: é solicitação de certificado
-in: é o arquivo de entrada do certificado
-CA: especifica o arquivo a ser assinado
-CAkey: é a chave privada da CA para assinar o certificado
-CAcreateserial: é o arquivo de número de série que é criado se não existir
-out: especifica o nome do arquivo do certificado (.crt)
-days: especifica o número de dias que o certificado é válido.
6) Para o cliente, o mesmo procedimento é seguido para gerar a chave privada do cliente, a solicitação de certificado do cliente e depois assinar a solicitação de certificado por certificado CA.
O par de chaves do cliente é gerado pelo seguinte comando –
Captura de tela do comando para gerar par de chaves do cliente
Fig. 8: Captura de tela do comando para gerar par de chaves do cliente
A solicitação de certificado do cliente é feita executando o seguinte comando –
opensslreq -new -out mosquitto_client.csr -key mosquitto_client.key
O certificado CA para assinar o certificado do cliente é gerado executando o seguinte comando –
Captura de tela do comando para assinar certificado de cliente por certificado CA
Fig. 9: Captura de tela do comando para assinar certificado de cliente por certificado CA
Agora há um total de 9 arquivos criados com os seguintes nomes –
– CA.key: arquivo de chave CA (pública e privada)
– CA.crt: certificado CA
– CA.srl: arquivo de número de série da CA
– mosquitto_server.key: chave do servidor
– mosquitto_server.csr: solicitação de certificado do servidor
– mosquitto_server.crt: certificado do servidor
– mosquitto_client.key: chave do cliente
– mosquitto_client.csr: solicitação de certificado de cliente
– mosquitto_client.crt: certificado do cliente
Em seguida, a autenticação de clientes também precisa ser habilitada. A partir disso, os clientes serão conectados ao servidor MQTT somente quando souberem o nome de usuário e a senha do servidor MQTT. Siga as etapas abaixo para ativar a autenticação –
1) Crie o arquivo server_password.txt em qualquer lugar e dentro deste arquivo, crie nome de usuário e senha da seguinte forma –
Captura de tela do comando para criar server_password.txt
Fig. 10: Captura de tela do comando para criar server_password.txt
2) Em seguida, criptografe este arquivo usando o seguinte comando –
Captura de tela do comando para criptografar o arquivo Server_password.txt
Fig. 11: Captura de tela do comando para criptografar o arquivo Server_password.txt
3) Em seguida, instale o corretor Mosquitto. Como o Linux é usado, para instalar o corretor, primeiro adicione o repositório Mosquitto executando o seguinte comando e instale o corretor mosquito –
Captura de tela do Mosquito Broker em execução na porta criptografada 8883
Fig. 12: Captura de tela do comando para instalação do Mosquito Broker
Em seguida, instale os clientes Mosquitto para o PC instalando as bibliotecas de desenvolvedor do Mosquitto e o pacote do cliente Mosquitto da seguinte forma –
Captura de tela do comando para instalar clientes Mosquitto
Fig. 13: Captura de tela do comando para instalação de clientes Mosquito
O mqtt-spy também pode ser usado junto com o cliente MQTT. Para usar o espião MQTT, pule as etapas acima. Agora o corretor está instalado junto com o cliente e os certificados também.
O Mosquitto por padrão está configurado para rodar na porta 1883. Portanto, há necessidade de uma porta TLS, ou seja, 8883. A configuração do corretor Mosquitto pode ser alterada para escutar na porta criptografada. Mas antes disso, dos 9 arquivos gerados, copie os 3 arquivos a seguir e cole na pasta /etc/mosquitto/
• CA.crt – Cole este arquivo em /etc/mosquitto/ca_certificates. Se esta pasta não estiver presente, podemos criar uma pasta e colar o arquivo
• mosquitto_server.crt – Cole este arquivo em /etc/mosquitto/certs.
• mosquitto_server.key – Cole este arquivo em /etc/mosquitto/certs
Agora copie o arquivo de senha “server_password.txt” e cole-o no caminho /etc/mosquitto. Agora, existe o arquivo de configuração padrão. Altere o arquivo – mosquitto.conf como segue –
Captura de tela das alterações no arquivo de configuração padrão
Fig. 14: Captura de tela das alterações no arquivo de configuração padrão
Agora o arquivo de configuração foi configurado. É hora de executar o corretor Mosquitto com este arquivo de configuração. Execute-o com superusuário pelos seguintes comandos –
sudomosquitto –c mosquito.conf –v
Pode-se observar que o corretor Mosquitto está rodando na porta 8883 com segurança TLS da seguinte forma –
Captura de tela do Mosquito Broker em execução na porta criptografada 8883
Fig. 15: Captura de tela do Mosquito Broker em execução na porta criptografada 8883
É hora de testar o corretor com os clientes MQTT. Para publicar os dados no corretor Mosquitto, execute o seguinte comando –
Captura de tela do comando para instalar o Mosquito Broker
Fig. 16: Captura de tela do comando para publicar os dados no Mosquito Broker
E para assinar o tópico do corretor MQTT executando o seguinte comando –
Captura de tela do comando para assinar o tópico do corretor MQTT
Fig. 17: Captura de tela do comando para assinar o tópico do MQTT Broker
Pode-se observar que tudo o que é enviado no corretor MQTT pelo lado do editor é recebido pelo lado do assinante. Essa comunicação cliente-servidor é feita de forma altamente criptografada.
Captura de tela da comunicação cliente-servidor usando o MQTT Broker
Fig. 18: Captura de tela da comunicação cliente-servidor usando o corretor MQTT

Conteúdo Relacionado

Voltar para o blog

Deixe um comentário

Os comentários precisam ser aprovados antes da publicação.