Lanceur d'alerte matériel pour les nouveaux e-mails utilisant une connexion TLS sécurisée sur ESP8266

Lorsque le module Arduino IDE pour Wi-Fi basé sur l'ESP8266 est apparu, il est devenu possible pour moi de le programmer plus facilement. Et l'absence d'un contrôleur externe pour le contrôle présente un autre énorme avantage. Les idées de divers gadgets électroniques utilisant ce module sont immédiatement entrées dans ma tête. Et donc l'idée est venue de faire un informateur matériel autonome de l'arrivée de nouvelles lettres sur mon email. En conséquence, le dispositif E-Mail Notifier est né.
image

Détails ci-dessous.

L'appareil établit périodiquement une connexion TLS avec le serveur de messagerie et demande le nombre de lettres. Au premier appel, le nombre de lettres est mémorisé. Ensuite, avec une augmentation du nombre de lettres dans la boîte, une décision est prise concernant l'arrivée d'une nouvelle lettre, les alarmes sonores et lumineuses sont activées. L'accusé de réception de l'événement se produit au clic d'un bouton ou lorsqu'un message est supprimé de la boîte aux lettres. L'alarme sonore dure environ 15 secondes et la lumière jusqu'à ce que l'utilisateur reconnaisse l'événement. L'appareil se présente sous la forme d'une lampe et fonctionne, y compris, comme une lampe ordinaire. Lorsque vous appuyez sur le bouton, la lumière s'allume en douceur. Lorsque vous maintenez le bouton enfoncé, le spectre de la lueur change en douceur. Une pression courte sur le bouton lorsque la lumière est allumée conduit à une atténuation douce de la lueur.Vous pouvez également définir la couleur de la lueur via une connexion UDP à partir d'un smartphone ou d'un ordinateur avec le logiciel approprié.
La connexion Wi-Fi, les paramètres de connexion et de mot de passe pour la boîte aux lettres, etc. sont configurés via la page Web de l'appareil. Plusieurs serveurs de messagerie sont pris en charge.
Les serveurs de messagerie connus fonctionnent actuellement via des connexions sécurisées. Avant de travailler avec le serveur à l'aide des commandes du protocole POP3, vous devez être autorisé. Ici, nous avons besoin du protocole TLS. La chose la plus difficile pour moi a été d'établir une connexion TLS avec le serveur de messagerie. Avec l'IDE Arduino, il y avait un exemple d'accès à une page Web en utilisant une connexion SSL. Vérifié - cela fonctionne! Maintenant, j'ai juste besoin de comprendre ce qu'est une empreinte digitale, qui est présente dans l'exemple de code SSL. Pour les pages Web, tout est clair, car dans les propriétés de connexion du navigateur, cette empreinte est présente. Mais je dois créer une connexion au serveur de sudation. J'ai commencé à rechercher la question. Trouvé un outil OpenSSL sympa. Un ensemble de programmes vous permet de faire beaucoup de choses intéressantes. Il s'agit essentiellement de Telnet avec une connexion SSL. J'ai essayé d'aller sur le serveur de messagerie et, voilàLa connexion TLS avec le serveur de messagerie a été établie! De plus, je pouvais déjà travailler avec les commandes de protocole POP3 et IMAP habituelles. Il reste à extraire l'empreinte digitale dont j'ai besoin du certificat. Cela se fait via la commande:
openssl s_client -connect pop3.mail.ru:995

Après cela, une connexion sécurisée est établie et l'invitation du serveur de messagerie est visible ci-dessous. De plus, nous travaillons également comme dans Telnet. UTILISATEUR, PASS, STAT. Vous pouvez également utiliser IMAP. Qui aime plus. Il suffit de changer l'adresse et le port du serveur de messagerie.
Maintenant, nous devons obtenir le certificat et en extraire l'empreinte digitale, dont nous avons besoin pour la bibliothèque SSL.
Peut-être existe-t-il un moyen plus simple, je n'ai pas compris les clés du kit OpenSSL en détail, donc je vais vous dire comment le faire moi-même. Donc, nous exécutons la ligne:
openssl s_client -connect pop3.mail.ru:995 >crt

Après cela, nous quittons le programme et le fichier crt dans le répertoire actuel stockera le certificat dont nous avons besoin. Quelque chose comme ça
Exemple de certificat
-----BEGIN CERTIFICATE-----
MIIE5jCCA86gAwIBAgIQEuH8d4WVsue+Ohe/WiSqgDANBgkqhkiG9w0BAQUFADBE
MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMU
R2VvVHJ1c3QgU1NMIENBIC0gRzIwHhcNMTUwODI3MDAwMDAwWhcNMTYwODI2MjM1
OTU5WjByMQswCQYDVQQGEwJSVTEbMBkGA1UECBQSUlVTU0lBTiBGRURFUkFUSU9O
w/s63J8N2ihPDA==
-----END CERTIFICATE-----

Copiez tout entre --BEGIN CERTIFICATE-- et --END CERTIFICATE--, y compris ces étiquettes elles-mêmes, dans un fichier séparé. Appelez-le mail.key. Et maintenant, nous obtenons l'empreinte digitale tant attendue avec la commande:
openssl x509 -in mail.key -fingerprint -sha1 -noout -text >keyprint

