S/MIME Bagian 4: Mengumpulkan Kunci Publik Penerima dengan Cara yang Mudah – dengan SparkPost Inbound Relay Webhooks

Burung

1 Feb 2019

Email

1 min read

S/MIME Bagian 4: Mengumpulkan Kunci Publik Penerima dengan Cara yang Mudah – dengan SparkPost Inbound Relay Webhooks

Intisari Utama

    • Premis: Mengirim email terenkripsi S/MIME tidak sulit setelah Anda dapat secara otomatis mengumpulkan kunci publik setiap penerima. Postingan ini menutup kesenjangan tersebut dengan menggunakan SparkPost Inbound Relay Webhooks untuk menerima email yang ditandatangani, mengekstrak sertifikat, dan menyimpannya untuk enkripsi nanti.

    • Tujuan: Membangun layanan webhook berbasis Flask yang mendengarkan pesan yang masuk dengan tanda tangan, memvalidasi mereka (pemeriksaan DKIM + sertifikat), dan menulis dengan aman setiap kunci publik ke disk untuk digunakan dalam email aman yang keluar.

    • Sorotan:

      1. Masalah: Pertukaran kunci manual tidak dapat diskalakan untuk email yang dihasilkan aplikasi.

      2. Solusi: Mengundang pengguna untuk mengirim email yang ditandatangani; inbound webhook secara otomatis mengurai dan menyimpan sertifikat PEM mereka.

      3. Langkah pengaturan:

        • Konfigurasikan Inbound Domain dan catatan MX (misalnya, inbound.yourdomain.com).

        • Buat Inbound Relay Webhook melalui SparkPost API yang menunjuk ke endpoint aplikasi Anda.

        • Deploy Flask app kecil (webapp.py) menggunakan konfigurasi dari webapp.ini.

        • Log secara ekstensif untuk transparansi; integrasikan Pytest + Travis CI untuk validasi otomatis.

      4. Langkah keamanan:

        • Verifikasi tanda tangan DKIM dan keaslian pesan.

        • Validasi rantai kepercayaan sertifikat sebelum menyimpan.

        • Gunakan token autentikasi rahasia di headers webhook.

      5. Keluaran:

        • 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 Q&A

  • Mengapa mengumpulkan kunci penerima sangat penting untuk S/MIME?

    Karena enkripsi memerlukan kunci publik dari setiap penerima; mengotomatisasi langkah ini memungkinkan aplikasi apa pun mengirimkan surat aman tanpa pertukaran manual.

  • Bagaimana cara SparkPost Inbound Relay Webhook menyederhanakan pengumpulan kunci?

    Ini mengubah email masuk yang ditandatangani menjadi payload JSON terstruktur, memungkinkan aplikasi Anda untuk melakukan parsing dan menyimpan sertifikat secara terprogram.

  • Apa langkah-langkah pengamanan yang mencegah spoofing atau pengiriman sampah?

    Layanan memvalidasi tanda tangan DKIM, menegakkan token otentikasi, dan menolak pesan yang salah format atau tanpa tanda tangan.

  • Di mana sertifikat disimpan dan dalam format apa?

    Mereka ditulis ke disk dalam format PEM (.crt files), siap untuk digunakan oleh rangkaian alat penandatanganan/enkripsi yang dibangun di bagian sebelumnya.

  • Apa alur kerja developer?

    Jalankan aplikasi Flask, verifikasi dengan Postman menggunakan payload sampel yang disediakan, lalu hubungkan ke webhook live SparkPost untuk operasi berkelanjutan.

  • Kesimpulan keseluruhan?

    Pengelolaan kunci S/MIME dapat sepenuhnya otomatis dengan beberapa baris Python dan SparkPost APIs—membawa enkripsi yang dapat diskalakan ke alur kerja email yang dihasilkan aplikasi mana pun.

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!

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!

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.

Diagram depicting a secure email flow illustrating how emails are verified using certificates for secure transmission.

Inilah gambaran keseluruhan solusi tersebut.

Diagram depicting a secure email flow illustrating how emails are verified using certificates for secure transmission.

Inilah gambaran keseluruhan solusi tersebut.

Diagram depicting a secure email flow illustrating how emails are verified using certificates for secure transmission.

2. Menginstal, mengonfigurasi, dan memulai aplikasi web

Kami akan mulai dengan bagian ini, sehingga kami memiliki pengujian sepenuhnya sebelum menyambungkan inbound relay webhooks.

