Objetivo

           Como mencionado nos outros tutoriais de MQTT: Introdução ao MQTTe Segurança no MQTT, manter a segurança de uma comunicação é muito importante para proteção dos dados que estão sendo transmitidos, em razão disso, esse tutorial trabalhará com o modo TLS do protocolo MQTT, além da geração de certificados de segurança. O processo de ensino será dividido nos seguintes tópicos:

Introdução

Protocolo SSL

Protocolo TLS

Objetivos do Protocolo SSL/TLS

Diferenças entre HTTP e HTTPS

O que é um Certificado Digital?

O que é um OpenSSL e como baixar?

Como gerar uma Autoridade de Certificação?

Como criar um Certificado de Segurança do Servidor?

Conclusão

  Para acompanhar esse tutorial é necessário que você tenha visto os outros dois tutoriais anteriores, pois trabalharemos com conhecimentos adquiridos previamente, além de utilizarmos a ferramenta MQTTBox, apresentada em: Introdução ao MQTT



Introdução

           Desde os primórdios da internet, os protocolos TLS e seu antecessor, SSL, possibilitam a transmissão de mensagens criptografadas, garantindo  dessa forma a segurança dos usuários. Frequentemente esses protocolos são atualizados com a intenção de aumentar a segurança que visa proteger o sistema de invasores e a integridade dos dados. É comum o uso do TLS em aplicativos de navegação, e-mails, troca de mensagens, entre outras aplicações com o uso de dados pessoais.

Protocolo SSL

           Os protocolos são padronizações para troca de informações entre máquinas. O protocolo SSL (Secure Sockets Layer) foi desenvolvido em julho de 1994 pela Netscape e distribuído junto aos navegadores Netscape e Internet Explorer. Nos anos posteriores, foi criado o SSL 1.0, mas o mesmo não foi lançado ao público, posteriormente foi apresentado o SSL 2.0 com diversas falhas. A versão reformulada, lançada em 1996, serviu de pilar para o TLS, esse último mais atualizado e seguro. Apesar da substituição, é comum encontrarmos o TLS sendo chamado de SSL.

Protocolo TLS

           Em 1999 foi lançado o TLS (Transport Layer Security), responsável por criptografar o tráfego da web e outros. Diferentemente do SSL, o TLS faz uso do algoritmo Keyed-Hashing for Message Authentication Code (HMAC), enquanto o SSL se utiliza apenas do Message Authentication Code (MAC). O HMAC produz hashes mais seguros. No TLS, não é estritamente necessário recorrer a uma raiz AC (Autoridade Certificadora e Registradora) para uso de uma certificação, sendo possível recorrer a uma autoridade intermediária, outra vantagem é o uso de novas mensagens de alerta.

 

Objetivos do Protocolo SSL/TLS

           Os principais objetivos do Protocolo é a segurança através do uso da criptografia, a interoperabilidade entre programadores, a extensibilidade criptográfica, com a opção de adição de novos métodos de criptografia sem a necessidade de inclusão de bibliotecas, além da eficiência relativa, que consiste em um mecanismo de armazenamento para evitar processamentos criptográficos a cada nova conexão, pois a criptografia exige alto processamento.

           O SSL e o TLS fornecem um canal de comunicação seguro entre máquina-máquina ou dispositivos que fazem uso de internet ou rede interna. Um exemplo de seu uso é para proteção entre navegador e servidor, transformando um site HTTP em HTTPS, sendo que o S representa “secure”, em português, “seguro”.


Protocolo SSL

Diferenças entre HTTP e HTTPS

           HTTP (Hypertext Transfer Protocol) é um protocolo de comunicação utilizado para transferir dados entre usuário e servidor. Analogamente, o HTTPS possui a mesma função, com a diferença de agir sobre a camada (SSL/TLS), essa camada possibilita que os dados sejam transmitidos de forma criptografada e com garantia de autenticação de servidor através dos certificados digitais, que aprenderemos mais adiante como elaborar.  Em 2017 o Google tomou a medida de classificar todos os sites HTTP como inseguros.

