المبلغين عن الأجهزة للبريد الإلكتروني الجديد باستخدام اتصال TLS آمن على ESP8266

عندما ظهرت وحدة Arduino IDE لشبكة Wi-Fi استنادًا إلى ESP8266 ، أصبح من الممكن بالنسبة لي برمجة البرنامج بشكل أكثر ملاءمة. وعدم وجود وحدة تحكم خارجية للتحكم يقدم ميزة كبيرة أخرى. دخلت أفكار الأشياء الإلكترونية المختلفة باستخدام هذه الوحدة على الفور في رأسي. وهكذا فكرت في جعل مخبر الأجهزة مستقلًا حول وصول رسائل جديدة إلى بريدي الإلكتروني. نتيجة لذلك ، ولد جهاز إعلام البريد الإلكتروني.
الصورة

التفاصيل أدناه.

يقوم الجهاز بشكل دوري بتأسيس اتصال TLS مع خادم البريد ويطلب عدد الحروف. في المكالمة الأولى ، يتم تذكر عدد الحروف. ثم ، مع زيادة عدد الأحرف في الصندوق ، يتم اتخاذ قرار بشأن وصول حرف جديد ، ويتم تشغيل الإنذارات الضوئية والصوتية. يتم الإقرار بالحدث بنقرة زر أو عند حذف رسالة من صندوق البريد. يستمر التنبيه الصوتي حوالي 15 ثانية ، والضوء حتى يقر المستخدم بالحدث. الجهاز مصنوع على شكل مصباح ويعمل ، بما في ذلك ، كمصباح عادي. عند الضغط على الزر ، يتم تشغيل الضوء بسلاسة. عند الضغط مع الاستمرار على الزر ، يتغير طيف التوهج بسلاسة. تؤدي ضغطة قصيرة على الزر عندما يكون الضوء قيد التشغيل إلى تعتيم سلس للتوهج.يمكنك أيضًا تعيين لون التوهج من خلال اتصال UDP من هاتف ذكي أو كمبيوتر باستخدام البرنامج المناسب.
يتم تكوين اتصال Wi-Fi وإعدادات تسجيل الدخول وكلمة المرور لصندوق البريد وما إلى ذلك من خلال صفحة الويب للجهاز. يتم دعم العديد من خوادم البريد.
تعمل خوادم البريد المعروفة حاليًا من خلال اتصالات آمنة. قبل العمل مع الخادم باستخدام أوامر بروتوكول POP3 ، يجب أن تكون مفوضًا. هنا نحتاج إلى بروتوكول TLS. كان أصعب شيء بالنسبة لي هو إنشاء اتصال TLS مع خادم البريد. جنبا إلى جنب مع Arduino IDE ، كان هناك مثال للوصول إلى صفحة ويب باستخدام اتصال SSL. فحص - يعمل! الآن أنا فقط بحاجة إلى فهم ما هو بصمة الإصبع ، الموجودة في رمز مثال SSL. بالنسبة لصفحات الويب ، كل شيء واضح ، لأنه في خصائص الاتصال في المتصفح ، توجد بصمة الإصبع هذه. لكنني بحاجة إلى إنشاء اتصال بخادم العرق. لقد بدأت في بحث القضية. وجدت أداة OpenSSL رائعة. تتيح لك مجموعة من البرامج القيام بالكثير من الأشياء المثيرة للاهتمام. هذا هو في الأساس Telnet مع اتصال SSL. حاولت أن أذهب إلى خادم البريد ، وها ،تم إنشاء اتصال TLS بخادم البريد! علاوة على ذلك ، يمكنني بالفعل العمل مع أوامر بروتوكول POP3 و IMAP المعتادة. يبقى لاستخراج البصمة التي أحتاجها من الشهادة. يتم ذلك من خلال الأمر:
openssl s_client -connect pop3.mail.ru:995

بعد ذلك ، يتم إنشاء اتصال آمن وتكون دعوة خادم البريد مرئية أدناه. علاوة على ذلك ، نعمل أيضًا كما في Telnet. المستخدم ، تصريح المرور ، STAT. يمكنك أيضًا استخدام IMAP. من يحب أكثر. من الضروري فقط تغيير عنوان وميناء خادم البريد.
الآن نحن بحاجة للحصول على الشهادة واستخراج البصمة منه ، والتي نحتاجها لمكتبة SSL.
ربما هناك طريقة أبسط ، لم أفهم مفاتيح مجموعة OpenSSL بالتفصيل ، لذلك سأخبرك بكيفية القيام بذلك بنفسي. لذا ، نقوم بتنفيذ الخط:
openssl s_client -connect pop3.mail.ru:995 >crt

بعد ذلك ، نخرج من البرنامج وسوف يخزن ملف crt في الدليل الحالي الشهادة التي نحتاجها. شيء من هذا القبيل
مثال على الشهادة
-----BEGIN CERTIFICATE-----
MIIE5jCCA86gAwIBAgIQEuH8d4WVsue+Ohe/WiSqgDANBgkqhkiG9w0BAQUFADBE
MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMU
R2VvVHJ1c3QgU1NMIENBIC0gRzIwHhcNMTUwODI3MDAwMDAwWhcNMTYwODI2MjM1
OTU5WjByMQswCQYDVQQGEwJSVTEbMBkGA1UECBQSUlVTU0lBTiBGRURFUkFUSU9O
w/s63J8N2ihPDA==
-----END CERTIFICATE-----

