Erreur Protocole MQTT (rc=-2)

Bonjour, j'ai un petit problème qui dure depuis un gros moment et cela est un peu pesant depuis. Je suis entrain de réaliser une connexion avec un serveur MQTT entre une carte ESP8266 ainsi qu'une machine virtuelle sur Oracle Virtualbox dont la connexion Mosquitto fonctionne. Ce qui ne marche pas, c'est le code Arduino qui me sort l'erreur suivante :
-> Attempting MQTT broker connection...Failed, rc=-2. Trying again in 5 seconds...
J'ai vérifié les pare-feu, ils sont désactivés. J'ai vérifié si le certificat auto-signé que j'ai généré par la machine virtuelle fonctionne, aussi. C'est au lancement du programme que j'obtiens l'erreur suivante sur Arduino mais le message d'erreur "Protocol Error" sur la machine virtuelle.
Voici le code en question :

#include <ArduinoJson.h>
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <WiFiClientSecure.h>
#include <Adafruit_MQTT.h>
#include <Adafruit_MQTT_Client.h>

#define ESP8266_LED (5)
#define RELAY_SIGNAL_PIN (16)
#define SERIAL_DEBUG
#define TLS_DEBUG
#define MQTT_HOST  "172.16.8.75"

/* Certificate Authority info */
/* CA Cert in PEM format */
const char caCert[] PROGMEM = R"EOF(
-----BEGIN CERTIFICATE-----
MIIEJzCCAw+gAwIBAgIUWx+9w9kdY7yvz9+ZyN2ck4166EQwDQYJKoZIhvcNAQEL
BQAwgaExCzAJBgNVBAYTAkZSMRIwEAYDVQQIDAlPY2NpdGFuaWUxETAPBgNVBAcM
CE7Dg8KubWVzMRMwEQYDVQQKDApMR1QgREhVT0RBMQ4wDAYDVQQLDAVTTklSMjEY
MBYGA1UEAwwPQ29yZW50aW4gRVlET1VYMSwwKgYJKoZIhvcNAQkBFh1jZS4wMzAw
MDI2ckBhYy1tb250cGVsbGllci5mcjAgFw0yNDAzMjExNDU5MzNaGA8yMTIxMTIy
NzE0NTkzM1owgaExCzAJBgNVBAYTAkZSMRIwEAYDVQQIDAlPY2NpdGFuaWUxETAP
BgNVBAcMCE7Dg8KubWVzMRMwEQYDVQQKDApMR1QgREhVT0RBMQ4wDAYDVQQLDAVT
TklSMjEYMBYGA1UEAwwPQ29yZW50aW4gRVlET1VYMSwwKgYJKoZIhvcNAQkBFh1j
ZS4wMzAwMDI2ckBhYy1tb250cGVsbGllci5mcjCCASIwDQYJKoZIhvcNAQEBBQAD
ggEPADCCAQoCggEBAM74Yd9nbsidvTXVS45aGxoHNEnvEdFNeq2tm1pb1EQM7u3B
IjfbyCS8An5A8plAk7QOtbvjkgEjJkOKp2ptnNBh+zvosMReKPk2aksMTNKZ9hw8
GurVfpHScIVQO+4aADp9Wy1GS9nqASQGECFt5KA2cy5yf0BugrmIGezGMMqFNcMn
nm9bDRHLRQ7q1NJ45QWAqoPExDtb1K509coQT8rxbCUEoT3NnEM4h8hLzqPAV/pN
hbJzFfhRl6+NeKU0mnRF7aSPhidB+ZJl2JpM+RcXaewkhJ/48w6UvpBlW3PlF2oG
qjy3BhO05gRpNYhYsw9PvOLsfOV2R/qIlggFi7ECAwEAAaNTMFEwHQYDVR0OBBYE
FFqHx85uzig239j9gn60Eyy/uOpTMB8GA1UdIwQYMBaAFFqHx85uzig239j9gn60
Eyy/uOpTMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBADVhWhd9
/4KdDyzwDHiqVtnZDfFVg/47PBR6Ty/UOjnJEdkT7EwOx9UKPHsPxxJ3u7rIm8+6
rvDZWgWC15qXpRf+OrQ/oaUDIHGh4MFeuaXmtTItgwyVeDKNBzmUiT1uz5NpR42s
va4VIwObIBE/fNp+8/wkG8HaWG9nE2RaGlvBeqW8h2IHWjvwIiEGPbMKT3cPZKyp
5e5HICyBTau3bYmqZQSFOQvJnIh8OhzUSvk7akSQ38VKz3NrDs6oxRDGNzvd87Ch
9x24MspI7gl4W77OckwzHm+CDc4n2C2APdN5K8LyFMbNhS1JyzzkfeeukEtn6hjx
iZPwzneejdyB7+o=
-----END CERTIFICATE-----
)EOF";

