Módulo 9

HTTPS y certificados SSL en ESP32

Seguridad y Protocolos Avanzados

ESP32 Mecatrónica IoT UNAM
1. INTRODUCCIÓN TEÓRICA En el mundo cada vez más conectado de la Internet de las Cosas (IoT), los microcontroladores como el ESP32 juegan un papel fundamental. Sin embargo, una de las principales preocupaciones es la seguridad de los datos que se transmiten. Aquí es donde los protocolos HTTPS y los certificados SSL entran en juego. HTTPS, o Protocolo seguro de transferencia de hipertexto, es un método para transmitir datos de forma segura a través de la web. SSL, o Capas de sockets seguros, es un protocolo de seguridad que permite que los datos se transmitan de manera segura mediante la encriptación de los datos durante la transmisión. Ambos son fundamentales para garantizar la seguridad en las comunicaciones de IoT y son especialmente relevantes en aplicaciones de mecatrónica donde la integridad y la confidencialidad de los datos son esenciales. En la industria, estos protocolos se utilizan comúnmente para garantizar la seguridad de las comunicaciones entre dispositivos y servidores. Un ejemplo sería un sistema de monitoreo de temperatura en una planta de fabricación, donde los datos de los sensores de temperatura se transmiten al servidor central para su monitoreo y análisis. 2. EXPLICACIÓN TÉCNICA DETALLADA El ESP32, siendo un microcontrolador de doble núcleo con capacidad Wi-Fi y Bluetooth, es capaz de manejar el protocolo HTTPS y SSL. Para hacer esto, el ESP32 utiliza la biblioteca WiFiClientSecure en el IDE de Arduino, que permite conexiones seguras a través de SSL. Un aspecto importante a considerar es que el ESP32 necesita tener la hora actual para poder validar correctamente los certificados SSL. Esto se puede lograr mediante el uso de la biblioteca "time.h" y un servidor NTP (Network Time Protocol). Aquí hay un ejemplo básico de cómo se vería el código: ```cpp #include #include const char* ssid = "nombre_de_tu_red"; const char* password = "contraseña_de_tu_red"; // Certificado SSL del servidor al que nos conectaremos const char* ssl_cert = "-----BEGIN CERTIFICATE-----\n .... \n-----END CERTIFICATE-----\n"; void setup() { Serial.begin(115200); WiFi.begin(ssid, password); // Esperamos hasta que se conecte while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Conectando a WiFi..."); } WiFiClientSecure client; client.setCACert(ssl_cert); // Establecemos el certificado SSL if (!client.connect("www.ejemplo.com", 443)) { Serial.println("Conexión fallida."); } else { client.print("GET / HTTP/1.0\r\nHost: www.ejemplo.com\r\n\r\n"); } } void loop() { // Dejamos el loop vacío ya que no necesitamos hacer nada aquí } ``` En este código, estamos utilizando la biblioteca WiFiClientSecure para establecer una conexión segura con un servidor. 3. EJERCICIOS PRÁCTICOS VISUALES Ejercicio 1: Conexión segura a un servidor Objetivo: Conectar con éxito a un servidor utilizando HTTPS y SSL Materiales: ESP32, conexión a internet Dificultad: Básica Tiempo estimado: 30-40 minutos Ejercicio 2: Envío de datos seguros Objetivo: Enviar datos al servidor de manera segura Materiales: ESP32, sensor de temperatura, conexión a internet Dificultad: Intermedia Tiempo estimado: 60-90 minutos Ejercicio 3: Recibir datos seguros Objetivo: Recibir y procesar datos del servidor de manera segura Materiales: ESP32, actuador (por ejemplo, un LED), conexión a internet Dificultad: Avanzada Tiempo estimado: 90-120 minutos 4. PROYECTO APLICADO Título del proyecto: Monitoreo de temperatura segura Objetivo: Crear un sistema de monitoreo de temperatura que envía datos al servidor de forma segura utilizando HTTPS y SSL Materiales: ESP32, sensor de temperatura DS18B20, resistencias, cables, breadboard, conexión a internet 5. EVALUACIÓN Y TROUBLESHOOTING Problemas comunes y soluciones: 1. No se puede conectar al servidor: Verifique que el ESP32 esté conectado correctamente a la red Wi-Fi y que el certificado SSL sea correcto 2. Los datos enviados/recibidos no son correctos: Verifique que los datos se estén enviando/recibiendo correctamente y que el servidor esté procesando los datos correctamente Criterios de evaluación: 1. Conexión exitosa al servidor 2. Envío y recepción correcta de datos 3. Correcta implementación y uso de HTTPS y SSL Referencias adicionales: 1. Documentación de la biblioteca WiFiClientSecure: https://www.arduino.cc/en/Reference/WiFiClientSecure 2. Tutorial de ESP32 con HTTPS y SSL: https://randomnerdtutorials.com/esp32-http-get-post-arduino/