Denunciante de hardware para correo electrónico nuevo utilizando una conexión TLS segura en ESP8266

Cuando apareció el módulo Arduino IDE para Wi-Fi basado en ESP8266, me fue posible programarlo más convenientemente. Y la falta de un controlador externo para el control introduce otra gran ventaja. Las ideas de diferentes dispositivos electrónicos con el uso de este módulo se me ocurrieron de inmediato. Y entonces surgió la idea de hacer un informador autónomo de hardware sobre la llegada de nuevas cartas a mi correo electrónico. Como resultado, nació el dispositivo E-Mail Notifier.
imagen

Detalles a continuación.

El dispositivo establece periódicamente una conexión TLS con el servidor de correo y solicita el número de letras. En la primera llamada, se recuerda el número de letras. Luego, con un aumento en el número de letras en el cuadro, se toma una decisión sobre la llegada de una nueva letra, se activan las alarmas de luz y sonido. El reconocimiento del evento se produce al hacer clic en un botón o cuando se elimina un mensaje del buzón. La alarma sonora dura unos 15 segundos, y la luz hasta que el usuario reconoce el evento. El dispositivo está hecho en forma de lámpara y funciona, incluso, como una lámpara normal. Cuando presiona el botón, la luz se enciende suavemente. Cuando presiona y mantiene presionado el botón, el espectro del brillo cambia suavemente. Una pulsación breve del botón cuando la luz está encendida conduce a una atenuación suave del brillo.También puede establecer el color del brillo a través de una conexión UDP desde un teléfono inteligente o computadora con el software adecuado.
La configuración de conexión Wi-Fi, inicio de sesión y contraseña para el buzón, etc., se configura a través de la página web del dispositivo. Se admiten varios servidores de correo.
Los servidores de correo conocidos actualmente funcionan a través de conexiones seguras. Antes de trabajar con el servidor utilizando los comandos del protocolo POP3, debe estar autorizado. Aquí necesitamos el protocolo TLS. Lo más difícil para mí fue establecer una conexión TLS con el servidor de correo. Junto con Arduino IDE, hubo un ejemplo de acceso a una página web utilizando una conexión SSL. Comprobado: ¡funciona! Ahora solo necesito entender qué es una huella digital, que está presente en el código de ejemplo SSL. Para las páginas web, todo está claro, porque en las propiedades de conexión en el navegador esta huella digital está presente. Pero necesito crear una conexión con el servidor de sudor. Empecé a investigar el tema. Encontré una herramienta genial de OpenSSL. Un conjunto de programas le permite hacer muchas cosas interesantes. Esto es esencialmente Telnet con una conexión SSL. Traté de ir al servidor de correo y, he aquí,¡Se ha establecido la conexión TLS con el servidor de correo! Además, ya podría trabajar con los comandos habituales de protocolo POP3 e IMAP. Queda por extraer la huella digital que necesito del certificado. Esto se hace a través del comando:
openssl s_client -connect pop3.mail.ru:995

Después de eso, se establece una conexión segura y la invitación del servidor de correo es visible a continuación. Además trabajamos también como en Telnet. USUARIO, PASO, ESTADO. También puedes usar IMAP. A quién le gusta más. Solo es necesario cambiar la dirección y el puerto del servidor de correo.
Ahora necesitamos obtener el certificado y extraer la huella digital de él, que necesitamos para la biblioteca SSL.
Quizás haya una manera más simple, no entendí las claves del kit OpenSSL en detalle, así que te diré cómo hacerlo yo mismo. Entonces, ejecutamos la línea:
openssl s_client -connect pop3.mail.ru:995 >crt

Después de eso, salimos del programa y el archivo crt en el directorio actual almacenará el certificado que necesitamos. Algo como esto
Ejemplo de certificado
-----BEGIN CERTIFICATE-----
MIIE5jCCA86gAwIBAgIQEuH8d4WVsue+Ohe/WiSqgDANBgkqhkiG9w0BAQUFADBE
MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMU
R2VvVHJ1c3QgU1NMIENBIC0gRzIwHhcNMTUwODI3MDAwMDAwWhcNMTYwODI2MjM1
OTU5WjByMQswCQYDVQQGEwJSVTEbMBkGA1UECBQSUlVTU0lBTiBGRURFUkFUSU9O
w/s63J8N2ihPDA==
-----END CERTIFICATE-----