/* MQTT broker cert SHA1 fingerprint, used to validate connection to right server D9:58:E2:20:BC:12:C4:4D:ED:0F:9E:CC:73:83:8B:31:1B:0B:47:9A*/
const uint8_t mqttCertFingerprint[] = {0x5D, 0x1E, 0x0C, 0xED, 0xA7, 0x6B, 0x51, 0x59, 0x5D, 0x0B, 0x79, 0x7A, 0xD6, 0x02, 0x1F, 0xC0, 0x88, 0x4E, 0xE5, 0x60};

X509List caCertX509(caCert);
WiFiClientSecure espClient;
PubSubClient mqttClient(espClient);
Adafruit_MQTT_Client mqtt(&espClient, "172.16.8.75", 8918, "pi", "raspberry");
char clientId[32] = "ESP8266Client-";

int compteur = 0;

#ifdef TLS_DEBUG
bool verifytls() {
    bool success = false;

#ifdef SERIAL_DEBUG
    // WiFi.ping();
    Serial.print("Verifying TLS connection to ");
    Serial.println("172.16.8.75");
#endif

    success = espClient.connect("172.16.8.75", 8918);

#ifdef SERIAL_DEBUG
    if (success) {
        Serial.println("Connection complete, valid cert, valid fingerprint.");
    } else {
        Serial.println("Connection failed!");
    }
#endif

    return success;
}
#endif

void reconnect() {
    while (!mqttClient.connected()) {
#ifdef SERIAL_DEBUG
        Serial.print("Attempting MQTT broker connection...");
#endif

        if (mqttClient.connect(clientId)) {
#ifdef SERIAL_DEBUG
            Serial.println("connected");
#endif
            mqttClient.subscribe("Commande");
        } else {
#ifdef SERIAL_DEBUG
            Serial.print("Failed, rc=");
            Serial.print(mqttClient.state());
            Serial.println(". Trying again in 5 seconds...");
#endif
            delay(5000);
        }
    }
}

void setup() {
    pinMode(RELAY_SIGNAL_PIN, OUTPUT);
    pinMode(ESP8266_LED, OUTPUT);

#ifdef SERIAL_DEBUG
    Serial.setDebugOutput(true);
    Serial.begin(115200);
    Serial.println();
#endif

    WiFi.mode(WIFI_STA);
    WiFi.begin("projetCC", "ProjetConciergeConnecte2024");

    while (WiFi.status() != WL_CONNECTED) {
        delay(500);
    }

#ifdef SERIAL_DEBUG
    Serial.println();
    Serial.print("Connected, IP address: ");
    Serial.println(WiFi.localIP());
#endif

    espClient.setTrustAnchors(&caCertX509);
    espClient.allowSelfSignedCerts();
    espClient.setFingerprint(mqttCertFingerprint);

#ifdef TLS_DEBUG
    verifytls();
#endif

    mqttClient.setServer("172.16.8.75", 8918);
    mqttClient.setCallback(subCallback);

    sprintf(clientId + strlen(clientId), "%X", random(0xffff));
}

void loop() {
    if (!mqttClient.connected()) {
        reconnect();
    }

    if (compteur > 100000) {
        mqttClient.publish("Test", "OK");
        compteur = 0;
    }
    compteur++;
    mqttClient.loop();
}

void subCallback(char *topic, byte *payload, unsigned int length) {
    static int pinStatus = LOW;
    StaticJsonDocument<256> doc;
    deserializeJson(doc, (char *)payload);
    JsonObject root = doc.as<JsonObject>();

#ifdef SERIAL_DEBUG
    serializeJson(root, Serial);
    Serial.println();
#endif
    Serial.printf("Topic:%s,%s\n", topic, (char *)payload);

    if (!root["set"].isNull()) {
        if (root["set"] == "toggle") {
            pinStatus = !pinStatus;
        } else if (root["set"] == "on") {
            pinStatus = HIGH;
        } else if (root["set"] == "off") {
            pinStatus = LOW;
        } else {
            return;
        }

        digitalWrite(RELAY_SIGNAL_PIN, pinStatus);
        mqttClient.publish("Test", pinStatus == LOW ? "off" : "on");
    } else if (!root["get"].isNull()) {
        if (root["get"] == "status") {
            mqttClient.publish("Test", pinStatus == LOW ? "off" : "on");
        }
    }
}

Je ne vois pas vraiment l'erreur que ça peut être car j'ai recherché énormément sur Internet et cela ne corrige pas mon problème. Cela serait à cause du certificat auto-signé en lui même ? (Qui après vérification fonctionne).

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.