
Pada bagian 1, kami melakukan tur singkat tentang S/MIME, melihat penandatanganan dan enkripsi aliran pesan kami di berbagai klien email. Pesan S/MIME dapat ditandatangani (memberikan bukti identitas pengirim), dienkripsi (menjaga isi pesan tetap rahasia), atau keduanya.

Dalam edisi ini, kita akan:
Pasang beberapa alat command-line sederhana untuk menandatangani dan mengenkripsi email
Dapatkan kunci / sertifikat pengirim Anda untuk penandatanganan
Kirim pesan yang ditandatangani melalui SparkPost, dan lihat pesan yang diterima
Opsional, dapatkan sertifikat penerima Anda untuk enkripsi
Kirim pesan yang ditandatangani dan dienkripsi melalui SparkPost, dan lihat pesan yang diterima
Coba alat mandiri yang berguna "mimeshow" untuk melihat internal file email.
OK – mari kita mulai!
1. Instal alat
Alat demonstrasi ada di Github di sini, lengkap dengan petunjuk instalasi. Anda mungkin memperhatikan logo “build passing” – Travis dan pytest secara otomatis memeriksa status build. Perhatikan bahwa alat tersebut tidak didukung secara resmi oleh SparkPost, tetapi saya telah mencoba membuatnya tangguh dan mudah digunakan.
Jika Anda memiliki pengetahuan tentang Python dan pip, instalasi seharusnya terasa cukup familiar. Pipfile secara otomatis menangani ketergantungan eksternal untuk Anda. Setelah selesai, Anda dapat memeriksa apakah semuanya terinstal dengan menjalankan
./sparkpostSMIME.py -h
Anda harus melihat teks bantuan yang ramah. Selanjutnya, kita perlu…
2. Dapatkan kunci pengirim / sertifikat Anda untuk penandatanganan
3. Kirim pesan yang ditandatangani melalui SparkPost
Sekarang mari gunakan domain pengiriman nyata, atur sesuai dengan Panduan Pengguna Baru SparkPost. Kami memiliki sertifikat pengirim dan file kunci di direktori saat ini:
steve@thetucks.com.crt steve@thetucks.com.pem
File tests/declaration.eml disertakan dalam proyek. Ini hanya file teks, jadi Anda dapat menyesuaikan alamat From: sesuai dengan domain pengiriman Anda sendiri dan alamat To: sesuai dengan penerima uji Anda. Awal file terlihat seperti ini:
To: Bob <bob.lumreeker@gmail.com> From: Steve <steve@thetucks.com> Subject: Berikut adalah deklarasi kami MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Content-Language: en-GB Ketika dalam perjalanan peristiwa manusia menjadi perlu …
Atur kunci API Anda:
export SPARKPOST_API_KEY=<<Masukkan kunci API Anda di sini>>
Kirim email:
./sparkpostSMIME.py tests/declaration.eml --sign --send_api
Anda akan melihat:
Membuka koneksi ke https://api.sparkpost.com/api/v1 Mengirim tests/declaration.eml From: Steve <steve@thetucks.com> To: Bob <bob.lumreeker@gmail.com> OK - dalam 1,15 detik
Satu atau dua detik kemudian, email tiba di inbox Bob. Thunderbird menampilkannya dengan titik merah pada amplop, menunjukkan tanda tangan pengirim yang valid.

Sukses! Habiskan kopi itu, Anda pantas mendapatkannya. Jika Anda mengalami kesulitan, periksa alamat From: dalam file email anda sesuai dengan nama file .crt dan .pem Anda.
4. Mengenkripsi pesan
Untuk mengenkripsi pesan, Anda memerlukan kunci publik penerima Anda dalam bentuk sertifikat. Ini adalah file teks yang terlihat seperti ini:
Atribut Tas friendlyName: s COMODO CA Limited ID #2 localKeyID: 32 84 AB 9C 56 5C 80 C6 89 4D 40 46 DD D4 7C 71 E8 CD ED C1 subject=/emailAddress=bob.lumreeker@gmail.com issuer=/C=GB/ST=Greater Manchester/L=Salford/O=COMODO CA Limited/CN=COMODO RSA Client Authentication and Secure Email CA -----BEGIN CERTIFICATE----- terlihat seperti karakter acak di sini -----END CERTIFICATE-----
Ada sertifikat penerima dummy untuk bob@example.com di direktori tes, jadi Anda dapat berlatih dengannya sebelum Anda memiliki sertifikat nyata:
cd tests ../sparkpostSMIME.py example_email1.eml --sign --encrypt
Anda akan melihat:
Anda akan memperhatikan panjang output agak lebih lama daripada pesan terenkripsi karena membawa banyak informasi ekstra serta pesan yang teracak itu sendiri.
4.1 Mengirim pesan terenkripsi, ditandatangani melalui SparkPost
Mari kita kirim pesan terenkripsi ke alamat email nyata. Anda dapat mengikuti proses yang sama seperti sebelumnya (self-signed atau penyedia seperti Comodo) untuk mendapatkan kunci publik / sertifikat untuk alamat penerima Anda sendiri. Anda hanya memerlukan file .crt – penerima tidak perlu memberikan kunci privatnya (.p12 dan .pem files).
Saya memiliki file bob.lumreeker@gmail.com.crt untuk penerima yang dimaksud – cocok dengan alamat From: di file saya.
Berikut adalah perintah untuk mengirim:
./sparkpostSMIME.py tests/declaration.eml --sign --encrypt --send_api
Saya lihat:
Terbuka koneksi ke https://api.sparkpost.com/api/v1 Mengirim tests/declaration.eml From: Steve <steve@thetucks.com> To: Bob <bob.lumreeker@gmail.com> OK - dalam 1.168 detik
Surat muncul di Thunderbird dengan ikon tanda tangan “titik merah” dan ikon terenkripsi “gembok”.

