🛠 HTTPS avec validation de certificat racine
Objectifs
Passer du HTTP clair au HTTPS avec WiFiSSLClient : la poignée de main TLS est exécutée par le module NINA, qui vérifie le certificat du serveur contre son magasin interne de CA racines (bundle reconstruit depuis la liste Android, embarqué par le firmware nina-fw). On apprend à diagnostiquer les échecs de validation et à vivre avec les bugs TLS connus du firmware.
Matériel
- 1 × Arduino MKR WiFi 1010 (WiFi opérationnel, voir tuto STA)
- Firmware NINA à jour (préalable non négociable pour TLS)
- Un hôte HTTPS de test public (ex.
www.howsmyssl.com) - La puce crypto embarquée ATECC508 existe sur la carte, mais le chemin TLS standard de WiFiNINA se passe dans le NINA
Code complet
#include <WiFiNINA.h>
const char* SSID = "votre-ssid";
const char* PASS = "votre-mot-de-passe";
WiFiSSLClient secure; // TLS + validation CA embarquée dans le NINA
void setup {
Serial.begin(115200);
WiFi.begin(SSID, PASS);
while (WiFi.status != WL_CONNECTED) { delay(500); Serial.print("."); }
if (secure.connect("www.howsmyssl.com", 443)) {
secure.println("GET /a/check HTTP/1.1");
secure.println("Host: www.howsmyssl.com");
secure.println("Connection: close");
secure.println;
while (secure.available) Serial.write(secure.read);
secure.stop; // libere la session TLS
} else {
Serial.println("Handshake TLS KO - firmware/CA a vérifier");
}
}
void loop {}
Vérification attendue
La réponse JSON de howsmyssl s'affiche, preuve que le canal est chiffré et le certificat validé. secure.connect renvoie 0 tant que la CA émettrice n'est pas dans le bundle du module : mettez d'abord le firmware à jour avant de soupçonner votre code. Appelez toujours stop : chaque session TLS consomme la précieuse RAM du NINA.
Erreurs fréquentes
- Fuite de mémoire sur connexions TLS répétées : les issues nina-fw #135/#136 décrivent
downloadAndSaveFilequi déclare succès après un échec d'initialisation des certificats et fuit du tas à chaque opération TLS (identique en 3.0.1 et master au moment des rapports ; correctif en PR #149). En production, espacez les reconnexions, appelezstop, et prévoyez un watchdog de reset. - Nouveau site « refusé » alors qu'il est valide : CA récente absente du bundle du firmware — misez sur la mise à jour du firmware plutôt que sur un
setCertificatemaison. - Confondre échec DNS, échec TCP et échec TLS : testez d'abord
WiFiClientsur le port 443 pour isoler la couche réseau. - Auto-signés : il faut extraire la CA racine en PEM et la déclarer explicitement ; le simple certificat de serveur intermédiaire ne suffit pas.
Autres tutoriels pour cette carte
Exemples de code pour cette carte
scan-wifi.inoArduinoconnexion-wpa2.inoArduinohttp-get.inoArduinoserveur-web-led.inoArduinohorloge-ntp.inoArduinoudp-diffusion.inoArduino