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

Burung

1 Feb 2019

Email

1 min read

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

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:

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

      2. Solusi: Ajak pengguna untuk mengirim email yang ditandatangani; webhook masuk secara otomatis menganalisis dan menyimpan sertifikat PEM mereka.

      3. 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.

      4. Tindakan keamanan:

        • Verifikasi tanda tangan DKIM dan keaslian pesan.

        • Validasi rantai kepercayaan sertifikat sebelum menyimpannya.

        • Gunakan token otentikasi rahasia di header webhook.

      5. 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 (.crt files), 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!

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!

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.

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

Ini adalah tampilan keseluruhan solusi.

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

Ini adalah tampilan keseluruhan solusi.

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, jadi kami telah mengujinya sepenuhnya sebelum memasang webhook relay masuk.

Aplikasi web disertakan dalam proyek GitHub yang sama dengan bagian 1 – 3, jadi jika Anda telah mengikuti bagian-bagian tersebut, Anda sudah mempunyainya. Berikut adalah bagian baru:

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

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

  • webapp.ini – file konfigurasi untuk di atas. Sebuah file konfigurasi memungkinkan nilai yang sama mudah diteruskan ke aplikasi baris perintah dan web.

Anda perlu memastikan bahwa host Anda memiliki nomor port TCP yang benar terbuka untuk permintaan masuk dari dunia luar agar SparkPost dapat mengirim 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 – itu cukup mudah. Untuk memeriksa apakah aplikasi Anda berjalan dan dapat diakses dari dunia luar, Anda dapat mengirim permintaan (kosong) dari host lain menggunakan curl, misalnya:

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

Anda seharusnya melihat respons seperti:

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

Ini adalah hal yang baik – aplikasi Anda sedang berjalan!

Di webapp.log di host Anda, Anda akan melihat output 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 di aplikasi Anda segera, Anda dapat mengimpor Permintaan Postman tertentu ini dari repo proyek. Ini mensimulasikan apa yang akan dilakukan akun SparkPost Anda, yaitu mengirimkan POST https yang berisi email dengan sertifikat yang valid dan spesifik (milik akun uji saya) ke aplikasi Anda.

Anda hanya perlu mengubah alamat target di 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 webapp.log host Anda akan berisi output 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, cari baris terakhir – jika tertulis “file ditulis”, maka Anda sudah baik. Sisa dari ini menunjukkan proses pemeriksaan DKIM dan validasi sertifikat.

Kami akan mulai dengan bagian ini, jadi kami telah mengujinya sepenuhnya sebelum memasang webhook relay masuk.

Aplikasi web disertakan dalam proyek GitHub yang sama dengan bagian 1 – 3, jadi jika Anda telah mengikuti bagian-bagian tersebut, Anda sudah mempunyainya. Berikut adalah bagian baru:

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

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

  • webapp.ini – file konfigurasi untuk di atas. Sebuah file konfigurasi memungkinkan nilai yang sama mudah diteruskan ke aplikasi baris perintah dan web.

Anda perlu memastikan bahwa host Anda memiliki nomor port TCP yang benar terbuka untuk permintaan masuk dari dunia luar agar SparkPost dapat mengirim 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 – itu cukup mudah. Untuk memeriksa apakah aplikasi Anda berjalan dan dapat diakses dari dunia luar, Anda dapat mengirim permintaan (kosong) dari host lain menggunakan curl, misalnya:

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

Anda seharusnya melihat respons seperti:

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

Ini adalah hal yang baik – aplikasi Anda sedang berjalan!

Di webapp.log di host Anda, Anda akan melihat output 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 di aplikasi Anda segera, Anda dapat mengimpor Permintaan Postman tertentu ini dari repo proyek. Ini mensimulasikan apa yang akan dilakukan akun SparkPost Anda, yaitu mengirimkan POST https yang berisi email dengan sertifikat yang valid dan spesifik (milik akun uji saya) ke aplikasi Anda.

Anda hanya perlu mengubah alamat target di 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 webapp.log host Anda akan berisi output 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, cari baris terakhir – jika tertulis “file ditulis”, maka Anda sudah baik. Sisa dari ini menunjukkan proses pemeriksaan DKIM dan validasi sertifikat.

Kami akan mulai dengan bagian ini, jadi kami telah mengujinya sepenuhnya sebelum memasang webhook relay masuk.

Aplikasi web disertakan dalam proyek GitHub yang sama dengan bagian 1 – 3, jadi jika Anda telah mengikuti bagian-bagian tersebut, Anda sudah mempunyainya. Berikut adalah bagian baru:

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

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

  • webapp.ini – file konfigurasi untuk di atas. Sebuah file konfigurasi memungkinkan nilai yang sama mudah diteruskan ke aplikasi baris perintah dan web.

