S/MIME Bagian 4: Mengumpulkan Kunci Publik Penerima dengan Cara Mudah – menggunakan Webhook Inbound Relay SparkPost
·
1 Feb 2019

Poin Penting
Pernyataan: Mengirim email terenkripsi S/MIME tidaklah sulit jika Anda dapat secara otomatis mengumpulkan kunci publik setiap penerima. Postingan ini menutup kesenjangan itu dengan menggunakan SparkPost Inbound Relay Webhooks untuk menerima email yang ditandatangani, mengekstrak sertifikat, dan menyimpannya untuk enkripsi selanjutnya.
Tujuan: Membangun layanan webhook berbasis Flask yang mendengarkan pesan yang ditandatangani yang masuk, memvalidasinya (pemeriksaan DKIM + sertifikat), dan dengan aman menulis setiap kunci publik ke dalam disk untuk digunakan dalam email aman keluar.
Sorotan:
Masalah: Pertukaran kunci manual tidak dapat diskalakan untuk email yang dihasilkan aplikasi.
Solusi: Ajak pengguna untuk mengirim email yang ditandatangani; webhook masuk secara otomatis menganalisis dan menyimpan sertifikat PEM mereka.
Langkah pengaturan:
Konfigurasi Domain Masuk dan catatan MX (misalnya, inbound.yourdomain.com).
Buat Webhook Inbound Relay melalui API SparkPost yang mengarah ke titik akhir aplikasi Anda.
Deploy aplikasi Flask kecil (webapp.py) menggunakan konfigurasi dari webapp.ini.
Catat secara luas untuk transparansi; integrasikan Pytest + Travis CI untuk validasi otomatis.
Tindakan keamanan:
Verifikasi tanda tangan DKIM dan keaslian pesan.
Validasi rantai kepercayaan sertifikat sebelum menyimpannya.
Gunakan token otentikasi rahasia di header webhook.
Output:
Setiap pesan masuk yang valid membuat file sertifikat seperti bob.lumreeker@gmail.com.crt.
Setelah disimpan, kunci ini memungkinkan balasan terenkripsi menggunakan skrip sebelumnya dari bagian 2 dan 3.
Sorotan Tanya jawab
Mengapa mengumpulkan kunci penerima sangat penting untuk S/MIME?
Karena enkripsi memerlukan kunci publik setiap penerima; mengotomatiskan langkah ini memungkinkan aplikasi mana pun mengirim email yang aman tanpa pertukaran manual.
Bagaimana SparkPost Inbound Relay Webhook menyederhanakan pengumpulan kunci?
Ini mengonversi email masuk yang ditandatangani menjadi muatan JSON terstruktur, memungkinkan aplikasi Anda untuk mem-parsing dan menyimpan sertifikat secara programatis.
Apa langkah-langkah keamanan yang mencegah penipuan atau pengiriman sampah?
layanan memvalidasi tanda tangan DKIM, menegakkan token otentikasi, dan menolak pesan yang tidak terformat atau tidak ditandatangani.
Di mana sertifikat disimpan dan dalam format apa?
Mereka ditulis ke disk dalam format PEM (
.crtfiles), siap digunakan oleh alat tanda tangan/enkripsi yang dibangun di bagian sebelumnya.Apa itu alur kerja pengembang?
Jalankan aplikasi Flask, verifikasi dengan Postman menggunakan payload contoh yang diberikan, kemudian sambungkan ke webhook langsung SparkPost untuk operasi terus-menerus.
Kesimpulan keseluruhan?
Manajemen kunci S/MIME dapat sepenuhnya diotomatisasi dengan beberapa baris Python dan API SparkPost—membawa enkripsi yang skalabel ke alur kerja email yang dihasilkan aplikasi mana pun.
Dalam bagian 1, kami melakukan tur singkat tentang S/MIME, melihat tanda tangan dan enkripsi aliran pesan kami di berbagai klien email. Bagian 2 membawa kami melalui alat baris perintah sederhana untuk menandatangani dan mengenkripsi email, lalu mengirimkannya melalui SparkPost. Bagian 3 menunjukkan bagaimana cara menyuntikkan aliran email aman ke dalam platform lokal seperti Port25 PowerMTA dan Momentum.
Dalam seri ini, kami telah melihat bagaimana menyertakan tanda tangan S/MIME cukup sederhana. Mengirimkan email yang terenkripsi S/MIME jauh lebih kompleks karena Anda perlu mendapatkan kunci publik penerima. Ini satu hal ketika Anda menggunakan klien email untuk manusia seperti Thunderbird – tetapi bagaimana itu bisa bekerja dengan aliran email yang dihasilkan aplikasi? Email yang dihasilkan aplikasi, seperti yang digunakan oleh platform kencan, memerlukan strategi yang hati-hati untuk memaksimalkan keterlibatan. Lihat bagaimana aplikasi kencan menciptakan pengalaman email yang menarik dan terpicu.
Tapi tunggu – ada cara lain untuk memasuki Mordor untuk mendapatkan kunci-kunci itu. Layanan Anda dapat mengundang pelanggan Anda (melalui email, tentu saja) untuk mengirimkan kembali email yang ditandatangani ke alamat layanan pelanggan yang diketahui. Dengan kekuatan ajaib dari webhook SparkPost Inbound Relay, kami akan mengekstrak dan menyimpan kunci publik itu untuk Anda gunakan.
Kami dapat merangkum ini dalam sebuah kasus penggunaan yang sederhana:
Sebagai penerima pesan, saya memberikan layanan Anda tanda tangan email pribadi saya melalui email, sehingga di masa depan, email dapat dikirim kepada saya dalam bentuk terenkripsi S/MIME.
Dari ini, mari kita turunkan beberapa persyaratan yang lebih rinci:
Kami memerlukan layanan email masuk yang selalu aktif dan andal untuk menerima email yang ditandatangani tersebut.
Tidak boleh ada persyaratan khusus terkait format email, selain harus membawa tanda tangan S/MIME.
Karena siapa pun dapat mencoba mengirim email ke layanan ini, layanan ini harus dirancang secara defensif, misalnya, untuk menolak pesan “spoof” dari aktor jahat. Akan ada beberapa lapisan pemeriksaan yang diperlukan.
Jika semuanya terlihat baik, layanan akan menyimpan sertifikat dalam sebuah file, menggunakan format Privacy-Enhanced Mail (PEM) yang dikenal sebagai teks biasa.
Ada beberapa persyaratan non-fungsional:
Layanan webhook mesin-ke-mesin sulit terlihat hanya dari respons terhadap apa yang terjadi di dalamnya. Layanan harus menyediakan log tingkat aplikasi yang dapat dibaca manusia yang luas. Khususnya, pencarian dan pemeriksaan sertifikat harus dilog.
Kami menambahkan kasus uji untuk internal aplikasi, menggunakan kerangka kerja Pytest yang bagus, dan menjalankan tes tersebut secara otomatis saat check-in menggunakan integrasi Travis CI dengan GitHub.
Oke – mari kita mulai!
1. Ikhtisar solusi
Ini adalah tampilan keseluruhan solusi.

2. Menginstal, mengonfigurasi, dan memulai aplikasi web
3. Pengaturan webhook relai masuk SparkPost
4. Internal: Pemeriksaan DKIM, validasi sertifikat
Aplikasi memeriksa bahwa email yang diterima memiliki DKIM yang valid dan memeriksa apakah sertifikat itu sendiri valid, seperti yang dijelaskan di sini. Di sana juga ada catatan implementasi, dan ide untuk pekerjaan lebih lanjut.
Menyimpulkan...
Kami telah melihat bagaimana kunci publik penerima dapat dengan mudah dikumpulkan menggunakan email ke alamat webhooks relay masuk. Setelah selesai, penerima tersebut dapat menerima pesan mereka dalam bentuk enkripsi S/MIME.
Itu saja untuk sekarang! Selamat mengirim.