Aplikasi web ini termasuk dalam proyek yang sama di GitHub seperti bagian 1 – 3, jadi jika Anda telah mengikuti bagian-bagian tersebut, Anda sudah memilikinya. Berikut adalah bagian-bagian baru:

  • Program readSMIMEsig.py – membaca email dan memperlihatkan sertifikat perantara dan pengguna.

  • Program webapp.py – aplikasi web sederhana yang kompatibel dengan Flask untuk digunakan dengan SparkPost Inbound Relay Webhooks.

  • webapp.ini – file konfigurasi untuk di atas. File konfigurasi memungkinkan nilai-nilai yang sama dengan mudah diteruskan baik ke aplikasi command-line dan web.

Anda perlu memastikan host Anda memiliki nomor port TCP yang benar terbuka untuk permintaan masuk dari dunia luar sehingga SparkPost dapat mengirim POST pesan ke aplikasi Anda. Jika Anda dihosting di AWS EC2, misalnya, Anda perlu mengonfigurasi Security Group dari instance Anda.

Instruksi untuk mengonfigurasi dan memulai aplikasi web disediakan dalam panduan pengaturan kami – ini cukup mudah. Untuk memeriksa apakah aplikasi Anda berjalan dan dapat diakses dari dunia luar, Anda dapat mengirimkan permintaan (kosong) dari host lain menggunakan curl, misalnya:

curl -X POST https://app.trymsys.net:8855/

Anda harus melihat respons seperti berikut:

{"message":"Unknown Content-Type in request headers"}

Ini adalah hal yang baik – aplikasi Anda berjalan!

Dalam webapp.log di host Anda, Anda akan melihat keluaran yang mirip dengan ini:

2019-01-15 00:11:07,575,root,INFO,Request from 38.96.5.10,scheme=https,path=/
2019-01-15 00:11:07,575,root,INFO,| len(headers)=3,len(body)=None
2019-01-15 00:11:07,575,root,INFO,| Unknown Content-Type: None

Untuk membantu Anda bermain dengan data nyata dalam aplikasi Anda segera, Anda dapat mengimpor permintaan Postman khusus ini dari repositori proyek. Ini mensimulasikan apa yang akan dilakukan akun SparkPost Anda, yaitu mengirimkan POST https yang berisi email dengan sertifikat khusus yang valid (milik akun uji saya) ke aplikasi Anda.

Anda hanya perlu mengubah alamat target dalam permintaan (di kotak abu-abu di atas) agar sesuai dengan instalasi Anda. Jika Anda mengubah nilai token di webapp.ini, sesuaikan nilai header di Postman agar sesuai.

Jika aplikasi Anda berfungsi, Anda akan melihat respons “200 OK” kembali di Postman. File log aplikasi host Anda akan berisi keluaran seperti ini:

2019-01-15 00:11:48,554,root,INFO,Request from 38.96.5.10,scheme=https,path=/
2019-01-15 00:11:48,554,root,INFO,| len(headers)=10,len(body)=14778
2019-01-15 00:11:48,555,root,INFO,| msg_from=bob.lumreeker@gmail.com,rcpt_to=secureme@inbound.thetucks.com,len(email_rfc822)=9223
2019-01-15 00:11:48,599,root,INFO,| from=bob.lumreeker@gmail.com,DKIM passed
2019-01-15 00:11:48,600,root,INFO,| content-type=multipart/signed; protocol="application/pkcs7-signature"; micalg=sha-256; boundary="------------ms010908020707040304020406",content-description=None
2019-01-15 00:11:48,600,root,INFO,| content-type=text/plain; charset=utf-8; format=flowed,content-description=None
2019-01-15 00:11:48,600,root,INFO,| content-type=application/pkcs7-signature; name="smime.p7s",content-description=S/MIME Cryptographic Signature
2019-01-15 00:11:48,600,root,INFO,| filename=smime.p7s,bytes=3998
2019-01-15 00:11:48,601,root,INFO,| Certificate: subject email_address=['bob.lumreeker@gmail.com'],not_valid_before=2018-10-03 00:00:00,not_valid_after=2019-10-03 23:59:59,hash_algorithm=sha256,key_size=2048 bytes, issuer={'countryName': 'GB', 'stateOrProvinceName': 'Greater Manchester', 'localityName': 'Salford', 'organizationName': 'COMODO CA Limited', 'commonName': 'COMODO RSA Client Authentication and Secure Email CA'}
2019-01-15 00:11:48,602,root,INFO,| Certificate: subject email_address=[],not_valid_before=2013-01-10 00:00:00,not_valid_after=2028-01-09 23:59:59,hash_algorithm=sha384,key_size=2048 bytes, issuer={'countryName': 'GB', 'stateOrProvinceName': 'Greater Manchester', 'localityName': 'Salford', 'organizationName': 'COMODO CA Limited', 'commonName': 'COMODO RSA Certification Authority'}
2019-01-15 00:11:48,616,root,INFO,| written file ./bob.lumreeker@gmail.com.crt,bytes=1870,ok=True