Erro de certificado

           Para saber se um site é seguro, basta conferir se no início da URL existe um cadeado verde ou cinza, esse cadeado indica que a conexão é HTTPS, outrossim, se clicarmos nesse cadeado será possível ver a certificação desse site.
site seguro

         
             Para visualizar o certificado de segurança de um site, basta clicar no cadeado e ir em >>Certificado

certificado de segurança do site

O que é um Certificado Digital?

           Um certificado digital é um documento virtual com uma assinatura algoritma única, dados de identificação do site, informações do emissor e período de validade, o certificado garante a autenticidade e a proteção das informações compartilhadas e é de extrema relevância para sites que exigem cadastro de usuário e inserção de dados pessoais, por essa razão, é estritamente recomendado que não sejam inseridas informações pessoais em sites não certificados .  O certificado deve ser emitido por uma autoridade certificadora confiável, essa confiabilidade se baseia em uma lista nomeada de “certificadoras raiz”, no tutorial aprenderemos a simular a exigência do certificado para a nossa comunicação, além de criarmos o nosso próprio certificado para fins de teste. Abaixo está o certificado digital da Curto Circuito, o mesmo que aparece ao clicarmos em cadeado>>certificado.

informações do certificado de segurança
           Para criarmos o nosso certificado digital, é necessário que baixemos o OpenSSL.

O que é o OpenSSL e como baixar

          O OpenSSL é um conjunto de recursos essenciais para o desenvolvimento de comunicação baseada nos protocolos SSL/TLS, além de ser uma biblioteca de criptografia para uso geral. O OpenSSL possui licença do tipo Apache, sendo livre para obtenção e utilização para fins comerciais e não-comerciais desde que esteja de conformidade com as licenças disponíveis no site. 

          Para baixar o OpenSSL, é necessário acessar o link abaixo e clicar em “Download

https://sourceforge.net/projects/openssl/

 

download openssl
         

           Depois de finalizado o download, clique no arquivo e extraia para uma pasta em “Extract to
extract to

           
           Em seguida, escolha como destino a raiz C “C:\” e clique em “Ok

pasta destino C:\" title=

 

           Ao término desse processo, abra o Prompt de Comando, para tal, digite “cmd” no campo de pesquisas de sua área de trabalho e seguidamente clique em “abrir”.
prompt de comando

 

           
           Estando aberto o Prompt, realize a transferência de diretório digitando cd.. para voltar um diretório ou cd NomeDoDiretório para avançar para o diretório em questão, a intenção é acessar o OpenSSL para realizar as devidas configurações.

cd prompt

           
           Depois de acessarmos o diretório do OpenSSL, abriremos a pasta bin do mesmo.

OpenSSL\bin

           
               Feito isso, é necessário movimentar o arquivo openssl.cnf para um diretório acima. Vamos acessar a nossa pasta do OpenSSL , entrar em bin, copiar o arquivo “openssl.cnf” e colar fora da pasta bin, dessa forma:
pasta openssl

pasta bin OpenSSL
recortar openssl.cnf
colar_openssl

 


Como gerar uma Autoridade de Certificação (CA)

           
           Depois de colar, vamos iniciar o nosso processo para gerar um certificado digital, primeiramente vamos criar uma chave para simular a Autoridade Certificadora, essa autoridade é a responsável por validar o certificado, assim como o cartório valida uma assinatura.
           Para fazermos isso, iremos voltar ao Prompt de Comando e digitar

openssl genrsa -des3 –out autoridade.key 2048

 

           Onde, genrsa é o comando para gerar o algoritmo chave do tipo RSA, também existe o tipo ECDSA, mas como é mais recomendado o uso do RSA por razões de compatibilidade, usaremos este. O –des3 se refere a senha que criaremos, definimos que a mesma será criptografada em Triple-DES. O autoridade.key é o nome do nosso arquivo gerado do tipo .key, enquanto 2048 é o tamanho do mesmo em bits.

