S/MIME Bagian 4: Mengumpulkan Kunci Publik Penerima dengan Cara Mudah - dengan Webhook Relai Inbound SparkPost

S/MIME Bagian 4: Mengumpulkan Kunci Publik Penerima dengan Cara Mudah - dengan Webhook Relai Inbound SparkPost

S/MIME Bagian 4: Mengumpulkan Kunci Publik Penerima dengan Cara Mudah - dengan Webhook Relai Inbound SparkPost

Feb 1, 2019

Diterbitkan oleh

Diterbitkan oleh

Bird

Bird

Kategori:

Kategori:

Email

Email

Ready to see Bird
in action?

Ready to see Bird
in action?

S/MIME Part 4: Collecting Recipient Public Keys the Easy Way – with SparkPost Inbound Relay Webhooks

In bagian 1, we had a quick tour of S/MIME, looking at signing and encryption of our message streams across a range of mail clients. Bagian 2 took us through a simple command-line tool to sign and encrypt emails, then send them through SparkPost. Part 3 showed how to inject secure mail streams into on-premises platforms such as Port25 PowerMTA and Momentum.

Dalam seri ini, kita telah melihat bagaimana menyertakan tanda tangan S/MIME cukup mudah. Mengirim email terenkripsi S/MIME lebih rumit karena Anda perlu mendapatkan kunci publik penerima. Ini adalah satu hal ketika Anda menggunakan klien email untuk manusia seperti Thunderbird - tetapi bagaimana cara kerjanya dengan aliran email yang dibuat oleh aplikasi?


Tetapi tunggu - ada cara lain untuk masuk ke Mordor untuk mendapatkan kunci-kunci itu. Layanan Anda bisa mengundang pelanggan Anda (tentu saja melalui email) untuk mengirimkan email yang sudah ditandatangani ke alamat layanan pelanggan yang diketahui. Dengan menggunakan kekuatan magis dari webhook SparkPost Inbound Relay, kami akan mengekstrak dan menyimpan kunci publik tersebut untuk Anda gunakan.


Kami dapat meringkas hal ini dalam sebuah kasus penggunaan yang sederhana:


  • Sebagai penerima pesan, saya memberikan tanda tangan email pribadi saya kepada layanan Anda melalui email, sehingga di masa mendatang, email dapat dikirimkan kepada saya dalam bentuk terenkripsi S/MIME.


Dari sini, mari kita tentukan beberapa persyaratan yang lebih rinci:


  • Kami membutuhkan layanan email masuk yang selalu aktif dan dapat diandalkan untuk menerima email yang ditandatangani.

  • Seharusnya tidak ada persyaratan khusus pada format email, selain harus menyertakan tanda tangan S/MIME.

  • Karena siapa pun bisa mencoba mengirim email ke layanan ini, layanan ini harus dirancang secara defensif, misalnya, untuk menolak pesan "palsu" dari pelaku kejahatan. Perlu ada beberapa lapisan pemeriksaan.

  • If everything checks out OK, the service will store the certificate in a file, using the well-known plain-text Privasi-Enhanced Mail (PEM) format.


Ada beberapa persyaratan non-fungsional:


  • Layanan webhook mesin-ke-mesin bisa jadi sulit untuk dilihat hanya dari respons terhadap apa yang terjadi di dalamnya. Layanan ini harus menyediakan log tingkat aplikasi yang dapat dibaca oleh manusia. Khususnya, penguraian dan pengecekan sertifikat harus dicatat.

  • We add test cases for the app internals, using the nice Pytest framework, and run those tests automatically on check-in using Travis CI integration with GitHub.


Oke - mari kita mulai!


1. Ikhtisar solusi

Berikut ini adalah solusi keseluruhannya.


2. Menginstal, mengonfigurasi, dan memulai aplikasi web

Kita akan mulai dengan bagian ini, jadi kita sudah mengujinya sepenuhnya sebelum memasang webhook relai masuk.


The web app is included in the same Proyek GitHub as parts 1 – 3, so if you’ve followed those parts, you already have it. Here are the new bits:


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

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

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


You need to ensure your host has the correct TCP port number open to inbound requests from the outside world so that SparkPost can POST messages to your app. If you’re hosted on AWS EC2, for example, you’ll need to configure the Grup Keamanan of your instance.


Instructions for configuring and starting the web app are given here – it’s quite easy. To check your app is running and accessible from the outside world, you can send (blank) requests from another host using curl, for example:

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

Anda akan melihat respons seperti:

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

Ini adalah hal yang baik - aplikasi Anda sudah berjalan!


Di webapp.log pada hos Anda, Anda akan melihat keluaran yang serupa 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,| Jenis Konten Tidak Dikenal: Tidak ada


To help you play with real data in your app straight away, you can import this specific Permintaan tukang pos from the project repo. This simulates what your SparkPost account will be doing, i.e. it sends an https POST containing an email with a specific, valid certificate (belonging to a test account of mine) to your app.


Anda hanya perlu mengubah alamat target pada permintaan (dalam 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" di Postman. File webapp.log hos 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 kewarasan yang cepat, cari baris terakhir - jika tertulis "file tertulis", maka Anda baik-baik saja. Selebihnya, ini menunjukkan pemeriksaan DKIM dan proses validasi sertifikat.


3. Penyiapan webhook relai masuk SparkPost

Firstly, we select a domain to use as our inbound message address –  here, it will be inbound.thetucks.com. Set your domain up following this guide. Here are the steps I used in detail:


3.1 Menambahkan Catatan MX

Anda memerlukan akses ke akun Penyedia Layanan Internet Anda. Setelah selesai, Anda bisa memeriksanya dengan dig - berikut perintah untuk domain saya.

dig +short MX inbound.thetucks.com

Anda harus melihat:

10 rx3.sparkpostmail.com. 10 rx1.sparkpostmail.com. 10 rx2.sparkpostmail.com.


3.2 Membuat Domain Masuk

Use the SparkPost Koleksi API tukang pos, selecting the Inbound Domains / Create .. call. The body of the POST request contains your domain, for example:

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


3.3 Membuat Relay Webhook

Buat webhook relai masuk 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" } }

As mentioned before, I recommend mengatur auth_token to your own secret value, as set in the webapp.ini file on your host.

Nilai "target" Anda harus sesuai dengan alamat host dan port TCP tempat Anda akan menghosting aplikasi web.

Nilai "domain" Anda harus sesuai dengan catatan MX yang Anda siapkan di langkah 1.



Itu dia! Pemipaan sudah selesai. Sekarang Anda seharusnya sudah dapat mengirim sertifikat ke alamat masuk Anda, sertifikat akan diproses dan muncul di hos aplikasi web Anda - dalam hal ini, file bernama bob.lumreeker@gmail.com.crt.

Now you can send encrypted emails to Bob, using the tools described in parts 2 & 3 of this series.

Anda dapat memeriksa isi sertifikat menggunakan:

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


4. Internal: Pemeriksaan DKIM, validasi sertifikat

The app checks received emails have valid DKIM and checks that the certificates themselves are valid, as described here. There are implementation notes in there too, and ideas for further work.


Kesimpulan...

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

Itu saja untuk saat ini! Selamat mengirim.

Your new standard in Marketing, Pay & Sales. It's Bird

The right message -> ke right person -> di right time.

By clicking "See Bird" you agree to Bird's Pemberitahuan Privasi.

Your new standard in Marketing, Pay & Sales. It's Bird

The right message -> ke right person -> di right time.

By clicking "See Bird" you agree to Bird's Pemberitahuan Privasi.