Demonstração de autenticação mútua da coreMQTT
Importante
Essa demonstração está hospedada no repositório Amazon-FreeRTOS, que está preterido. Recomendamos começar aqui ao criar um novo projeto. Se você já tem um projeto FreeRTOS existente baseado no repositório Amazon-FreeRTOS que está preterido, consulte o Guia de migração do repositório Github do Amazon FreeRTOS.
Introdução
O projeto de demonstração da coreMQTT mostra como estabelecer uma conexão com um agente MQTT usando TLS com autenticação mútua entre o cliente e o servidor. Esta demonstração usa uma implementação de interface de transporte baseada em mbedTLS para estabelecer uma conexão TLS autenticada pelo servidor e pelo cliente e demonstra um fluxo de trabalho de publicação e assinatura de MQTT no nível de QoS 1
nota
Para configurar e executar as demonstrações do FreeRTOS, siga as etapas em Conceitos básicos do FreeRTOS.
Código-fonte
O arquivo de demonstração de origem é chamado mqtt_demo_mutual_auth.c e pode ser encontrado no diretório e no site do GitHubfreertos/demos/coreMQTT/
Funcionalidade
A demonstração cria uma única tarefa de aplicação que percorre um conjunto de exemplos demonstrando como se conectar ao agente, assinar um tópico no agente, publicar em um tópico no agente e, enfim, se desconectar do agente. A aplicação de demonstração assina e publica o mesmo tópico. Cada vez que a demonstração publica uma mensagem para o agente MQTT, o agente envia a mesma mensagem de volta para a aplicação de demonstração.
A conclusão com êxito da demonstração gerará um resultado semelhante ao da imagem a seguir.
O console AWS IoT gerará uma saída semelhante a da imagem a seguir.
Lógica de repetição com recuo exponencial e jitter
A função prvBackoffForRetry
Conexão ao agente MQTT
A função prvConnectToServerWithBackoffRetriesBackoffAlgorithm_GetNextBackoff fornecerá um valor de recuo aumentando exponencialmente e retornará RetryUtilsRetriesExhausted quando o número máximo de tentativas for atingido. A função prvConnectToServerWithBackoffRetries retornará um status de falha se a conexão TLS com o agente não puder ser estabelecida após o número configurado de tentativas.
A função prvCreateMqttConnectionWithBrokerFreeRTOS-Plus/Source/Application-Protocols/platform/freertos/transport/src/tls_freertos.c. Lembre-se de que estamos configurando os segundos de keep-alive para o agente em xConnectInfo.
A próxima função mostra como a interface de transporte TLS e a função de tempo são definidas em um contexto MQTT usando a função MQTT_Init. E mostra também como um ponteiro da função de retorno de chamada de evento (prvEventCallback) é definido. Esse retorno de chamada é usado para relatar mensagens recebidas.
Assinatura em um tópico MQTT
A função prvMQTTSubscribeWithBackoffRetriesRETRY_MAX_ATTEMPTS.
Publicar em um tópico
A função prvMQTTPublishToTopic
Recebimento de mensagens
A aplicação registra uma função de retorno de chamada de evento antes de se conectar ao agente, conforme descrito anteriormente. A função prvMQTTDemoTask chama a função MQTT_ProcessLoop para receber mensagens. Quando uma mensagem MQTT é recebida, ela chama a função de retorno de chamada do evento registrada pela aplicação. A função prvEventCallbackprvEventCallback examina o tipo de pacote recebido e chama o manipulador apropriado. No exemplo abaixo, a função chama prvMQTTProcessIncomingPublish() para manipular mensagens de publicação recebidas ou prvMQTTProcessResponse() para manipular confirmações (ACK).
Processamento de pacotes de publicação MQTT recebidos
A função prvMQTTProcessIncomingPublish
Cancelar a inscrição em um tópico
A última etapa do fluxo de trabalho é cancelar a assinatura do tópico para que o agente não envie mensagens publicadas do mqttexampleTOPIC. Confira aqui a definição da função prvMQTTUnsubscribeFromTopic
Alteração da CA raiz usada na demonstração
Por padrão, as demonstrações do FreeRTOS usam o certificado o Amazon Root CA 1 (chave RSA de 2048 bits) para obter autenticação no servidor do AWS IoT Core. É possível usar outros certificados CA para autenticação do servidor, incluindo o certificado Amazon Root CA 3 (chave ECC de 256 bits). Como alterar a CA raiz da demonstração de autenticação mútua da coreMQTT:
-
Em um editor de texto, abra o arquivo
.freertos/vendors/vendor/boards/board/aws_demos/config_files/mqtt_demo_mutual_auth_config.h -
No arquivo, localize a linha a seguir.
* #define democonfigROOT_CA_PEM "...insert here..."Remover o comentário dessa linha e, se necessário, movê-lo para depois do final
*/do bloco de comentários. -
Copie o certificado CA que você deseja usar e cole-o no texto
"...insert here...". O resultado será algo semelhante a este exemplo:#define democonfigROOT_CA_PEM "-----BEGIN CERTIFICATE-----\n"\ "MIIBtjCCAVugAwIBAgITBmyf1XSXNmY/Owua2eiedgPySjAKBggqhkjOPQQDAjA5\n"\ "MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24g\n"\ "Um9vdCBDQSAzMB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkG\n"\ "A1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJvb3Qg\n"\ "Q0EgMzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABCmXp8ZBf8ANm+gBG1bG8lKl\n"\ "ui2yEujSLtf6ycXYqm0fc4E7O5hrOXwzpcVOho6AF2hiRVd9RFgdszflZwjrZt6j\n"\ "QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSr\n"\ "ttvXBp43rDCGB5Fwx5zEGbF4wDAKBggqhkjOPQQDAgNJADBGAiEA4IWSoxe3jfkr\n"\ "BqWTrBqYaGFy+uGh0PsceGCmQ5nFuMQCIQCcAu/xlJyzlvnrxir4tiz+OpAUFteM\n"\ "YyRIHN8wfdVoOw==\n"\ "-----END CERTIFICATE-----\n" -
(Opcional) Você pode alterar a CA raiz de outras demonstrações. Repita as etapas de 1 a 3 para cada arquivo
.freertos/vendors/vendor/boards/board/aws_demos/config_files/demo-name_config.h