Whistleblower perangkat keras untuk e-mail baru menggunakan koneksi TLS yang aman di ESP8266

Ketika modul Arduino IDE untuk Wi-Fi berbasis ESP8266 muncul, menjadi mungkin bagi saya untuk lebih mudah memprogramnya. Dan kurangnya pengontrol eksternal untuk kontrol memperkenalkan keuntungan besar lainnya. Gagasan berbagai gadget elektronik dengan penggunaan modul ini langsung masuk ke kepala saya. Maka muncul pemikiran untuk membuat informan otonom perangkat keras tentang kedatangan surat baru ke email saya. Akibatnya, perangkat E-Mail Notifier lahir.
gambar

Detail di bawah.

Perangkat secara berkala membuat koneksi TLS dengan server surat dan meminta jumlah huruf. Pada panggilan pertama, jumlah huruf diingat. Kemudian, dengan peningkatan jumlah huruf di dalam kotak, keputusan dibuat tentang kedatangan surat baru, alarm cahaya dan suara dihidupkan. Pengakuan acara terjadi di klik tombol atau ketika pesan dihapus dari kotak surat. Alarm suara berlangsung sekitar 15 detik, dan yang ringan sampai pengguna mengakui acara tersebut. Perangkat ini dibuat dalam bentuk lampu dan berfungsi, termasuk, sebagai lampu biasa. Saat Anda menekan tombol, lampu menyala dengan lancar. Saat Anda menekan dan menahan tombol, spektrum cahaya berubah dengan lancar. Tekan sebentar tombol ketika lampu menyala mengarah ke peredupan cahaya yang halus.Anda juga dapat mengatur warna cahaya melalui koneksi UDP dari smartphone atau komputer dengan perangkat lunak yang sesuai.
Koneksi Wi-Fi, pengaturan masuk dan kata sandi untuk kotak surat, dll. Dikonfigurasikan melalui halaman web perangkat. Beberapa server email didukung.
Server surat terkenal saat ini bekerja melalui koneksi yang aman. Sebelum bekerja dengan server menggunakan perintah protokol POP3, Anda harus disahkan. Di sini kita membutuhkan protokol TLS. Yang paling sulit bagi saya adalah membuat koneksi TLS dengan server mail. Bersama dengan Arduino IDE, ada contoh mengakses halaman web menggunakan koneksi SSL. Diperiksa - berhasil! Sekarang saya hanya perlu memahami apa itu sidik jari, yang ada dalam kode contoh SSL. Untuk halaman web, semuanya jelas, karena dalam properti koneksi di browser sidik jari ini ada. Tapi saya perlu membuat koneksi ke server keringat. Saya mulai meneliti masalah ini. Menemukan alat OpenSSL yang keren. Seperangkat program memungkinkan Anda untuk melakukan banyak hal menarik. Ini pada dasarnya adalah Telnet dengan koneksi SSL. Saya mencoba untuk pergi ke server surat dan, lihatlah,Koneksi TLS dengan server surat telah dibuat! Selanjutnya, saya sudah bisa bekerja dengan perintah protokol POP3 dan IMAP yang biasa. Masih mengekstrak sidik jari yang saya butuhkan dari sertifikat. Ini dilakukan melalui perintah:
openssl s_client -connect pop3.mail.ru:995

Setelah itu, koneksi aman dibuat dan undangan server email terlihat di bawah. Selanjutnya kami bekerja juga seperti di Telnet. PENGGUNA, LULUS, STAT. Anda juga dapat menggunakan IMAP. Siapa yang lebih suka. Anda hanya perlu mengubah alamat dan port server mail.
Sekarang kita perlu mendapatkan sertifikat dan mengekstrak sidik jari darinya, yang kita perlukan untuk perpustakaan SSL.
Mungkin ada cara yang lebih sederhana, saya tidak memahami kunci-kunci kit OpenSSL secara detail, jadi saya akan memberi tahu Anda cara melakukannya sendiri. Jadi, kami mengeksekusi baris:
openssl s_client -connect pop3.mail.ru:995 >crt

Setelah itu, kita keluar dari program dan file crt di direktori saat ini akan menyimpan sertifikat yang kita butuhkan. Sesuatu seperti ini
Contoh Sertifikat
-----BEGIN CERTIFICATE-----
MIIE5jCCA86gAwIBAgIQEuH8d4WVsue+Ohe/WiSqgDANBgkqhkiG9w0BAQUFADBE
MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMU
R2VvVHJ1c3QgU1NMIENBIC0gRzIwHhcNMTUwODI3MDAwMDAwWhcNMTYwODI2MjM1
OTU5WjByMQswCQYDVQQGEwJSVTEbMBkGA1UECBQSUlVTU0lBTiBGRURFUkFUSU9O
w/s63J8N2ihPDA==
-----END CERTIFICATE-----

