🛠 Client HTTPS/TLS et élément de sécurité ATECC608A
Objectifs
Passer du HTTP en clair au TLS : interroger une API via HTTPS avec WiFiSSLClient, comprendre la vérification de certificat, et découvrir l'ATECC608A-MAHDA-T, la puce de chiffrement embarquée sur la GIGA R1 WiFi qui sert de racine de confiance matérielle (stockage sécurisé de clés, authentification). C'est la brique indispensable avant MQTT/TLS (port 8883) ou toute intégration cloud sérieuse.
Matériel
- Carte Arduino GIGA R1 WiFi + antenne u.FL, WiFi 2,4 GHz WPA2
- Core « Arduino Giga R1 » à jour dans l'IDE 2.x
- Une API HTTPS de test (par exemple
https://example.orgou votre propre serveur avec certificat valide)
Code complet
// GIGA R1 WiFi — requête HTTPS via WiFiSSLClient (TLS, port 443)
// NB : la disponibilite exacte de WiFiSSLClient selon le core (mbed ou Zephyr)
// doit être vérifiée 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--- réponse 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); }
Vérification attendue
Après « Canal TLS établi », la réponse HTTP chiffrée en transit s'affiche en clair dans le moniteur (le déchiffrement a lieu sur la carte). Débranchez l'antenne ou faussez le SSID : la connexion échoue proprement sans jamais retomber en HTTP. Le code d'échec TLS aide à distinguer un problème réseau d'un problème de certificat.
Erreurs fréquentes
- `> WiFi montrent la voie TLS supportée par le constructeur.
- Heure non synchronisée : TLS exige une date valide ; sans RTC synchronisé (la carte dispose d'un RTC et d'une broche VRTC sur batterie de sauvegarde), la validation de date du certificat échoue — synchronisez l'heure (NTP) avant toute poignée TLS.
- Certificat auto-signé refusé : un serveur Let's Encrypt fonctionne, un certificat maison non ; ne désactivez jamais la vérification en production.
- Confusion TLS/HTTPS : TLS chiffre le canal ; le HTTP par-dessus reste en texte clair dans le canal. Envoyez toujours l'en-tête
Host:sur HTTPS. - Corps de réponse non drainé : toujours la même règle #937 sur le core mbed — lisez tout avant
stop.
Autres tutoriels pour cette carte
Exemples de code pour cette carte
clignotante.inoArduinobouton.inoArduinorespiration.inoArduinoanalogique.inoArduinodac-onde.inoArduinooled-i2c.inoArduino