Série Nexto - Certificado TLS na comunicação MQTT

Este documento é um adendo ao tutorial referente a comunicação MQTT na série Nexto, explicando como utilizar certificados de segurança na comunicação MQTT.


Componentes

 

Software:

MasterTool IEC XE v3.23

 

 

CLP:

XP340


Seções do Tutorial

1. CONHECENDO O TLS

2. ARQUITETURA

3. DESENVOLVIMENTO

   3.1. Instalando o software OpenSSL Windows

   3.2. Configuração do software Mosquitto

   3.3. Desenvolvendo aplicação no CLP

4. RESULTADO


____________________________________________________________________________________________________________________________________


1. CONHECENDO O TLS

O TLS consiste em certificados, sendo muito semelhante ao método que os navegadores usam para o HTTPS e utilizando o SSL para gerar esses certificados (OpenSSL). O certificado é gerado a partir de uma chave pública e privada, chamada de Certificado de Autoridade (CA).


Este certificado contém uma chave padrão que é utilizada em todos os demais certificados, como: server (à direita na imagem acima) e client (à esquerda na imagem acima). O certificado no servidor apresenta uma chave pública e privada própria e uma chave pública junto ao certificado.

O arquivo ".csr" é um arquivo intermediário que carrega a requisição do certificado (não utilizado no final) e o arquivo ".crt" é o certificado final.

O CA é a chave principal, pois ele atua como um dicionário para a criptografia, ou seja, colocando o arquivo ".key" e o arquivo ".crt" do server no broker e habilitando as funções TLS nele, toda a comunicação dele será criptografada. Em suma, um cliente precisará do CA para que possa entender a criptografia, podendo dessa forma, responder para o broker.

É possível também um recurso adicional e fazer com que o broker só aceite conexões que tenham outro certificado, além do CA. Dessa forma, semelhante ao servidor, um cliente passa a ter mais dois arquivos, um arquivo ".key" e um arquivo ".crt", que são usados no handshake do client com o server.

Em um TLS simples, pode haver três arquivos de output: CA.crt, server.key e server.crt, onde estes arquivos irão para o broker e o client ficará somente com o arquivo CA.crt. Também, é possível que o broker requisite um certificado TLS do cliente. Nesse caso, serão 5 arquivos de outputs: os mesmos três citados anteriormente e mais dois, sendo: um client.key e um client.crt.

Obs.: Lembre-se sempre que todos os certificados são EXCLUSIVOS para o Hostname do servidor e do cliente, ou seja, não são recicláveis.



2. ARQUITETURA

Na arquitetura deste tutorial, conectou-se a porta Ethernet da CPU XP340 a porta Ethernet de um computador por meio do cabo NX9202.



3. DESENVOLVIMENTO

Neste tutorial serão utilizados os cinco arquivos de criptografia mencionados no capítulo 1 (CA.crt, server.key, server.crt, client.key e client.crt) para criptografar a comunicação MQTT desenvolvida no tutorial do link abaixo:

https://www.altus.com.br//base-conhecimento/categoria/19/detalhe/494/mqtt---serie-nexto-


Antes de iniciar os passos para utilização dos certificados, o leitor deve-se atentar aos seguintes requisitos:

Ajustar o relógio do CLP;
Utilizar a versão 1.0.0.5 da biblioteca LibMQTT disponível a partir da versão 3.23 do software MasterTool IEC XE.

Obs.: Neste tutorial será demonstrado apenas como utilizar os certificados TLS na comunicação MQTT dos CLPs da série Nexto. Portanto, a ação de gerar certificados TLS será de responsabilidade do leitor, utilizando a forma que desejar.



3.1. Instalando o software OpenSSL Windows

Primeiramente, será necessário instalar o software OpenSSL. Para isso, acesse o link abaixo e selecione a versão de acordo com o sistema operacional do computador que o software será utilizado.

https://slproweb.com/products/Win32OpenSSL.html


Neste tutorial foi utilizado a versão da imagem abaixo:


Após instalar o software OpenSSL, adicione a pasta "bin" da pasta raiz do programa (e.g. C:\Program Files\OpenSSL-Win64\bin) como PATH nas variáveis de ambiente do Windows. Para isso, siga os passos do documento que instrui como modificar e criar variáveis de ambiente no Windows, cujo link está abaixo:

https://docs.oracle.com/en/database/oracle/r-enterprise/1.5.1/oread/creating-and-modifying-environment-variables-on-windows.html#GUID-DD6F9982-60D5-48F6-8270-A27EC53807D0


Para verificar se a configuração e instalação do software OpenSSL ocorreu sem problemas, abra um prompt do MS-DOS e digite "openssl version", conforme imagem abaixo, na pasta que estiver. Ele deve retornar a versão do OpenSSL que você acaba de instalar.



3.2. Configuração do software Mosquitto

Com os certificados gerados, crie uma pasta chamada "Certs" na pasta de instalação do Mosquitto e copie para dentro desta pasta os arquivos ca.crt, server.key e server.crt, conforme imagem abaixo:


Na pasta de instalação do software Mosquitto, abra o arquivo mosquito.conf e realize as seguintes alterações no arquivo:

"Descomente" a linha (apagando o caractere "#") e altere o número da porta de 1883 para 8883.


"Descomente" as linhas com os nomes cafilecertfile e keyfile, e insira o caminho dos arquivos copiados anteriormente para a pasta "Certs".


"Descomente" e ajuste as linhas require_certificate e tls_version para true e tlsv1.2, respectivamente.


Após realizar essas alterações no arquivo mosquito.conf, salve-o. Por fim, execute o software Mosquitto digitando cmd na linha do Explorer.


No prompt de comando que abrirá, digite o comando mosquito -v -c mosquito.conf para executar o software Mosquito juntamente com o arquivo mosquito.conf.



3.3. Desenvolvendo aplicação no CLP

Com o projeto devidamente criado, faça Login no CLP e carregue os arquivos ca.crt, client.key e client.crt no mesmo. Para isso, na árvore do projeto, dê um duplo-clique em Device (1) para abrir sua aba. Na guia Arquivos (2), vá até o diretório onde estão os arquivos de criptografia (3), selecione os arquivos ca.crt, client.key e client.crt (4), e envie para a pasta cert do CLP (5).