
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?
Dalam bagian 1, kita melakukan tur singkat tentang S/MIME, melihat penandatanganan dan enkripsi aliran pesan kita di berbagai klien surat. Bagian 2 membawa kita melalui alat baris perintah sederhana untuk menandatangani dan mengenkripsi email, kemudian mengirimkannya melalui SparkPost. Bagian 3 menunjukkan bagaimana menyuntikkan aliran surat yang aman ke dalam platform di tempat seperti Port25 PowerMTA dan Momentum.
Dalam seri ini, kita melihat bahwa memasukkan tanda tangan S/MIME cukup mudah. Mengirim surat terenkripsi S/MIME lebih kompleks karena Anda perlu mendapatkan kunci publik penerima. Itu mudah ketika Anda menggunakan klien surat untuk manusia seperti Thunderbird – tetapi bagaimana itu bekerja dengan aliran email yang dibuat oleh aplikasi? Email yang dibuat oleh aplikasi, seperti yang digunakan oleh platform kencan, memerlukan strategi yang cermat untuk memaksimalkan keterlibatan. Lihat bagaimana aplikasi kencan menciptakan pengalaman email yang memicu keterlibatan.
Tapi tunggu – ada cara lain ke Mordor untuk mendapatkan kunci tersebut. Layanan Anda dapat mengundang pelanggan Anda (tentu saja melalui email) untuk mengirimkan kembali surat yang ditandatangani ke alamat layanan pelanggan yang sudah dikenal. Menggunakan kekuatan magis dari SparkPost Inbound Relay webhooks, kami akan mengekstrak dan menyimpan kunci publik tersebut untuk Anda gunakan.
Kita dapat merangkum ini dalam kasus penggunaan sederhana:
Sebagai penerima pesan, saya memberikan layanan Anda tanda tangan email pribadi saya melalui email, sehingga di masa depan, email dapat dikirimkan kepada saya dalam bentuk terenkripsi S/MIME.
Dari sini, mari kita turunkan beberapa persyaratan yang lebih rinci:
Kami memerlukan layanan email masuk yang selalu aktif dan dapat diandalkan untuk menerima email yang ditandatangani tersebut.
Tidak boleh ada persyaratan khusus pada format surat, selain harus membawa tanda tangan S/MIME.
Karena siapa pun bisa mencoba mengirim surat ke layanan ini, itu harus dirancang secara defensif, misalnya, untuk menolak pesan "spoof" dari pelaku jahat. Akan ada beberapa lapisan pengecekan.
Jika semuanya baik-baik saja, layanan akan menyimpan sertifikat dalam file, menggunakan format Privacy-Enhanced Mail (PEM) teks biasa yang sudah dikenal.
Ada beberapa persyaratan non-fungsional:
Layanan webhook mesin-ke-mesin bisa sulit dilihat hanya dari respons tentang apa yang terjadi di dalamnya. Layanan harus menyediakan log aplikasi tingkat manusia yang dapat dibaca secara luas. Secara khusus, parsing dan pengecekan sertifikat harus dicatat.
Kami menambahkan kasus uji untuk aplikasi internal, menggunakan kerangka kerja Pytest yang bagus, dan menjalankan uji tersebut secara otomatis saat check-in menggunakan integrasi Travis CI dengan GitHub.
Oke – ayo 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, itu akan menjadi inbound.thetucks.com. Siapkan domain Anda mengikuti panduan ini. Berikut adalah langkah-langkah yang saya gunakan secara rinci:
3.1 Tambahkan Rekaman MX
Anda akan memerlukan akses ke akun Penyedia Layanan Internet spesifik Anda. Ketika selesai, Anda dapat memeriksanya dengan dig – berikut adalah perintah untuk domain saya.
Anda seharusnya melihat:
3.2 Buat Domain Masuk
Gunakan SparkPost Postman API collection, memilih panggilan Inbound Domains / Create .. Badan permintaan POST berisi domain Anda, misalnya:

3.3 Buat Relay Webhook
Buat inbound relay webhook menggunakan panggilan Postman yang relevan. Badan pesan dalam kasus saya berisi:
Sebagaimana disebutkan sebelumnya, saya menyarankan menetapkan auth_token dengan nilai rahasia Anda sendiri, seperti yang diatur dalam file webapp.ini di host Anda.
Nilai “target” Anda perlu mencocokkan alamat host dan port TCP tempat Anda meng-host aplikasi web.
Nilai “domain” Anda perlu mencocokkan rekaman MX yang diatur pada langkah 1.

Itu saja! Plumbing telah selesai. Anda seharusnya sekarang dapat mengirim sertifikat ke alamat masuk Anda, mereka akan diproses dan muncul di host aplikasi web Anda – dalam hal ini, sebuah file bernama bob.lumreeker@gmail.com.crt.
Sekarang Anda dapat mengirim email terenkripsi kepada Bob, menggunakan alat yang dijelaskan dalam bagian 2 & 3 dari seri ini.
Anda dapat memeriksa isi sertifikat menggunakan:
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.