Copie todo lo que se encuentre entre --BEGIN CERTIFICATE-- y --END CERTIFICATE--, incluidas estas etiquetas, en un archivo separado. Llámalo mail.key. Y ahora obtenemos la tan esperada huella digital con el comando:
openssl x509 -in mail.key -fingerprint -sha1 -noout -text >keyprint

Ahora en el archivo de huella digital, nuestra huella digital se almacenará en la primera línea. Para el servidor pop3.mail.ru será
SHA1 Fingerprint = E0: 10: 11: B5: E6: C9: 1B: 7B: 90: 88: F8: A6: AE: 6E: 21: 97: 69: 30: 7A: 04
En realidad, esta fue la tarea más difícil en el desarrollo del dispositivo. Tuvimos que llegar a todos estos matices, pero cuando resultó que estaba muy feliz!
Para otros servidores de correo, todo es exactamente igual. Debe especificar el nombre del servidor y el puerto para el protocolo POP3 o IMAP correspondiente. Nunca he tenido que trabajar con conexiones seguras, por lo que repito, puede haber una forma más simple.

Se han recibido todos los datos de origen, ahora estamos escribiendo rápidamente un programa para ESP8266 y ¡nos sorprende que todo funcione! El programa extrae el nombre del servidor de la dirección de correo y sustituye la huella digital del certificado correspondiente al servidor en la función SSL.
De este modo, tenemos la oportunidad de trabajar con buzones en muchos servidores.
Daré por separado el procedimiento para acceder al servidor de correo estableciendo una conexión TLS.
Procedimiento de apelación
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



Descripción del hardware El
diagrama del circuito es simple. Utilicé el módulo ESP-12, LEDs "inteligentes" WS2812b.
imagen

El dispositivo está alimentado por USB, así como por una batería incorporada de 650 mAh, que dura 2 horas de funcionamiento en el modo de información: "¡Recibirá una carta!". Cargador de batería en el chip TP4056.
Conector de salida separado para programación en circuito ESP-12.
imagen

imagen

imagen

imagen


Descripción de la parte del software.
El desarrollo del programa se llevó a cabo en un entorno Arduino 1.6.4 con el SDK para ESP8266 instalado. Las funciones principales fueron tomadas de ejemplos. El módulo ESP8266 está configurado para operación mixta: punto de acceso y cliente. Cuando lo enciende por primera vez, debe configurar los parámetros de conexión Wi-Fi (inicio de sesión, contraseña), buzón y contraseña para el buzón. Para hacer esto, debe conectarse a través de una conexión Wi-Fi a la contraseña del punto de acceso "MailNotifier": qwertyqwerty. Se abrirá una página en la que debe ingresar datos y reiniciar el módulo. Los datos se escriben en la memoria no volátil del módulo. Cuando se enciende la alimentación, se leen las configuraciones y comienza el proceso de establecer una conexión entre nuestro informante y el punto de acceso a Internet. El proceso va acompañado de un LED azul intermitente. Tras una conexión exitosa, el LED se ilumina en amarillo y se apaga.A partir de este momento, el informante sondea periódicamente el servidor de correo y, en el caso de una nueva carta, informa con una señal de luz y sonido. Si falla el intento de establecer una conexión con el punto de acceso, el LED comienza a parpadear en rojo.
imagen


Mejoras
El servidor NTP de los ejemplos se ha agregado al programa; puede obtener la hora del sistema. Hubo pensamientos para agregar alarmas, pero cambié de opinión, porque no es necesario
También puede conectarse al dispositivo a través de UDP y transmitir un flujo de datos para encender individualmente cada LED. Por ejemplo, a través del complemento apropiado de Winamp para visualizar música. Y mucho mas.
También utilicé un fotorresistor para controlar la iluminación, de modo que, por ejemplo, no encienda la alarma sonora por la noche. Pero en esta versión, esta función no se usa mediante programación.
Sin problemas, puede agregar un indicador para mostrar encabezados de mensajes o algo más. Pero esto es todo para el futuro.

imagen


Finalmente, un video que muestra el funcionamiento del informante.


Los amigos del equipo 3D-LIFE ayudaron a diseñar e imprimir el estuche , ¡muchas gracias a ellos! Ahora el dispositivo ha adquirido un aspecto terminado.

¡Gracias al autor de la integración de Arduino IDE y ESP8266 por el gran trabajo!

Archivo de proyectos con circuito, placa de circuito impreso en SL4 y fuente

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


All Articles