chave da autoridade certificadora
           Atentando-se ao fato de que a senha deve possuir mais de 4 caracteres e deve ser repetida para confirmação.

           Depois disso criaremos um certificado para a Autoridade Certificadora, para tanto, usaremos a chave que acabamos de criar, basta colarmos o algoritmo no Prompt de Comando.

openssl req -new -x509 -days 365 -key autoridade.key -out autoridade.cer

           Em req -new eu faço um requerimento de um novo certificado para a Autoridade, o -x509 corresponde a um padrão que define o formato dos certificados. Um certificado x509 conta com a identidade de uma organização e é assinado por uma autoridade certificadora. Em -days eu defini a validade do meu certificado para 1 ano. Com o algoritmo -key eu inseri minha chave gerada com o nome de autoridade.key e defini o nome do meu certificado para autoridade.cer

certificado da autoridade

 

           Ao pressionar “Enter”, teremos que fornecer alguns dados para a emissão do certificado, esses dados são:
informações para geração de certificado digital


          Se acessarmos a pasta OpenSSL>>Bin, veremos o nosso certificado e os seus parâmetros.
certificado da autoridade certificadora

           Note que o “é” do “Note-Técnico” não aparece por se tratar de um caractere especial, de qualquer forma, é importante colocar o nome exato da sua máquina, mesmo que esta tenha caracteres especiais.

Como criar um Certificado de Segurança do Servidor

            Seguidamente, criaremos a chave destinada ao servidor, copie e cole o seguinte código no Prompt de Comando:

openssl genrsa -out servidor.key 2048

 

           O servidor.key é o arquivo do tipo .key que criaremos
par de chaves do servidor

           
           Depois de criarmos o par de chaves para o servidor, criaremos a requisição do certificado com o seguinte código:

 

openssl req -new -out servidor.csr -key servidor.key

 

            o servidor.csr é o nosso arquivo .crs de requerimento de certificado, e o servidor.key é o nosso arquivo chave gerado no passo anterior, nesse código estamos requerindo –req uma nova -new saída –out do tipo crs.

            Para preenchimento dos dados, usaremos como base o que fizemos ao criar a requisição do certificado da Autoridade, sendo fundamental usar o nome do computador ou o IP, o mesmo utilizado no “Common Name” para gerar o certificado da Autoridade Certificadora.

requisição de certificado de segurança

           
           Ao término do requerimento, usaremos a chave da Autoridade Certificadora para validar o nosso certificado de servidor, insira o seguinte código no prompt de comando:

 

openssl x509 -req -in servidor.csr -CA autoridade.cer -CAkey autoridade.key -CAcreateserial -out servidor.crt -days 365

 

           Inserimos a requisição de certificado por parte do emissor em -req -in servidor.csr, carregamos o arquivo de certificado da autoridade -CA autoridade.crt, em seguida carregamos o arquivo de chave da autoridade -CAkey autoridade.key e criamos o arquivo servidor.crt com validade de um ano -days 365

certificado autenticado

           É realizada a assinatura do certificado do servidor, perceba que as informações inseridas são confirmadas.         

 Depois disso, é necessário obter a Fingerprint (assinatura) do servidor, para isso precisamos inserir no prompt o código:

 

openssl x509 -in servidor.crt -sha1 -noout -fingerprint

 

           -sha1 é um algoritmo de dispersão seguro, apresentando maior segurança do que sua versão anterior SHA-0.

fingerprint

           Depois de finalizado esse processo, faremos as configurações no Broker para exigência de certificado.             
           Para tanto, usaremos os seguintes arquivos criados:  
           autoridade.cer, servidor.crt e servidor.key
       
           Todos esses arquivos estão na pasta bin do OpenSSL, devemos recortar os necessários e colar na nossa pasta Mosquitto, como mostrado abaixo:

arquivos necessários

 
arquivos mosquitto

           
           Depois de colar os arquivos na pasta mosquitto, vamos abrir o mosquitto.conf com o Notepad++ para realizarmos as modificações necessárias.
           Pressione Ctrl+F e realize uma busca por “port to use
port to use
porta 8883 mqtt


           Devemos desmarcar port como comentário, tirando a cerquilha (#) e definindo a porta como 8883, pois a mesma é destinada para uso do MQTT sobre o SSL.
           Em seguida, realizaremos uma nova busca por “cafile

cafile

           
             E na quarta ocorrência do cafile, tiraremos o cerquilha (#) e colocaremos o endereço do arquivo de certificado da Autoridade Certificadora.
cafile autoridade certificadora


             Faremos o mesmo com os comentários abaixo, apagaremos o cerquilha (#) e colocaremos o endereço do certificado do servidor e da chave do mesmo.
certificado e chave do servidor

           
            Continuaremos realizando as mudanças, devemos buscar por tls_version
tls_version

            Mudaremos para a versão de acordo, no meu caso é a 1.2
versão tls
           Finalizando esse processo, devemos salvar as modificações no arquivo.
           Voltaremos ao nosso prompt e iniciaremos a nossa conexão com certificado.

           Digitaremos cd.. até atingirmos a raíz C:\

           Depois usaremos cd para acessarmos o diretório CC_Mosquitto.

           Em seguida executaremos o mosquitto com o novo arquivo de configuração, digitando:

mosquitto -v -c mosquitto.conf


Conectado com o broker

           Atente-se ao fato de que o mosquitto foi aberto utilizando a porta 8883, sendo as outras mensagens referentes a um cliente que já foi conectado previamente para teste.
           Agora abriremos o MQTTBox para configurarmos o cliente para a comunicação segura.

           Como ensinado no tutorial anterior, criaremos um novo cliente no MQTTBox.

           Identificaremos o cliente para distinção entre clientes criados no MQTTBox.


client mqtt

            Em seguida modificaremos o protocolo, dessa vez estamos trabalhando com o mqtts/tls.

protocolo mqtt

 

           
           Deixaremos o reconhecimento de versão do SSL/TLS (SSL/TLS version) no automático (auto). E nos identificaremos com nome (username) e senha (password) que criamos no tutorial passado.
mqtt usuário

 

         
           Em host colocaremos o common-name que definimos no momento que estávamos gerando o certificado, ou seja, o nome do nosso computador.
host mqtt

           
           No SSL/TLS Connection Type, definiremos a conexão para certificado do servidor assinado pela autoridade certificadora (CA signed server certificate)
Tipo de certificado MQTTBox

             
           As outras configurações são opcionais, depois de feitas todas as mudanças, salve.
save mqttbox

           
           Aguarde até que o cliente seja conectado, abaixo podemos ver que a conexão é do tipo mqtts://

mqtts
Se desejar, realize inscrições e publicações como ensinado nos tutoriais anteriores, continuaremos trabalhando com o MQTT nos nossos próximos tutoriais.

Conclusão

           Diante das diversas medidas de segurança apresentadas nos tutoriais anteriores e neste, é possível constatar que o MQTT é uma forma de comunicação extremamente segura e que oferece diversas alternativas para manter a privacidade dos dados compartilhados. Uma comunicação MQTTS tem o diferencial de ser um MQTT que conta com um certificado de autenticação, garantindo a criptografia das informações inseridas e a integridade do servidor, sendo de todas as formas explanadas, a mais confiável. Depois de aprendermos de forma minuciosa sobre segurança do MQTT, vamos trabalhar melhor a troca de informações nos próximos tutoriais. 

Abraços, Equipe Curto Circuito