Hardware-Whistleblower für neue E-Mails über eine sichere TLS-Verbindung auf ESP8266

Als das auf dem ESP8266 basierende Arduino IDE für Wi-Fi-Modul erschien, wurde es mir möglich, es bequemer zu programmieren. Das Fehlen eines externen Controllers zur Steuerung bringt einen weiteren großen Vorteil mit sich. Die Ideen verschiedener elektronischer Geräte mit diesem Modul kamen mir sofort in den Sinn. Und so kam der Gedanke, einen Hardware-autonomen Informanten über das Eintreffen neuer Briefe an meine E-Mail zu informieren. Als Ergebnis wurde das E-Mail-Benachrichtigungsgerät geboren.
Bild

Details unten.

Das Gerät stellt regelmäßig eine TLS-Verbindung zum Mailserver her und fordert die Anzahl der Buchstaben an. Beim ersten Anruf wird die Anzahl der Buchstaben gespeichert. Mit zunehmender Anzahl der Buchstaben in der Box wird dann eine Entscheidung über das Eintreffen eines neuen Buchstabens getroffen, und der Licht- und Tonalarm werden eingeschaltet. Die Bestätigung des Ereignisses erfolgt auf Knopfdruck oder wenn eine Nachricht aus dem Postfach gelöscht wird. Der akustische Alarm dauert ungefähr 15 Sekunden und der leichte Alarm, bis der Benutzer das Ereignis bestätigt. Das Gerät ist in Form einer Lampe hergestellt und funktioniert auch als normale Lampe. Wenn Sie die Taste drücken, geht das Licht sanft an. Wenn Sie die Taste gedrückt halten, ändert sich das Spektrum des Glühens gleichmäßig. Ein kurzer Druck auf die Taste bei eingeschaltetem Licht führt zu einer gleichmäßigen Verdunkelung des Lichts.Sie können die Farbe des Lichts auch über eine UDP-Verbindung von einem Smartphone oder Computer mit der entsprechenden Software einstellen.
Die Einstellungen für Wi-Fi-Verbindung, Anmeldung und Kennwort für die Mailbox usw. werden über die Webseite des Geräts konfiguriert. Es werden mehrere Mailserver unterstützt.
Bekannte Mailserver arbeiten derzeit über sichere Verbindungen. Bevor Sie mit dem Server über die POP3-Protokollbefehle arbeiten, müssen Sie autorisiert sein. Hier brauchen wir das TLS-Protokoll. Am schwierigsten war es für mich, eine TLS-Verbindung zum Mailserver herzustellen. Zusammen mit der Arduino IDE gab es ein Beispiel für den Zugriff auf eine Webseite über eine SSL-Verbindung. Überprüft - es funktioniert! Jetzt muss ich nur noch verstehen, was ein Fingerabdruck ist, der im SSL-Beispielcode vorhanden ist. Für Webseiten ist alles klar, weil In den Verbindungseigenschaften im Browser ist dieser Fingerabdruck vorhanden. Aber ich muss eine Verbindung zum Schweißserver herstellen. Ich begann das Problem zu untersuchen. Ich habe ein cooles OpenSSL-Tool gefunden. Mit einer Reihe von Programmen können Sie viele interessante Dinge tun. Dies ist im Wesentlichen Telnet mit einer SSL-Verbindung. Ich habe versucht, zum Mailserver zu gehen und siehe da.TLS-Verbindung zum Mailserver wurde hergestellt! Außerdem konnte ich bereits mit den üblichen POP3- und IMAP-Protokollbefehlen arbeiten. Es bleibt, um den Fingerabdruck, den ich benötige, aus dem Zertifikat zu extrahieren. Dies erfolgt über den folgenden Befehl:
openssl s_client -connect pop3.mail.ru:995

Danach wird eine sichere Verbindung hergestellt und die Mail-Server-Einladung wird unten angezeigt. Weiter arbeiten wir auch wie in Telnet. USER, PASS, STAT. Sie können auch IMAP verwenden. Wer mag mehr. Es ist nur erforderlich, die Adresse und den Port des Mailservers zu ändern.
Jetzt müssen wir das Zertifikat erhalten und den Fingerabdruck daraus extrahieren, den wir für die SSL-Bibliothek benötigen.
Vielleicht gibt es einen einfacheren Weg. Ich habe die Schlüssel des OpenSSL-Kits nicht im Detail verstanden, daher erkläre ich Ihnen, wie Sie es selbst machen. Also führen wir die Zeile aus:
openssl s_client -connect pop3.mail.ru:995 >crt

Danach beenden wir das Programm und die CRT-Datei im aktuellen Verzeichnis speichert das benötigte Zertifikat. So etwas in der Art
Beispiel für ein Zertifikat
-----BEGIN CERTIFICATE-----
MIIE5jCCA86gAwIBAgIQEuH8d4WVsue+Ohe/WiSqgDANBgkqhkiG9w0BAQUFADBE
MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMU
R2VvVHJ1c3QgU1NMIENBIC0gRzIwHhcNMTUwODI3MDAwMDAwWhcNMTYwODI2MjM1
OTU5WjByMQswCQYDVQQGEwJSVTEbMBkGA1UECBQSUlVTU0lBTiBGRURFUkFUSU9O
w/s63J8N2ihPDA==
-----END CERTIFICATE-----