انسخ كل شيء بين - شهادة البدء - و- شهادة الاعتماد - بما في ذلك هذه التسميات نفسها ، في ملف منفصل. سمها mail.key. والآن نحصل على بصمة الإصبع التي طال انتظارها باستخدام الأمر:
openssl x509 -in mail.key -fingerprint -sha1 -noout -text >keyprint

الآن في ملف بصمة المفاتيح سيتم تخزين بصمة إصبعنا في السطر الأول. بالنسبة للخادم pop3.mail.ru سيكون
بصمة SHA1 = E0: 10: 11: B5: E6: C9: 1B: 7B: 90: 88: F8: A6: AE: 6E: 21: 97: 69: 30: 7A: 04 في
الواقع ، كانت هذه أصعب مهمة في تطوير الجهاز. كان علينا الوصول إلى كل هذه الفروق الدقيقة ، ولكن عندما تبين أنني كنت سعيدًا جدًا!
بالنسبة لخوادم البريد الأخرى ، كل شيء هو نفسه تمامًا. يجب تحديد اسم الخادم والمنفذ لبروتوكول POP3 أو IMAP المقابل. لم أضطر أبدًا للعمل مع اتصالات آمنة ، لذلك أكرر ، قد تكون هناك طريقة أبسط.

تم استلام جميع البيانات المصدر ، والآن نكتب بسرعة برنامجًا لـ ESP8266 ، ونفاجأ بأن كل شيء يعمل! يستخرج البرنامج اسم الخادم من العنوان البريدي ويستبدل بصمة الشهادة المطابقة للخادم في وظيفة SSL.
وبالتالي لدينا الفرصة للعمل مع صناديق البريد على العديد من الخوادم.
سأقدم بشكل منفصل الإجراء للوصول إلى خادم البريد مع إنشاء اتصال TLS.
إجراءات الاستئناف
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



وصف الأجهزة
مخطط الدائرة بسيط. لقد استخدمت وحدة ESP-12 ، مصابيح WS2812b LED "الذكية".
الصورة

يتم تشغيل الجهاز بواسطة USB ، بالإضافة إلى بطارية 650 mAh مدمجة ، والتي تستمر لمدة ساعتين من التشغيل في وضع الإعلام - "سوف تتلقى رسالة!". شاحن بطارية على شريحة TP4056.
موصل الإخراج بشكل منفصل للبرمجة في الدائرة ESP-12.
الصورة

الصورة

الصورة

الصورة


وصف جزء البرنامج
تم تطوير البرنامج في بيئة Arduino 1.6.4 مع تثبيت SDK لـ ESP8266. تم أخذ الوظائف الرئيسية من الأمثلة. تم تكوين الوحدة النمطية ESP8266 للعملية المختلطة: نقطة الوصول والعميل. عند تشغيله لأول مرة ، تحتاج إلى تكوين معلمات اتصال Wi-Fi (تسجيل الدخول وكلمة المرور) وصندوق البريد وكلمة المرور لصندوق البريد. للقيام بذلك ، تحتاج إلى الاتصال عبر اتصال Wi-Fi بكلمة مرور نقطة وصول "MailNotifier": qwertyqwerty. سيتم فتح صفحة يجب عليك إدخال البيانات عليها وإعادة تشغيل الوحدة. يتم كتابة البيانات في الذاكرة غير المتطايرة للوحدة. عند تشغيل الطاقة ، تتم قراءة الإعدادات وتبدأ عملية إنشاء اتصال بين المخبر ونقطة الوصول إلى الإنترنت. ويرافق العملية ضوء LED أزرق وامض. عند نجاح الاتصال ، يضيء مؤشر LED باللون الأصفر وينطفئ.من هذه اللحظة ، يقوم المخبر بشكل دوري باستقصاء خادم البريد ، وفي حالة وجود رسالة جديدة ، يتم إبلاغه بإشارة ضوئية وصوتية. إذا فشلت محاولة إنشاء اتصال بنقطة الوصول ، يبدأ مصباح LED في الوميض باللون الأحمر.
الصورة


التحسينات
تمت إضافة خادم NTP من الأمثلة إلى البرنامج ؛ يمكنك الحصول على وقت النظام منه. كانت هناك أفكار لإضافة منبهات ، لكنها غيرت رأيي ، لأن لا حاجة.
يمكنك أيضًا الاتصال بالجهاز عبر UDP وإرسال دفق بيانات لتشغيل كل LED بشكل فردي. على سبيل المثال ، من خلال المكون الإضافي المناسب من Winamp لتصور الموسيقى. وغير ذلك الكثير.
لقد استخدمت أيضًا مقاوم ضوئي للتحكم في الإضاءة ، بحيث ، على سبيل المثال ، لا تقم بتشغيل منبه الصوت في الليل. ولكن في هذا الإصدار ، لا يتم استخدام هذه الوظيفة برمجيًا.
بدون مشاكل ، يمكنك إضافة مؤشر لعرض رؤوس الرسائل أو أي شيء آخر. ولكن هذا كل شيء للمستقبل.

الصورة


وأخيرًا ، مقطع فيديو يوضح عمل المخبر.


ساعد أصدقاء من فريق 3D-LIFE في تصميم الحالة وطباعتها ، وهو ما يشكرهم كثيرًا! الآن اكتسب الجهاز نظرة نهائية.

بفضل مؤلف دمج Arduino IDE و ESP8266 لهذا العمل الرائع!

أرشيف المشروع بدائرة ، لوحة الدوائر المطبوعة في SL4 والمصدر

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


All Articles