
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.
Business in a box.
Temukan solusi kami.
Bicaralah kepada tim penjualan kami

Dalam angsuran ini, kita akan:
Memasang beberapa alat baris perintah sederhana untuk menandatangani dan mengenkripsi email
Mendapatkan kunci / sertifikat pengirim Anda untuk penandatanganan
Mengirim pesan yang telah ditandatangani melalui SparkPost, dan melihat pesan yang diterima
Opsional, mendapatkan sertifikat penerima Anda untuk enkripsi
Mengirim pesan yang telah ditandatangani dan dienkripsi melalui SparkPost, dan melihat pesan yang diterima
Mencoba alat mandiri yang berguna "mimeshow" untuk melihat internal file email.
OK – ayo kita mulai!
1. Instal alat
Alat demonstrasi ada di Github di sini, lengkap dengan instruksi pemasangan. Anda mungkin memperhatikan logo "build passing" – Travis dan pytest secara otomatis memeriksa status build. Perhatikan alat-alat ini tidak didukung secara resmi oleh SparkPost, tetapi saya telah mencoba membuatnya kuat dan mudah digunakan.
Jika Anda memiliki pengetahuan tentang Python dan pip, pemasangan seharusnya terasa cukup familiar. Pipfile mengurus ketergantungan eksternal secara otomatis untuk Anda. Setelah selesai, Anda dapat memeriksa semuanya terpasang 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 kita gunakan domain pengiriman nyata, yang diatur sesuai dengan Panduan Pengguna Baru SparkPost. Kami memiliki sertifikat dan file kunci pengirim di direktori saat ini:
steve@thetucks.com.crt steve@thetucks.com.pem
File tests/declaration.eml disertakan dalam proyek. Ini hanyalah file teks, jadi Anda bisa 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: Here is our declaration MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Content-Language: en-GB When in the Course of human events it becomes necessary …
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:
Tersambung 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
Sekitar 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 layak mendapatkannya. Jika Anda mengalami kesulitan, periksa apakah alamat From: di file email sesuai dengan nama file .crt dan .pem Anda.
4. Mengenkripsi pesan
Untuk mengenkripsi pesan, Anda memerlukan kunci publik penerima 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 palsu untuk bob@example.com di direktori pengujian, jadi Anda bisa berlatih dengan itu sebelum Anda benar-benar memiliki sertifikat:
cd tests ../sparkpostSMIME.py example_email1.eml --sign --encrypt
Anda akan melihat:
Kepada: Bob <bob@example.com> Dari: Alice <alice@example.com> Subjek: Sebuah pesan MIME-Version: 1.0 Content-Type: application/pkcs7-mime; smime-type=enveloped-data; name=smime.p7m Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=smime.p7m MIIRwQYJKoZIhvcNAQcDoIIRsjCCEa4CAQAxggKlMIICoQIBADCBijCBhDELMAkG :
Anda akan melihat bahwa panjang keluaran cukup lebih panjang daripada pesan terenkripsi karena membawa banyak informasi tambahan serta pesan yang diacak itu sendiri.
4.1 Mengirim pesan terenkripsi dan ditandatangani melalui SparkPost
Ayo kirim pesan terenkripsi ke alamat email nyata. Anda dapat mengikuti proses yang sama seperti sebelumnya (sertifikat buatan sendiri atau melalui penyedia seperti Comodo) untuk mendapatkan kunci publik / sertifikat untuk alamat penerima Anda. Anda hanya membutuhkan file .crt – penerima tidak perlu pernah memberikan kunci pribadi mereka (.p12 dan .pem file).
Saya memiliki file bob.lumreeker@gmail.com.crt untuk penerima yang dituju – sesuai dengan alamat Dari: dalam file saya.
Ini perintah untuk mengirim:
./sparkpostSMIME.py tests/declaration.eml --sign --encrypt --send_api
Saya melihat:
Tersedia koneksi ke https://api.sparkpost.com/api/v1 Mengirim tests/declaration.eml Dari: Steve <steve@thetucks.com> Ke: Bob <bob.lumreeker@gmail.com> OK - dalam 1.168 detik
Email 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 yang terenkripsi, tetapi pesan yang hanya ditandatangani dapat ditampilkan dengan baik di klien termasuk Thunderbird dan Gmail:


Perhatikan menu drop-down menunjukkan “Alamat email terverifikasi”.
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"
RFC822 MIME multipart file internals 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 (bukan hanya yang S/MIME) dan menunjukkan struktur internalnya. Berikut adalah contohnya:
./mimeshow.py testcases/img_and_attachment.eml
Anda akan melihat:
Kepada Bob <bob.lumreeker@gmail.com>
Dari Steve <steve@thetucks.com>
Subjek Pengujian lampiran dll
Versi-MIME 1.0
Jenis-Konten multipart/mixed; boundary="------------7D48652042860D0098C65210"
Bahasa-Konten en-GB
Jenis-Konten multipart/alternative; boundary="------------58C0BF87598336550D70EB95"
Jenis-Konten text/plain; charset=utf-8; format=flowed
Pengkodean Transfer-Konten 7bit
Pengkodean Transfer-Konten quoted-printable
Jenis-Konten text/html; charset="utf-8"
Jenis-Konten application/pdf; name="sparkpost-datasheet-tam-technical-account-management.pdf"
Pengkodean Transfer-Konten base64
Penempatan-Konten lampiran; filename="sparkpost-datasheet-tam-technical-account-management.pdf"
Anda juga dapat menggunakan sebagai filter untuk memberikan ringkasan output sparkpostSMIME yang mudah dibaca oleh manusia:
./sparkpostSMIME.py tests/declaration.eml --sign --encrypt | ./mimeshow.py
Anda akan melihat:
Kepada Bob <bob.lumreeker@gmail.com>
Dari Steve <steve@thetucks.com>
Subjek Inilah deklarasi kami
Bahasa-Konten en-GB
Versi-MIME 1.0
Jenis-Konten application/pkcs7-mime; smime-type=enveloped-data; name=smime.p7m
Pengkodean Transfer-Konten base64
Penempatan-Konten lampiran; filename=smime.p7m
Akhirnya...
Untuk merekap - kami telah menginstal beberapa alat baris perintah sederhana untuk menandatangani dan mengenkripsi email (repo Github ada di sini, lengkap dengan instruksi instalasi).
Kami mendapatkan kunci / sertifikat pengirim kami untuk menandatangani, dan mengirim pesan bertanda melalui SparkPost. Kami mendapatkan sertifikat penerima untuk enkripsi, kemudian mengirim pesan bertanda dan terenkripsi melalui SparkPost.
Terakhir, kami mencoba alat mandiri yang berguna “mimeshow” untuk melihat bagian internal file email.
Itu saja untuk sekarang! Sampai jumpa lagi!.