🛠 Client HTTPS/TLS et élément de sécurité ATECC608A
Objetivos
Pasar de HTTP en claro a TLS: consultar una API mediante HTTPS con WiFiSSLClient, comprender la verificación de certificados y descubrir el ATECC608A-MAHDA-T, el chip de cifrado integrado en la GIGA R1 WiFi que actúa como raíz de confianza de hardware (almacenamiento seguro de claves, autenticación). Es el componente indispensable antes de MQTT/TLS (puerto 8883) o cualquier integración cloud seria.
Material
- Placa Arduino GIGA R1 WiFi + antena u.FL, WiFi 2,4 GHz WPA2
- Núcleo «Arduino Giga R1» actualizado en el IDE 2.x
- Una API HTTPS de prueba (por ejemplo,
https://example.orgo su propio servidor con certificado válido)
Código completo
// GIGA R1 WiFi — requete HTTPS via WiFiSSLClient (TLS, port 443)
// NB : la disponibilite exacte de WiFiSSLClient selon le core (mbed ou Zephyr)
// doit etre verifiee dans le gestionnaire de bibliotheques — voir note ci-dessous.
#include <WiFi.h>
#include <WiFiSSLClient.h>
const char SSID[] = "your-ssid";
const char PASS[] = "your-pass";
const char API[] = "example.org";
WiFiSSLClient secure;
void setup {
Serial.begin(115200);
while (!Serial) {}
WiFi.begin(SSID, PASS);
while (WiFi.status != WL_CONNECTED) { Serial.print("."); delay(200); }
Serial.print("IP "); Serial.println(WiFi.localIP);
Serial.print("Poignee TLS vers "); Serial.print(API); Serial.println(" : 443...");
if (!secure.connect(API, 443)) {
Serial.print("Echec TLS, code "); Serial.println(secure.state);
while (true); // ne pas continuer en clair
}
Serial.println("Canal TLS etabli");
secure.print("GET / HTTP/1.0\r\n");
secure.print("Host: "); secure.println(API);
secure.print("Connection: close\r\n\r\n");
unsigned long debut = millis;
while (secure.connected && millis - debut < 15000) {
while (secure.available) Serial.write(secure.read); // tout lire (#937)
}
secure.stop;
Serial.println("\n--- reponse HTTPS recue ---");
// La puce ATECC608A (racine de confiance materielle) peut stocker des cles
// privees/certificats pour l'authentification client ; son acces passe par
// les utilitaires du core, hors perimetre de ce sketch.
}
void loop { delay(10000); }
Verificación esperada
Tras «Canal TLS establecido», la respuesta HTTP cifrada en tránsito se muestra en claro en el monitor (el descifrado tiene lugar en la placa). Desconecte la antena o altere el SSID: la conexión falla correctamente sin volver nunca a HTTP. El código de error TLS ayuda a distinguir un problema de red de un problema de certificado.
Errores frecuentes
- `> a GIGA R1 WiFi indican la vía TLS admitida por el fabricante.
- Hora no sincronizada: TLS exige una fecha válida; sin un RTC sincronizado (la placa dispone de un RTC y un pin VRTC para batería de respaldo), la validación de fecha del certificado falla — sincronice la hora (NTP) antes de cualquier handshake TLS.
- Certificado autofirmado rechazado: un servidor Let's Encrypt funciona, un certificado propio no; nunca desactive la verificación en producción.
- Confusión TLS/HTTPS: TLS cifra el canal; el HTTP por encima sigue siendo texto claro dentro del canal. Envíe siempre la cabecera
Host:en HTTPS. - Cuerpo de respuesta no drenado: siempre la misma regla #937 en el núcleo mbed — lea todo antes de
stop.
Otros tutoriales para esta placa
Ejemplos de código para esta placa
clignotante.inoArduinobouton.inoArduinorespiration.inoArduinoanalogique.inoArduinodac-onde.inoArduinooled-i2c.inoArduino