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

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?

Author

Burung

Kategori

Email

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

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?

Author

Burung

Kategori

Email

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

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?

Author

Burung

Kategori

Email

Dalam bagian 1, kami melakukan tur cepat tentang S/MIME, melihat proses penandatanganan dan enkripsi aliran pesan kami di berbagai klien email. Bagian 2 membawa kami melalui alat baris perintah sederhana untuk menandatangani dan mengenkripsi email, kemudian mengirimkannya melalui SparkPost. Bagian 3 menunjukkan cara menyuntikkan aliran email yang aman ke dalam platform on-premises seperti Port25 PowerMTA dan Momentum.

Dalam seri ini, kami telah melihat bagaimana memasukkan tanda tangan S/MIME itu cukup sederhana. Mengirim email yang terenkripsi S/MIME 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?


Tetapi tunggu - ada cara lain untuk mendapatkan kunci tersebut. Layanan Anda dapat mengundang pelanggan Anda (melalui email, tentu saja) untuk mengirimkan kembali email yang ditandatangani ke alamat layanan pelanggan yang dikenal. Menggunakan kekuatan ajaib dari webhook Relay Inbound SparkPost, kami akan mengekstrak dan menyimpan kunci publik itu untuk Anda gunakan.


Kami dapat merangkum ini dalam sebuah use-case 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 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 tentang format email, selain harus membawa tanda tangan S/MIME.

  • Karena siapa pun dapat mencoba mengirim email ke layanan ini, itu harus dirancang dengan defensif, misalnya, untuk menolak pesan "spoof" dari aktor jahat. Akan ada beberapa lapisan pemeriksaan yang diperlukan.

  • Jika semuanya sesuai, layanan akan menyimpan sertifikat dalam sebuah file, menggunakan format Privacy-Enhanced Mail (PEM) yang sudah dikenal sebagai plain-text.


Ada beberapa persyaratan non-fungsional:


  • Layanan webhook antara mesin bisa sulit terlihat hanya dari respons atas apa yang terjadi di dalam. Layanan harus memberikan log aplikasi tingkat manusia yang ekstensif. Khususnya, pemrosesan dan pemeriksaan sertifikat harus dicatat.

  • Kami menambahkan kasus uji untuk komponen aplikasi, menggunakan framework Pytest yang bagus, dan menjalankan pengujian tersebut secara otomatis saat pemeriksaan menggunakan integrasi Travis CI dengan GitHub.


Baiklah - mari kita mulai!


1. Gambaran solusi

Inilah tampilan keseluruhan solusi.


2. Memasang, mengonfigurasi, dan memulai aplikasi web

Kami akan memulai dengan bagian ini, sehingga kami memilikinya sepenuhnya diuji sebelum menyambungkan webhook relay masuk.


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


  • Program readSMIMEsig.py - membaca email dan menguraikan sertifikat pengguna dan sertifikat perantara.

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

  • webapp.ini - file konfigurasi untuk yang di atas. File konfigurasi memungkinkan nilai yang sama dilewatkan dengan mudah ke aplikasi baris perintah dan aplikasi web.


Anda perlu memastikan host Anda memiliki nomor port TCP yang benar terbuka untuk permintaan masuk dari dunia luar sehingga SparkPost dapat mengirim pesan POST 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 diberikan di sini - ini 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 berjalan!


Di webapp.log di host Anda, Anda akan melihat output serupa dengan ini:

2019-01-15 00:11:07,575,root,INFO,Permintaan dari 38.96.5.10,skema=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 spesifik ini dari repositori proyek. Ini mensimulasikan apa yang akan dilakukan akun SparkPost Anda, yaitu, mengirimkan POST https yang berisi email dengan sertifikat tertentu yang valid (milik akun uji coba 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 dalam webapp.ini, sesuaikan nilai header di Postman agar sesuai.


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

2019-01-15 00:11:48,554,root,INFO,Pemintaan dari 38.96.5.10,skema=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 berhasil 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,| Sertifikat: 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,| Sertifikat: 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,| file yang ditulis ./bob.lumreeker@gmail.com.crt,bytes=1870,ok=True


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


3. Pengaturan webhook relay 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 rinci:


3.1 Tambahkan Rekaman MX

Anda memerlukan akses ke akun Penyedia Layanan Internet khusus 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 koleksi API Postman SparkPost, memilih panggilan Domain Masuk / Buat... Dalam tubuh permintaan POST terdapat domain Anda, misalnya:

{    "domain": "inbound.thetucks.com" }


3.3 Buat Webhook Relay

Buat webhook relay masuk menggunakan panggilan Postman yang relevan. Tubuh pesan dalam kasus saya berisi:

{ "name": "Webhook Pengumpulan Sertifikat", "target": "https://app.trymsys.net:8855/", "auth_token": "t0p s3cr3t t0k3n", "match": { "protocol": "SMTP", "domain": "inbound.thetucks.com" } }

Seperti yang disebutkan sebelumnya, saya rekomendasikan mengatur 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 menghosting aplikasi web.

Nilai “domain” Anda perlu cocok dengan rekaman MX yang diatur pada langkah 1.



Itu saja! Pipaannya sudah selesai. Anda sekarang harus 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 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. Internals: pemeriksaan 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.


Merangkum…

Kami telah melihat bagaimana kunci publik penerima dapat dikumpulkan dengan mudah menggunakan email ke alamat webhook relay masuk. Setelah selesai, penerima tersebut dapat menerima pesan mereka dalam bentuk terenkripsi S/MIME.

Itu saja untuk sekarang! Selamat mengirim.

Sign up

Platform yang didukung AI untuk Pemasaran, Dukungan, dan Keuangan

Dengan mengklik "Dapatkan Demo" Anda setuju dengan Bird's

Sign up

Platform yang didukung AI untuk Pemasaran, Dukungan, dan Keuangan

Dengan mengklik "Dapatkan Demo" Anda setuju dengan Bird's

Sign up

Platform yang didukung AI untuk Pemasaran, Dukungan, dan Keuangan

Dengan mengklik "Dapatkan Demo" Anda setuju dengan Bird's

Channels

Grow

Engage

Automate

APIs

Resources

Company

Socials

Tumbuh

Kelola

Otomatisasi

Tumbuh

Kelola

Otomatisasi