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.1.1 Geração de Certificados por OpenSSL
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:
Saiba como utilizar o protocolo MQTT na Série 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:
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.1.1. Geração de Certificados por OpenSSL
O OpenSSL é um pacote de código aberto com ferramentas que ajudam a gerar muitos arquivos e recursos de segurança.
Este pacote é nativo para a maioria das distribuições do Linux e está disponível para Windows. Apenas lembre-se de definir
a pasta OpenSSL no PATH (variável de ambiente) para permitir o uso do comando de qualquer lugar através do prompt.
Encontre abaixo o passo a passo utilizando este recurso (todos os arquivos podem ter qualquer nome conforme desejado, os
passos consideram apenas um exemplo):
1- Abra um prompt na pasta do certificado (onde criará os arquivos).
2- Gere a chave privada da CA com o seguinte comando: openssl genrsa -out ca.key 4096.
3- Em seguida, gere o certificado CA com base na chave privada, utilizando o comando openssl req -new -x509 -days 365
-key ca.key -out ca.crt.
O parâmetro -days representa o tempo de expiração do certificado. Configure-o como desejar. Neste exemplo, o certificado
é válido por um ano. Preencha os valores solicitados no prompt conforme necessário (pressione enter para usar o padrão, que
está entre colchetes []). É obrigatório definir um Nome Comum para o trabalho do certificado.
4- Agora, gere a chave privada do dispositivo, semelhante à etapa 2, utilizando o comando openssl genrsa -out Device-
Name.key 2048.
5- Depois disso, gere o arquivo de solicitação de certificado com base na chave privada, utilizando o comando openssl req
-new -key DeviceName.key -out DeviceName.csr.
Insira as informações desejadas e lembre-se de usar um nome comum diferente da CA.
6- Por fim, gere o certificado do dispositivo usando a chave privada da CA, o certificado da CA e o arquivo de solicitação
de certificado do dispositivo, utilizando o comando openssl x509 -req -days 365 -in DeviceName.csr -CA ca.crt -CAkey ca.key
-set_serial 01 -out DeviceName.crt.
Defina a data de expiração conforme desejado com o parâmetro -days e o número de série do certificado com o argumento
-set_serial.
7- Repita as etapas 4 a 6 para qualquer novo dispositivo.
8- (Opcional) O OpenSSL oferece uma ferramenta para verificar se o certificado do dispositivo funciona com CA:
Utilize o comando openssl verify -purpose sslserver -CAfile ca.crt DeviceName.crt.
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 cafile, certfile 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).
Após enviar os arquivos para o CLP, será realizado alteração no programa para utilizar os certificados. Neste tutorial, foi utilizado como base o projeto disponível para download no tutorial referente a comunicação MQTT (link está na introdução do capítulo 3 deste tutorial). Portanto, as alterações serão realizadas na POU MQTT_START.
Na POU MQTT_START altere o valor da variável Port de 1883 para 8883.
Como neste tutorial o broker irá requisitar certificados do cliente, será necessário declarar mais duas variáveis para criptografia TLS. Declare as variáveis Client_Certificate e Client_Key e atribua o nome dos arquivos de criptografia (ca.crt, client.key e client.crt) às variáveis Certificate, Client_Key e Client_Certificate, respectivamente. Por fim, atribua o valor TRUE para a variável EnableTLS, afim de habilitar a utilização da criptografia TLS. A declaração das variáveis da criptografia TLS deve ficar conforme a imagem abaixo:
Após declarar e atribuir valores as variáveis, os mesmos serão carregados na biblioteca. Para isso, atribua as variáveis declaradas nas variáveis da biblioteca, conforme a imagem abaixo:
Por fim, carregue o projeto no CLP.
4. RESULTADO
É possível ver na imagem abaixo que a comunicação MQTT com os certificados TLS foi configurada corretamente.
Comentários
0 comentário
Por favor, entre para comentar.