Maintenant, dans le fichier d'empreinte, notre empreinte digitale sera stockée dans la première ligne. Pour le serveur pop3.mail.ru, ce sera
SHA1 Fingerprint = E0: 10: 11: B5: E6: C9: 1B: 7B: 90: 88: F8: A6: AE: 6E: 21: 97: 69: 30: 7A: 04
En fait, ce fut la tâche la plus difficile dans le développement de l'appareil. Nous avons dû arriver à toutes ces nuances, mais quand il s'est avéré que j'étais très heureux!
Pour les autres serveurs de messagerie, tout est exactement le même. Vous devez spécifier le nom et le port du serveur pour le protocole POP3 ou IMAP correspondant. Je n'ai jamais eu à travailler avec des connexions sécurisées, donc je le répète, il peut y avoir un moyen plus simple.

Toutes les données sources ont été reçues, maintenant nous écrivons rapidement un programme pour ESP8266 et, nous sommes surpris que tout fonctionne! Le programme extrait le nom du serveur de l'adresse postale et substitue l'empreinte digitale du certificat correspondant au serveur dans la fonction SSL.
Ainsi, nous avons la possibilité de travailler avec des boîtes aux lettres sur de nombreux serveurs.
Je donnerai séparément la procédure d'accès au serveur de messagerie avec l'établissement d'une connexion TLS.
Procédure d'appel
const char *ssid = «yourSSID»;
const char *password = «yourPassword»;
const char* host = «pop3.mail.ru»;
const char* mailuser = «mymail mail.ru»;
const char* mailpass = «mypassword»;
const int httpsPort = 995;
const char* fingerprint = «E0 10 11 B5 E6 C9 1B 7B 90 88 F8 A6 AE 6E 21 97 69 30 7A 04»; // SHA1 pop3.mail.ru:995

// mail.ru
void CheckMail(void)
{
String line;

if (!client.connect(host, httpsPort))
{
Serial.println(«MAIL#ERR»);
client.flush();
return;
}

if (!client.verify(fingerprint, host)) //
{
Serial.println(«MAIL#Error certificate»);
client.flush();
return;
}
line = client.readStringUntil('\n');

client.print(String(«USER „)+mailuser+String(“\r\n»));
line = client.readStringUntil('\n');

client.print(String(«PASS „)+mailpass+String(“\r\n»));
line = client.readStringUntil('\n');
if (line==String("+OK Welcome!\r"))
{
client.print(String(«STAT\r\n»));
line = client.readString();
Serial.println(line);

client.print(String(«QUIT\r\n»));
line = client.readStringUntil('\n');
}
else { Serial.println(«MAIL#ERA»); }

client.flush();
client.stop();
}
// **** mail.ru



Description du matériel Le
schéma de circuit est simple. J'ai utilisé le module ESP-12, des LED «intelligentes» WS2812b.
image

L'appareil est alimenté par USB, ainsi que par une batterie intégrée de 650 mAh, qui dure 2 heures de fonctionnement en mode informatif - "Vous recevrez une lettre!". Chargeur de batterie sur la puce TP4056.
Connecteur de sortie séparé pour la programmation en circuit ESP-12.
image

image

image

image


Description de la partie logicielle
Le développement du programme a été réalisé dans un environnement Arduino 1.6.4 avec le SDK pour ESP8266 installé. Les fonctions principales sont extraites d'exemples. Le module ESP8266 est configuré pour un fonctionnement mixte: point d'accès et client. Lorsque vous l'allumez pour la première fois, vous devez configurer les paramètres de connexion Wi-Fi (identifiant, mot de passe), boîte aux lettres et mot de passe pour la boîte aux lettres. Pour ce faire, vous devez vous connecter via une connexion Wi-Fi au mot de passe du point d'accès «MailNotifier»: qwertyqwerty. Une page s'ouvrira sur laquelle vous devrez saisir des données et redémarrer le module. Les données sont écrites dans la mémoire non volatile du module. À la mise sous tension, les paramètres sont lus et le processus d'établissement d'une connexion entre notre informateur et le point d'accès Internet commence. Le processus est accompagné d'une LED bleue clignotante. Une fois la connexion établie, la LED s'allume en jaune et s'éteint.A partir de ce moment, l'informateur interroge périodiquement le serveur de messagerie et, dans le cas d'une nouvelle lettre, informe avec un signal lumineux et sonore. Si la tentative d'établissement d'une connexion avec le point d'accès a échoué, le voyant DEL commence à clignoter en rouge.
image


Améliorations
Le serveur NTP des exemples a été ajouté au programme, vous pouvez en obtenir l'heure système. Il y avait des idées pour ajouter des alarmes, mais j'ai changé d'avis, car pas besoin.
Vous pouvez également vous connecter à l'appareil via UDP et transmettre un flux de données pour allumer individuellement chaque LED. Par exemple, via le plugin approprié de Winamp pour visualiser la musique. Et bien plus.
J'ai également utilisé une photorésistance pour contrôler l'éclairage, de sorte que, par exemple, n'active pas l'alarme sonore la nuit. Mais dans cette version, cette fonction n'est pas utilisée par programme.
Sans problème, vous pouvez ajouter un indicateur pour afficher les en-têtes de message ou autre chose. Mais c'est tout pour l'avenir.

image


Enfin, une vidéo montrant le travail d'un informateur.


Des amis de l'équipe 3D-LIFE ont contribué à la conception et à l'impression de l'étui , merci beaucoup à eux! Maintenant, l'appareil a acquis un look fini.

Merci à l'auteur de l'intégration d'Arduino IDE et ESP8266 pour l'excellent travail!

Archives du projet avec circuit, carte de circuit imprimé dans SL4 et source

Source: https://habr.com/ru/post/fr392885/


All Articles