
Dalam seri ini, kita telah melihat bagaimana menyertakan tanda tangan S/MIME cukup sederhana. Mengirim email yang terenkripsi S/MIME lebih rumit karena Anda perlu mendapatkan kunci publik penerima. Ini satu hal ketika Anda menggunakan klien email untuk manusia seperti Thunderbird – tetapi bagaimana cara kerjanya dengan aliran email yang dihasilkan oleh aplikasi?
Di bagian 1, kami telah berkeliling singkat tentang S/MIME, melihat tanda tangan dan enkripsi aliran pesan kami di berbagai klien email. Bagian 2 membawa kita melalui alat baris perintah sederhana untuk menandatangani dan mengenkripsi email, kemudian mengirimnya melalui SparkPost. Bagian 3 menunjukkan cara menyuntikkan aliran email yang aman ke platform lokal seperti Port25 PowerMTA dan Momentum.
Dalam seri ini, kami telah melihat bagaimana memasukkan tanda tangan S/MIME cukup sederhana. Mengirim email terenkripsi S/MIME lebih kompleks karena Anda perlu mendapatkan kunci publik penerima. Ini satu hal ketika Anda menggunakan klien email untuk manusia seperti Thunderbird – tapi bagaimana cara kerjanya dengan aliran email yang dihasilkan aplikasi?
Tapi tunggu – ada cara lain untuk masuk ke Mordor untuk mendapatkan kunci tersebut. Layanan Anda dapat mengundang pelanggan Anda (melalui email, tentu saja) untuk mengirim kembali email yang ditandatangani ke alamat layanan pelanggan yang dikenal. Dengan kekuatan magis dari SparkPost Inbound Relay webhook, kami akan mengekstrak dan menyimpan kunci publik itu untuk Anda gunakan.
Kita bisa meringkas ini dalam kasus penggunaan sederhana:
Sebagai penerima pesan, saya menyediakan layanan Anda dengan tanda tangan email pribadi saya melalui email, sehingga di masa depan, email dapat dikirim ke saya dalam bentuk terenkripsi S/MIME.
Dari sini, mari tentukan beberapa persyaratan lebih rinci:
Kami memerlukan layanan email masuk yang andal dan selalu aktif untuk menerima email yang ditandatangani tersebut.
Tidak ada persyaratan khusus pada format email, kecuali harus membawa tanda tangan S/MIME.
Karena siapa pun dapat mencoba mengirim email ke layanan ini, layanan harus dirancang secara defensif, misalnya, menolak pesan "spoof" dari pelaku buruk. Akan ada beberapa lapisan pemeriksaan.
Jika semua pemeriksaan berjalan lancar, layanan akan menyimpan sertifikat dalam file, menggunakan format plain-text Privacy-Enhanced Mail (PEM) yang dikenal.
Ada beberapa persyaratan non-fungsional:
Layanan webhook mesin-ke-mesin dapat sulit dilihat hanya dari respons terhadap apa yang terjadi di dalam. Layanan harus menyediakan log tingkat aplikasi yang dapat dibaca manusia dengan luas. Khususnya, penguraian dan pemeriksaan sertifikat harus dicatat.
Kami menambahkan kasus uji untuk internal aplikasi, menggunakan kerangka Pytest yang bagus, dan menjalankan uji coba tersebut secara otomatis pada check-in menggunakan integrasi Travis CI dengan GitHub.
OK – mari kita mulai!
1. Gambaran solusi
Inilah gambaran keseluruhan solusi tersebut.

2. Menginstal, mengonfigurasi, dan memulai aplikasi web
3. Pengaturan SparkPost inbound relay webhooks
Pertama, kami memilih domain untuk digunakan sebagai alamat pesan masuk kami – di sini, akan menjadi inbound.thetucks.com. Atur domain Anda mengikuti panduan ini. Berikut adalah langkah-langkah yang saya gunakan secara detail:
3.1 Tambahkan Catatan MX
Anda akan memerlukan akses ke akun Penyedia Layanan Internet (ISP) tertentu Anda. Setelah selesai, Anda dapat memeriksanya dengan dig – berikut adalah perintah untuk domain saya.
dig +short MX inbound.thetucks.com
Anda seharusnya melihat:
10 rx3.sparkpostmail.com. 10 rx1.sparkpostmail.com. 10 rx2.sparkpostmail.com.
3.2 Buat Domain Masuk
Gunakan SparkPost Postman API collection, memilih Inbound Domains / Create .. call. Badan permintaan POST berisi domain Anda, contohnya:
{ "domain": "inbound.thetucks.com" }

3.3 Buat Relay Webhook
Buat relay webhook masukan menggunakan panggilan Postman yang relevan. Badan pesan dalam kasus saya berisi:
{ "name": "Certificate Collection Webhook", "target": "https://app.trymsys.net:8855/", "auth_token": "t0p s3cr3t t0k3n", "match": { "protocol": "SMTP", "domain": "inbound.thetucks.com" } }
Seperti disebutkan sebelumnya, saya merekomendasikan mengatur auth_token ke nilai rahasia Anda sendiri, seperti yang diatur dalam file webapp.ini di host Anda.
Nilai “target” Anda harus sesuai dengan alamat host dan port TCP di mana Anda akan menghosting aplikasi web.
Nilai “domain” Anda harus sesuai dengan catatan MX yang diatur pada langkah 1.

Selesai! Pengaturan sudah selesai. Anda sekarang seharusnya dapat mengirim sertifikat ke alamat masuk Anda, mereka akan diproses dan muncul di host aplikasi web Anda – dalam hal ini, file bernama bob.lumreeker@gmail.com.crt.
Sekarang Anda dapat mengirim email terenkripsi kepada Bob, menggunakan alat yang dijelaskan dalam bagian 2 dan 3 dari seri ini.
Anda dapat memeriksa isi sertifikat menggunakan:
openssl x509 -inform PEM -in bob.lumreeker\@gmail.com.crt -text -noout
4. Internals: pengecekan DKIM, validasi sertifikat
Aplikasi memeriksa email yang diterima memiliki DKIM yang valid dan memeriksa bahwa sertifikat itu sendiri valid, seperti yang dijelaskan di sini. Ada catatan implementasi di sana juga, dan ide untuk pekerjaan lebih lanjut.
Menyimpulkan…
Kami telah melihat bagaimana kunci publik penerima dapat dikumpulkan dengan mudah menggunakan email ke alamat webhooks inbound relay. Setelah selesai, penerima tersebut dapat menerima pesan mereka dalam bentuk terenkripsi S/MIME.
Itu saja untuk sekarang! Selamat mengirim.