Anda perlu memastikan bahwa host Anda memiliki nomor port TCP yang benar terbuka untuk permintaan masuk dari dunia luar agar SparkPost dapat mengirim 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 – itu cukup mudah. Untuk memeriksa apakah aplikasi Anda berjalan dan dapat diakses dari dunia luar, Anda dapat mengirim permintaan (kosong) dari host lain menggunakan curl, misalnya:

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

Anda seharusnya melihat respons seperti:

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

Ini adalah hal yang baik – aplikasi Anda sedang berjalan!

Di webapp.log di host Anda, Anda akan melihat output 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 di aplikasi Anda segera, Anda dapat mengimpor Permintaan Postman tertentu ini dari repo proyek. Ini mensimulasikan apa yang akan dilakukan akun SparkPost Anda, yaitu mengirimkan POST https yang berisi email dengan sertifikat yang valid dan spesifik (milik akun uji saya) ke aplikasi Anda.

Anda hanya perlu mengubah alamat target di 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 webapp.log host Anda akan berisi output 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, cari baris terakhir – jika tertulis “file ditulis”, maka Anda sudah baik. Sisa dari ini menunjukkan proses pemeriksaan DKIM dan validasi sertifikat.

3. Pengaturan webhook relai masuk SparkPost

Pertama, kami memilih domain untuk digunakan sebagai alamat pesan masuk kami –  di sini, itu akan menjadi inbound.thetucks.com. Atur domain Anda mengikuti panduan ini. Berikut adalah langkah-langkah yang saya gunakan secara detail:

3.1 Tambah MX Records

Anda akan membutuhkan akses ke akun Penyedia Layanan Internet spesifik 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 Inbound

Gunakan kumpulan API Postman SparkPost, pilih panggilan Domain Inbound / Buat .. Kata. Isi dari 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 Webhook Relay

Buat webhook relay inbound menggunakan panggilan Postman yang relevan. Isi 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"
  }
}

Sesuai dengan yang disebutkan sebelumnya, saya sarankan menetapkan auth_token ke nilai rahasia Anda sendiri, seperti yang diatur di file webapp.ini di host Anda.

Nilai “target” Anda perlu cocok dengan alamat host Anda dan port TCP tempat Anda akan meng-host aplikasi web.

Nilai “domain” Anda perlu cocok dengan catatan MX yang ditetapkan di 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! Pipa sudah selesai. Anda sekarang seharusnya bisa 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 ke Bob, menggunakan alat yang dijelaskan di 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. Atur domain Anda mengikuti panduan ini. Berikut adalah langkah-langkah yang saya gunakan secara detail:

3.1 Tambah MX Records

Anda akan membutuhkan akses ke akun Penyedia Layanan Internet spesifik 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 Inbound

Gunakan kumpulan API Postman SparkPost, pilih panggilan Domain Inbound / Buat .. Kata. Isi dari 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 Webhook Relay

Buat webhook relay inbound menggunakan panggilan Postman yang relevan. Isi 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"
  }
}

Sesuai dengan yang disebutkan sebelumnya, saya sarankan menetapkan auth_token ke nilai rahasia Anda sendiri, seperti yang diatur di file webapp.ini di host Anda.

Nilai “target” Anda perlu cocok dengan alamat host Anda dan port TCP tempat Anda akan meng-host aplikasi web.

Nilai “domain” Anda perlu cocok dengan catatan MX yang ditetapkan di 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! Pipa sudah selesai. Anda sekarang seharusnya bisa 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 ke Bob, menggunakan alat yang dijelaskan di 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. Atur domain Anda mengikuti panduan ini. Berikut adalah langkah-langkah yang saya gunakan secara detail:

3.1 Tambah MX Records

Anda akan membutuhkan akses ke akun Penyedia Layanan Internet spesifik 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 Inbound

Gunakan kumpulan API Postman SparkPost, pilih panggilan Domain Inbound / Buat .. Kata. Isi dari 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 Webhook Relay

Buat webhook relay inbound menggunakan panggilan Postman yang relevan. Isi 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"
  }
}

Sesuai dengan yang disebutkan sebelumnya, saya sarankan menetapkan auth_token ke nilai rahasia Anda sendiri, seperti yang diatur di file webapp.ini di host Anda.

Nilai “target” Anda perlu cocok dengan alamat host Anda dan port TCP tempat Anda akan meng-host aplikasi web.

Nilai “domain” Anda perlu cocok dengan catatan MX yang ditetapkan di 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! Pipa sudah selesai. Anda sekarang seharusnya bisa 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 ke Bob, menggunakan alat yang dijelaskan di 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. 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.

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.

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.

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.

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.

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 dapat berkembang seiring dengan bisnis Anda.

© 2025 Burung

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

Platform AI-native lengkap yang dapat berkembang seiring dengan bisnis Anda.

© 2025 Burung