Kopieren Sie alles zwischen --BEGIN CERTIFICATE-- und --END CERTIFICATE--, einschließlich dieser Beschriftungen, in eine separate Datei. Nennen Sie es mail.key. Und jetzt erhalten wir den lang erwarteten Fingerabdruck mit dem Befehl:
openssl x509 -in mail.key -fingerprint -sha1 -noout -text >keyprint

Jetzt wird in der Keyprint-Datei unser Fingerabdruck in der ersten Zeile gespeichert. Für den Server pop3.mail.ru ist dies
SHA1 Fingerprint = E0: 10: 11: B5: E6: C9: 1B: 7B: 90: 88: F8: A6: AE: 6E: 21: 97: 69: 30: 7A: 04
Tatsächlich war dies die schwierigste Aufgabe bei der Entwicklung des Geräts. Wir mussten all diese Nuancen erreichen, aber als sich herausstellte, war ich sehr glücklich!
Bei anderen Mailservern ist alles genau gleich. Sie müssen den Servernamen und den Port für das entsprechende POP3- oder IMAP-Protokoll angeben. Ich musste noch nie mit sicheren Verbindungen arbeiten, daher wiederhole ich, dass es möglicherweise einen einfacheren Weg gibt.

Alle Quelldaten wurden empfangen, jetzt schreiben wir schnell ein Programm für ESP8266 und wir sind überrascht, dass alles funktioniert! Das Programm extrahiert den Servernamen aus der Postanschrift und ersetzt den dem Server entsprechenden Zertifikatfingerabdruck durch die SSL-Funktion.
So haben wir die Möglichkeit, auf vielen Servern mit Postfächern zu arbeiten.
Ich werde das Verfahren für den Zugriff auf den Mailserver beim Herstellen einer TLS-Verbindung separat angeben.
Beschwerdeverfahren
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



Hardwarebeschreibung Der
Schaltplan ist einfach. Ich habe das ESP-12-Modul „Smart“ WS2812b-LEDs verwendet.
Bild

Das Gerät wird über USB sowie einen eingebauten 650-mAh-Akku mit Strom versorgt, der im Informationsmodus 2 Stunden lang funktioniert - „Sie erhalten einen Brief!“ Ladegerät auf dem TP4056-Chip.
Separater Ausgangsanschluss für die In-Circuit-Programmierung ESP-12.
Bild

Bild

Bild

Bild


Beschreibung des Softwareteils
Die Entwicklung des Programms wurde in einer Arduino 1.6.4-Umgebung mit installiertem SDK für ESP8266 durchgeführt. Die Hauptfunktionen wurden aus Beispielen entnommen. Das ESP8266-Modul ist für den gemischten Betrieb konfiguriert: Access Point und Client. Wenn Sie es zum ersten Mal aktivieren, müssen Sie die Wi-Fi-Verbindungsparameter (Login, Kennwort), Postfach und Kennwort für das Postfach konfigurieren. Dazu müssen Sie über eine Wi-Fi-Verbindung eine Verbindung zum Zugangspunkt-Passwort „MailNotifier“ herstellen: qwertyqwerty. Es öffnet sich eine Seite, auf der Sie Daten eingeben und das Modul neu starten müssen. Daten werden in den nichtflüchtigen Speicher des Moduls geschrieben. Wenn das Gerät eingeschaltet wird, werden die Einstellungen gelesen und der Prozess zum Herstellen einer Verbindung zwischen unserem Informanten und dem Internetzugangspunkt beginnt. Der Vorgang wird von einer blinkenden blauen LED begleitet. Nach erfolgreicher Verbindung leuchtet die LED gelb und erlischt.Ab diesem Moment fragt der Informant regelmäßig den Mailserver ab und informiert im Falle eines neuen Briefes mit einem Licht- und Tonsignal. Wenn der Versuch, eine Verbindung mit dem Access Point herzustellen, fehlschlägt, beginnt die LED rot zu blinken.
Bild


Verbesserungen
Der NTP-Server aus den Beispielen wurde dem Programm hinzugefügt, Sie können die Systemzeit daraus abrufen. Es gab Gedanken, Alarme hinzuzufügen, aber ich habe es mir anders überlegt, weil keine Notwendigkeit.
Sie können auch über UDP eine Verbindung zum Gerät herstellen und einen Datenstrom übertragen, um jede LED einzeln einzuschalten. Zum Beispiel über das entsprechende Plugin von Winamp zur Visualisierung von Musik. Und vieles mehr.
Ich habe auch einen Fotowiderstand verwendet, um die Beleuchtung zu steuern, damit beispielsweise der akustische Alarm nachts nicht eingeschaltet wird. In dieser Version wird diese Funktion jedoch nicht programmgesteuert verwendet.
Ohne Probleme können Sie einen Indikator hinzufügen, um Nachrichtenkopfzeilen oder etwas anderes anzuzeigen. Aber das ist alles für die Zukunft.

Bild


Zum Schluss ein Video, das die Arbeit eines Informanten zeigt.


Freunde des 3D-LIFE- Teams halfen beim Entwerfen und Drucken des Gehäuses . Vielen Dank dafür! Jetzt hat das Gerät ein fertiges Aussehen erhalten.

Vielen Dank an den Autor der Integration von Arduino IDE und ESP8266 für die großartige Arbeit!

Projektarchiv mit Schaltung, Leiterplatte in SL4 und Quelle

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


All Articles