Untuk pemeriksaan cepat, carilah baris terakhir – jika tertulis “file tertulis”, maka Anda baik-baik saja. Sisanya menunjukkan proses pemeriksaan DKIM dan validasi sertifikat.

Kami akan mulai dengan bagian ini, sehingga kami memiliki pengujian sepenuhnya sebelum menyambungkan inbound relay webhooks.

Aplikasi web ini termasuk dalam proyek yang sama di GitHub seperti bagian 1 – 3, jadi jika Anda telah mengikuti bagian-bagian tersebut, Anda sudah memilikinya. Berikut adalah bagian-bagian baru:

  • Program readSMIMEsig.py – membaca email dan memperlihatkan sertifikat perantara dan pengguna.

  • Program webapp.py – aplikasi web sederhana yang kompatibel dengan Flask untuk digunakan dengan SparkPost Inbound Relay Webhooks.

  • webapp.ini – file konfigurasi untuk di atas. File konfigurasi memungkinkan nilai-nilai yang sama dengan mudah diteruskan baik ke aplikasi command-line dan web.

Anda perlu memastikan host Anda memiliki nomor port TCP yang benar terbuka untuk permintaan masuk dari dunia luar sehingga SparkPost dapat mengirim POST pesan ke aplikasi Anda. Jika Anda dihosting di AWS EC2, misalnya, Anda perlu mengonfigurasi Security Group dari instance Anda.

Instruksi untuk mengonfigurasi dan memulai aplikasi web disediakan dalam panduan pengaturan kami – ini cukup mudah. Untuk memeriksa apakah aplikasi Anda berjalan dan dapat diakses dari dunia luar, Anda dapat mengirimkan permintaan (kosong) dari host lain menggunakan curl, misalnya:

curl -X POST https://app.trymsys.net:8855/

Anda harus melihat respons seperti berikut:

{"message":"Unknown Content-Type in request headers"}

Ini adalah hal yang baik – aplikasi Anda berjalan!

Dalam webapp.log di host Anda, Anda akan melihat keluaran yang mirip dengan ini:

2019-01-15 00:11:07,575,root,INFO,Request from 38.96.5.10,scheme=https,path=/
2019-01-15 00:11:07,575,root,INFO,| len(headers)=3,len(body)=None
2019-01-15 00:11:07,575,root,INFO,| Unknown Content-Type: None

Untuk membantu Anda bermain dengan data nyata dalam aplikasi Anda segera, Anda dapat mengimpor permintaan Postman khusus ini dari repositori proyek. Ini mensimulasikan apa yang akan dilakukan akun SparkPost Anda, yaitu mengirimkan POST https yang berisi email dengan sertifikat khusus yang valid (milik akun uji saya) ke aplikasi Anda.

Anda hanya perlu mengubah alamat target dalam permintaan (di kotak abu-abu di atas) agar sesuai dengan instalasi Anda. Jika Anda mengubah nilai token di webapp.ini, sesuaikan nilai header di Postman agar sesuai.

Jika aplikasi Anda berfungsi, Anda akan melihat respons “200 OK” kembali di Postman. File log aplikasi host Anda akan berisi keluaran seperti ini:

2019-01-15 00:11:48,554,root,INFO,Request from 38.96.5.10,scheme=https,path=/
2019-01-15 00:11:48,554,root,INFO,| len(headers)=10,len(body)=14778
2019-01-15 00:11:48,555,root,INFO,| msg_from=bob.lumreeker@gmail.com,rcpt_to=secureme@inbound.thetucks.com,len(email_rfc822)=9223
2019-01-15 00:11:48,599,root,INFO,| from=bob.lumreeker@gmail.com,DKIM passed
2019-01-15 00:11:48,600,root,INFO,| content-type=multipart/signed; protocol="application/pkcs7-signature"; micalg=sha-256; boundary="------------ms010908020707040304020406",content-description=None
2019-01-15 00:11:48,600,root,INFO,| content-type=text/plain; charset=utf-8; format=flowed,content-description=None
2019-01-15 00:11:48,600,root,INFO,| content-type=application/pkcs7-signature; name="smime.p7s",content-description=S/MIME Cryptographic Signature
2019-01-15 00:11:48,600,root,INFO,| filename=smime.p7s,bytes=3998
2019-01-15 00:11:48,601,root,INFO,| Certificate: subject email_address=['bob.lumreeker@gmail.com'],not_valid_before=2018-10-03 00:00:00,not_valid_after=2019-10-03 23:59:59,hash_algorithm=sha256,key_size=2048 bytes, issuer={'countryName': 'GB', 'stateOrProvinceName': 'Greater Manchester', 'localityName': 'Salford', 'organizationName': 'COMODO CA Limited', 'commonName': 'COMODO RSA Client Authentication and Secure Email CA'}
2019-01-15 00:11:48,602,root,INFO,| Certificate: subject email_address=[],not_valid_before=2013-01-10 00:00:00,not_valid_after=2028-01-09 23:59:59,hash_algorithm=sha384,key_size=2048 bytes, issuer={'countryName': 'GB', 'stateOrProvinceName': 'Greater Manchester', 'localityName': 'Salford', 'organizationName': 'COMODO CA Limited', 'commonName': 'COMODO RSA Certification Authority'}
2019-01-15 00:11:48,616,root,INFO,| written file ./bob.lumreeker@gmail.com.crt,bytes=1870,ok=True

Untuk pemeriksaan cepat, carilah baris terakhir – jika tertulis “file tertulis”, maka Anda baik-baik saja. Sisanya menunjukkan proses pemeriksaan DKIM dan validasi sertifikat.

Kami akan mulai dengan bagian ini, sehingga kami memiliki pengujian sepenuhnya sebelum menyambungkan inbound relay webhooks.

Aplikasi web ini termasuk dalam proyek yang sama di GitHub seperti bagian 1 – 3, jadi jika Anda telah mengikuti bagian-bagian tersebut, Anda sudah memilikinya. Berikut adalah bagian-bagian baru:

  • Program readSMIMEsig.py – membaca email dan memperlihatkan sertifikat perantara dan pengguna.

  • Program webapp.py – aplikasi web sederhana yang kompatibel dengan Flask untuk digunakan dengan SparkPost Inbound Relay Webhooks.

  • webapp.ini – file konfigurasi untuk di atas. File konfigurasi memungkinkan nilai-nilai yang sama dengan mudah diteruskan baik ke aplikasi command-line dan web.

Anda perlu memastikan host Anda memiliki nomor port TCP yang benar terbuka untuk permintaan masuk dari dunia luar sehingga SparkPost dapat mengirim POST pesan ke aplikasi Anda. Jika Anda dihosting di AWS EC2, misalnya, Anda perlu mengonfigurasi Security Group dari instance Anda.

Instruksi untuk mengonfigurasi dan memulai aplikasi web disediakan dalam panduan pengaturan kami – ini cukup mudah. Untuk memeriksa apakah aplikasi Anda berjalan dan dapat diakses dari dunia luar, Anda dapat mengirimkan permintaan (kosong) dari host lain menggunakan curl, misalnya:

curl -X POST https://app.trymsys.net:8855/

Anda harus melihat respons seperti berikut:

{"message":"Unknown Content-Type in request headers"}

Ini adalah hal yang baik – aplikasi Anda berjalan!

Dalam webapp.log di host Anda, Anda akan melihat keluaran yang mirip dengan ini:

2019-01-15 00:11:07,575,root,INFO,Request from 38.96.5.10,scheme=https,path=/
2019-01-15 00:11:07,575,root,INFO,| len(headers)=3,len(body)=None
2019-01-15 00:11:07,575,root,INFO,| Unknown Content-Type: None

Untuk membantu Anda bermain dengan data nyata dalam aplikasi Anda segera, Anda dapat mengimpor permintaan Postman khusus ini dari repositori proyek. Ini mensimulasikan apa yang akan dilakukan akun SparkPost Anda, yaitu mengirimkan POST https yang berisi email dengan sertifikat khusus yang valid (milik akun uji saya) ke aplikasi Anda.

Anda hanya perlu mengubah alamat target dalam permintaan (di kotak abu-abu di atas) agar sesuai dengan instalasi Anda. Jika Anda mengubah nilai token di webapp.ini, sesuaikan nilai header di Postman agar sesuai.

Jika aplikasi Anda berfungsi, Anda akan melihat respons “200 OK” kembali di Postman. File log aplikasi host Anda akan berisi keluaran seperti ini:

2019-01-15 00:11:48,554,root,INFO,Request from 38.96.5.10,scheme=https,path=/
2019-01-15 00:11:48,554,root,INFO,| len(headers)=10,len(body)=14778
2019-01-15 00:11:48,555,root,INFO,| msg_from=bob.lumreeker@gmail.com,rcpt_to=secureme@inbound.thetucks.com,len(email_rfc822)=9223
2019-01-15 00:11:48,599,root,INFO,| from=bob.lumreeker@gmail.com,DKIM passed
2019-01-15 00:11:48,600,root,INFO,| content-type=multipart/signed; protocol="application/pkcs7-signature"; micalg=sha-256; boundary="------------ms010908020707040304020406",content-description=None
2019-01-15 00:11:48,600,root,INFO,| content-type=text/plain; charset=utf-8; format=flowed,content-description=None
2019-01-15 00:11:48,600,root,INFO,| content-type=application/pkcs7-signature; name="smime.p7s",content-description=S/MIME Cryptographic Signature
2019-01-15 00:11:48,600,root,INFO,| filename=smime.p7s,bytes=3998
2019-01-15 00:11:48,601,root,INFO,| Certificate: subject email_address=['bob.lumreeker@gmail.com'],not_valid_before=2018-10-03 00:00:00,not_valid_after=2019-10-03 23:59:59,hash_algorithm=sha256,key_size=2048 bytes, issuer={'countryName': 'GB', 'stateOrProvinceName': 'Greater Manchester', 'localityName': 'Salford', 'organizationName': 'COMODO CA Limited', 'commonName': 'COMODO RSA Client Authentication and Secure Email CA'}
2019-01-15 00:11:48,602,root,INFO,| Certificate: subject email_address=[],not_valid_before=2013-01-10 00:00:00,not_valid_after=2028-01-09 23:59:59,hash_algorithm=sha384,key_size=2048 bytes, issuer={'countryName': 'GB', 'stateOrProvinceName': 'Greater Manchester', 'localityName': 'Salford', 'organizationName': 'COMODO CA Limited', 'commonName': 'COMODO RSA Certification Authority'}
2019-01-15 00:11:48,616,root,INFO,| written file ./bob.lumreeker@gmail.com.crt,bytes=1870,ok=True

Untuk pemeriksaan cepat, carilah baris terakhir – jika tertulis “file tertulis”, maka Anda baik-baik saja. Sisanya menunjukkan proses pemeriksaan DKIM dan validasi sertifikat.

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.

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 panggilan Inbound Domains / Create .. Badan permintaan POST berisi domain Anda, misalnya:

{ "domain": "inbound.thetucks.com" }
Postman desktop application with an open tab displaying a 'Create an Inbound Domain' API request, featuring fields such as domain input, several header options, and a JSON payload, aimed at testing and automating API workflows.


3.3 Buat Relay Webhook

Buat inbound relay webhook 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"
  }
}

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.

Postman interface, showing the process of creating a relay webhook with detailed JSON configuration, with sections including request method, parameters, and code snippet.


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:

openssl x509 -inform PEM -in bob.lumreeker\@gmail.com.crt -text -noout

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.

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 panggilan Inbound Domains / Create .. Badan permintaan POST berisi domain Anda, misalnya:

{ "domain": "inbound.thetucks.com" }
Postman desktop application with an open tab displaying a 'Create an Inbound Domain' API request, featuring fields such as domain input, several header options, and a JSON payload, aimed at testing and automating API workflows.


3.3 Buat Relay Webhook

Buat inbound relay webhook 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"
  }
}

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.

Postman interface, showing the process of creating a relay webhook with detailed JSON configuration, with sections including request method, parameters, and code snippet.


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:

openssl x509 -inform PEM -in bob.lumreeker\@gmail.com.crt -text -noout

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.

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 panggilan Inbound Domains / Create .. Badan permintaan POST berisi domain Anda, misalnya:

{ "domain": "inbound.thetucks.com" }
Postman desktop application with an open tab displaying a 'Create an Inbound Domain' API request, featuring fields such as domain input, several header options, and a JSON payload, aimed at testing and automating API workflows.


3.3 Buat Relay Webhook

Buat inbound relay webhook 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"
  }
}

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.

Postman interface, showing the process of creating a relay webhook with detailed JSON configuration, with sections including request method, parameters, and code snippet.


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:

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.

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.

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.

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.

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.

Berita lainnya

Baca lebih lanjut dari kategori ini

A person is standing at a desk while typing on a laptop.

Platform AI-native lengkap yang berkembang bersama bisnis Anda.

© 2025 Bird

A person is standing at a desk while typing on a laptop.

Platform AI-native lengkap yang berkembang bersama bisnis Anda.

© 2025 Bird