Verificación de certificado SSL en ESP8266 Wemos D1 Mini con agente MQTT

Tengo un raspberry pi 3 con raspbian stretch como sistema operativo. He instalado y configurado completamente un agente MQTT en la frambuesa pi siguiendo este tutorial:https://www.digitalocean.com/community/tutorials/how-to-install-and-secure-the-mosquitto-mqtt-messaging-broker-on-ubuntu-16-04 Todo funciona bien y bien en el lado del corredor. Los certificados se renuevan después de 60 días y solo puede conectarse al puerto 1883 a través del localhost y los otros puertos (8883 y 8083) están abiertos, pero solo se puede acceder con TLS versión 1.2 y para este último también con websockets. A continuación puede encontrar el código de mi configuración de mosquitto (/etc/mosquitto/conf.d/default.conf).

allow_anonymous false
password_file /etc/mosquitto/passwd

listener 1883 localhost

listener 8883
certfile /etc/letsencrypt/live/home.kamidesigns.be/cert.pem
cafile /etc/letsencrypt/live/home.kamidesigns.be/chain.pem
keyfile /etc/letsencrypt/live/home.kamidesigns.be/privkey.pem
tls_version tlsv1.2

listener 8083
protocol websockets
certfile /etc/letsencrypt/live/home.kamidesigns.be/cert.pem
cafile /etc/letsencrypt/live/home.kamidesigns.be/chain.pem
keyfile /etc/letsencrypt/live/home.kamidesigns.be/privkey.pem
tls_version tlsv1.2

También compré un ESP8266 Wemos D1 Mini para conectarme a este corredor de forma segura. Utilicé la biblioteca pubsubclient desde este enlace: https: //github.com/knolleary/pubsubclient para mi cliente MQTT. Yo uso la rama maestra de este enlace:https://github.com/esp8266/Arduino para mi conexión SSL segura. A continuación puede ver el código que utilicé para programar mi Wemos D1 Mini

#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <time.h>

void callback(char* topic, byte* payload, unsigned int length) {
  Serial.print("Message arrived [");
  Serial.print(topic);
  Serial.print("] ");
  for (int i = 0; i < length; i++) {
    Serial.print((char)payload[i]);
  }
  Serial.println();

}

const char* ssid = "ssid";
const char* password = "wifipassword";

const char* host = "home.kamidesigns.be";
const int port = 8883;

WiFiClientSecure espClient;
PubSubClient client(host, port, callback, espClient);

long lastMsg = 0;
char msg[50];
int value = 0;

void setup() {
  Serial.begin(115200);
  Serial.println();
  Serial.print("connecting to ");
  Serial.println(ssid);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());

  // Synchronize time useing SNTP. This is necessary to verify that
  // the TLS certificates offered by the server are currently valid.
  Serial.print("Setting time using SNTP");
  configTime(8 * 3600, 0, "pool.ntp.org", "time.nist.gov");
  time_t now = time(nullptr);
  while (now < 1000) {
    delay(500);
    Serial.print(".");
    now = time(nullptr);
  }
  Serial.println("");
  struct tm timeinfo;
  gmtime_r(&now, &timeinfo);
  Serial.print("Current time: ");
  Serial.print(asctime(&timeinfo));
}

void reconnect() {
  // Loop until we're reconnected
  while (!client.connected()) {
    Serial.print("Attempting MQTT connection...");
    // Attempt to connect
    if (client.connect("ESP8266LightController","username","password")) {
      Serial.println("connected");
      // Once connected, publish an announcement...
      client.publish("outTopic", "hello world");
      // ... and resubscribe
      client.subscribe("inTopic");
    } else {
      Serial.print("failed, rc=");
      Serial.print(client.state());
      Serial.println(" try again in 5 seconds");
      // Wait 5 seconds before retrying
      delay(5000);
    }
  }
}

Cuando inicio mi Wemos D1, el monitor en serie dice: conectando a ssid. Dirección IP conectada a WiFi: 192.168.0.213 Configuración del tiempo usando SNTP. Hora actual: sáb 14 de octubre 02:26:25 2017 Intentando conexión MQTT ... conectado

Esto es bueno y es exactamente lo que quería, pero estoy confundido por cómo mi Wemos D1 puede conectarse al puerto 8883 sin verificar la cadena de certificados del servidor. Recuerde que nunca cargué un certificado en el Wemos D1 o implementé un certificado en el código, y aún así puede conectarse.

Respuestas a la pregunta(1)

Su respuesta a la pregunta