Anda dapat mengirim email berbasis HTML yang kompleks dengan tautan dan gambar sama mudahnya, seperti yang ditunjukkan di Bagian 1. Beberapa klien seperti Thunderbird meminta izin untuk menampilkan tautan eksternal dan gambar dalam pesan S/MIME terenkripsi, tetapi pesan hanya ditandatangani ditampilkan dengan baik di klien termasuk Thunderbird dan Gmail:


Catat penurunan menunjukkan “Alamat email diverifikasi”.
Pikiran lebih lanjut & hal-hal yang perlu diperhatikan
Alat ini mengambil pendekatan yang sangat sederhana untuk mendapatkan kunci yang diperlukan – hanya mencari file bernama di direktori saat ini. Pengaturan yang lebih kompleks, seperti menyimpan semua kunci di database dapat dengan mudah ditambahkan, tetapi saya ingin kodenya sesederhana mungkin.
Anda dapat menyertakan penerima lain dengan Cc: dan Bcc: dan mereka akan dikirimkan; ini bisa berguna untuk tujuan arsip. Pesan yang ditandatangani diterima dan dapat ditampilkan oleh penerima lain lengkap dengan tanda tangan. Alat ini menghapus header Bcc: dari pesan yang diterima (seperti yang akan dilakukan oleh klien email desktop).
Untuk memastikan bahwa pesan melewati SparkPost tanpa berubah (yang dapat merusak penandatanganan), alat ini mengatur opsi API untuk pengiriman “transactional”, dengan pelacakan pembukaan dan klik dinonaktifkan.
Jika Anda menggunakan enkripsi, ingatlah bahwa alat ini mengambil satu alamat To: untuk itu. Penerima lain dapat mendekripsi isi pesan hanya jika mereka memiliki kunci pribadi penerima To:. Jika Anda hanya menggunakan penerima sekunder sebagai catatan pengiriman yang dilakukan, misalnya, itu mungkin tetap OK.
Ditandatangani, disegel, diantar... Aku milikmu
Itu adalah gambaran cepat kami tentang cara menandatangani, menyegel, dan mengirim pesan S/MIME melalui SparkPost. Pengingat cepat: proyek demo ada di Github di sini, saya telah mencoba membuatnya mudah untuk dipasang dan digunakan.
Fitur bonus: menampilkan bagian MIME dengan "mimeshow"
File RFC822 MIME multipart internal cukup kompleks untuk dibaca oleh manusia. Proyek ini mencakup alat mandiri untuk mempermudah ini, yang disebut mimeshow.
Ini mengambil file email apa pun yang Anda miliki (tidak hanya yang S/MIME) dan menunjukkan struktur internalnya. Berikut ini adalah contohnya:
./mimeshow.py testcases/img_and_attachment.eml
Anda akan melihat:
Anda juga dapat menggunakannya sebagai filter untuk memberikan ringkasan yang mudah dibaca manusia dari keluaran sparkpostSMIME:
./sparkpostSMIME.py tests/declaration.eml --sign --encrypt | ./mimeshow.py
Anda akan melihat:
Akhirnya...
Untuk merangkum – kami telah menginstal beberapa alat baris perintah sederhana untuk menandatangani dan mengenkripsi email (repositori Github ada di sini, lengkap dengan petunjuk pemasangan).
Kami mendapatkan kunci pengirim / sertifikat untuk penandatanganan, dan mengirimkan pesan yang ditandatangani melalui SparkPost. Kami mendapatkan sertifikat penerima untuk enkripsi, lalu mengirimkan pesan yang ditandatangani dan dienkripsi melalui SparkPost.
Terakhir, kami mencoba alat mandiri 'mimeshow' yang berguna untuk melihat internal file email.
Sampai di sini dulu! Sampai jumpa!