Salin semuanya antara --MULAI SERTIFIKAT-- dan --END SERTIFIKAT--, termasuk label ini sendiri, ke dalam file terpisah. Sebut saja mail.key. Dan sekarang kita mendapatkan sidik jari yang sudah lama ditunggu dengan perintah:
openssl x509 -in mail.key -fingerprint -sha1 -noout -text >keyprint

Sekarang dalam file keyprint sidik jari kita akan disimpan di baris pertama. Untuk server pop3.mail.ru,
SHA1 Fingerprint = E0: 10: 11: B5: E6: C9: 1B: 7B: 90: 88: F8: A6: AE: 6E: 21: 97: 69: 30: 7A: 04
Sebenarnya, ini adalah tugas yang paling sulit dalam pengembangan perangkat. Kami harus mendapatkan semua nuansa ini, tetapi ketika ternyata saya sangat senang!
Untuk server email lain, semuanya persis sama. Anda harus menentukan nama server dan port untuk protokol POP3 atau IMAP yang sesuai. Saya tidak pernah harus bekerja dengan koneksi yang aman, jadi saya ulangi, mungkin ada cara yang lebih sederhana.

Semua data sumber telah diterima, sekarang kami dengan cepat menulis sebuah program untuk ESP8266 dan, kami terkejut bahwa semuanya berfungsi! Program mengekstrak nama server dari alamat surat dan mengganti sidik jari sertifikat yang sesuai dengan server ke dalam fungsi SSL.
Dengan demikian kami mendapatkan kesempatan untuk bekerja dengan kotak surat di banyak server.
Saya secara terpisah akan memberikan prosedur untuk mengakses server surat dengan membuat koneksi TLS.
Prosedur banding
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



Deskripsi Perangkat Keras
Diagram sirkuit sederhana. Saya menggunakan modul ESP-12, LED "pintar" WS2812b.
gambar

Perangkat ini didukung oleh USB, serta oleh baterai 650 mAh built-in, yang berlangsung selama 2 jam operasi dalam mode menginformasikan - "Anda akan menerima surat!". Pengisi daya baterai pada chip TP4056.
Konektor keluaran terpisah untuk pemrograman dalam ESP-12.
gambar

gambar

gambar

gambar


Deskripsi bagian perangkat lunak
Pengembangan program dilakukan di lingkungan Arduino 1.6.4 dengan SDK untuk ESP8266 diinstal. Fungsi utama diambil dari contoh. Modul ESP8266 dikonfigurasi untuk operasi campuran: titik akses dan klien. Ketika Anda menyalakannya untuk pertama kalinya, Anda perlu mengonfigurasi parameter koneksi Wi-Fi (login, kata sandi), kotak surat, dan kata sandi untuk kotak surat. Untuk melakukan ini, Anda harus terhubung melalui koneksi Wi-Fi ke kata sandi titik akses "MailNotifier": qwertyqwerty. Halaman akan terbuka di mana Anda harus memasukkan data dan memulai kembali modul. Data ditulis ke memori modul yang tidak mudah menguap. Ketika daya dihidupkan, pengaturan dibaca dan proses membangun koneksi antara informan kami dan jalur akses Internet dimulai. Prosesnya disertai dengan LED biru yang berkedip. Setelah koneksi berhasil, LED menyala kuning dan mati.Mulai saat ini, informan secara berkala melakukan polling pada server surat dan, dalam hal surat baru, informasikan dengan sinyal cahaya dan suara. Jika upaya untuk membuat koneksi dengan titik akses gagal, LED mulai berkedip merah.
gambar


Perbaikan
Server NTP dari contoh telah ditambahkan ke program, Anda bisa mendapatkan waktu sistem dari itu. Ada pikiran untuk menambah alarm, tetapi berubah pikiran, karena tidak perlu.
Anda juga dapat terhubung ke perangkat melalui UDP dan mengirimkan aliran data untuk menyalakan setiap LED secara individual. Misalnya, melalui plugin yang sesuai dari Winamp untuk memvisualisasikan musik. Dan masih banyak lagi.
Saya juga menggunakan photoresistor untuk mengontrol iluminasi, sehingga, misalnya, tidak menyalakan alarm suara di malam hari. Namun dalam versi ini, fungsi ini tidak digunakan secara terprogram.
Tanpa masalah, Anda dapat menambahkan indikator untuk menampilkan header pesan atau yang lainnya. Tapi ini semua untuk masa depan.

gambar


Akhirnya, sebuah video mempertunjukkan karya seorang informan.


Teman-teman dari tim 3D-LIFE membantu merancang dan mencetak kasing , yang banyak terima kasih! Sekarang perangkat telah memperoleh tampilan yang selesai.

Terima kasih kepada penulis integrasi Arduino IDE dan ESP8266 untuk kerja hebatnya!

Arsip proyek dengan sirkuit, papan sirkuit cetak dalam SL4 dan sumber

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


All Articles