S/MIME Bagian 2: Ditandatangani, Disegel, dan Dikirim melalui SparkPost

Burung

31 Des 2018

Email

1 min read

S/MIME Bagian 2: Ditandatangani, Disegel, dan Dikirim melalui SparkPost

Poin Penting

    • Pernyataan: Bagian 2 bergerak dari teori S/MIME ke praktik — menunjukkan cara untuk menandatangani dan mengenkripsi email menggunakan SparkPost sebagai platform pengiriman.

    • Tujuan: Membekali pengembang dengan alur kerja ringan berbasis baris perintah untuk menandatangani pesan keluar, memverifikasi tanda tangan, dan (jika diinginkan) mengenkripsi konten untuk penerima tertentu.

    • Sorotan:

      1. Pemasangan: Instal alat demo sumber terbuka dari GitHub (dengan pemeriksaan otomatis Travis + pytest). Pipfile menangani semua ketergantungan Python.

      2. Kunci pengirim:

        • Buat sertifikat tanda tangan sendiri atau sertifikat yang diterbitkan CA (.p12) untuk identitas email Anda.

        • Pisahkan menjadi file pribadi (.pem) dan publik (.crt) untuk digunakan oleh alat penandatangan.

      3. Penyandian:

        • Gunakan skrip sparkpostSMIME.py yang disertakan untuk menandatangani pesan uji (misalnya, tests/declaration.eml).

        • Konfirmasi tanda tangan secara visual di klien seperti Thunderbird (ikon titik merah).

      4. Pengenkripsian:

        • Dapatkan sertifikat publik masing-masing penerima (.crt).

        • Jalankan alat lagi untuk menghasilkan pesan yang ditandatangani + dienkripsi.

        • Penerima dapat memverifikasi dan mendekripsi menggunakan kunci pribadi mereka.

      5. Pengiriman melalui SparkPost:

        • Konfigurasikan domain pengiriman yang valid dan kunci API.

        • Kirim pesan melalui API SparkPost dengan pelacakan dinonaktifkan untuk menjaga integritas.

      6. Utilitas bonus – mimeshow:

        • Menampilkan struktur MIME RFC822 yang dapat dibaca manusia untuk debugging atau inspeksi.

      7. Tips praktis:

        • Jaga nama file agar sesuai dengan alamat Dari:.

        • Hindari mengubah isi pesan setelah tanda tangan.

        • Gunakan Bcc hanya untuk salinan arsip — penerima tersebut tidak dapat mendekripsi jika email dienkripsi untuk satu alamat To.

Sorotan Tanya jawab

  • Mengapa menggunakan tanda tangan S/MIME?

    Ini mengautentikasi pengirim dan memastikan integritas pesan — klien seperti Thunderbird menampilkan indikator visual ketika tanda tangan valid.

  • Bagaimana cara mendapatkan sertifikat pengirim saya?

    Baik tanda tangan sendiri menggunakan OpenSSL (untuk pengujian) atau mendapatkan sertifikat terpercaya dari penyedia seperti Comodo (gratis untuk penggunaan non-komersial).

  • Bisakah saya mengenkripsi pesan untuk beberapa penerima?

    Hanya jika Anda memiliki kunci publik setiap penerima. Skrip demo mengenkripsi ke alamat To tunggal secara default.

  • Apa saja langkah pengamanan yang menjaga tanda tangan agar tidak rusak selama proses pengiriman?

    Alat ini mengatur opsi API SparkPost untuk pengiriman transaksional dan menonaktifkan pelacakan buka/klik, sehingga beban data tetap tidak berubah.

  • Apa peran mimeshow?

    Ini menganalisis file email mentah dan mencetak struktur multipart-nya — berguna untuk memeriksa tanda tangan S/MIME, lampiran, dan header.

  • Apa yang selanjutnya dalam seri ini?

    Bagian 3 memperluas kemampuan S/MIME ini ke platform email aman di lokasi seperti PowerMTA dan Momentum.

Pada bagian 1, kami melakukan tur singkat tentang S/MIME, melihat tanda tangan 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.

Diagram illustrating email security layers showing the relationship between S/MIME signing, S/MIME encryption, and TLS connections in the email delivery process from message source through email server to recipient.

Dalam seri ini, kita akan:

  • Menginstal beberapa alat baris perintah sederhana untuk menandatangani dan mengenkripsi email

  • Mendapatkan kunci / sertifikat pengirim Anda untuk menandatangani

  • Mengirim pesan yang ditandatangani melalui SparkPost, dan melihat pesan yang diterima

  • Opsional, mendapatkan sertifikat penerima Anda untuk enkripsi

  • Mengirim pesan yang ditandatangani dan dienkripsi melalui SparkPost, dan melihat pesan yang diterima

  • Mencoba alat mandiri yang berguna “mimeshow” untuk melihat detail internal file email.

OK – mari kita mulai!

Diagram illustrating email security layers showing the relationship between S/MIME signing, S/MIME encryption, and TLS connections in the email delivery process from message source through email server to recipient.

Dalam seri ini, kita akan:

  • Menginstal beberapa alat baris perintah sederhana untuk menandatangani dan mengenkripsi email

  • Mendapatkan kunci / sertifikat pengirim Anda untuk menandatangani

  • Mengirim pesan yang ditandatangani melalui SparkPost, dan melihat pesan yang diterima

  • Opsional, mendapatkan sertifikat penerima Anda untuk enkripsi

  • Mengirim pesan yang ditandatangani dan dienkripsi melalui SparkPost, dan melihat pesan yang diterima

  • Mencoba alat mandiri yang berguna “mimeshow” untuk melihat detail internal file email.

OK – mari kita mulai!

Diagram illustrating email security layers showing the relationship between S/MIME signing, S/MIME encryption, and TLS connections in the email delivery process from message source through email server to recipient.

Dalam seri ini, kita akan:

  • Menginstal beberapa alat baris perintah sederhana untuk menandatangani dan mengenkripsi email

  • Mendapatkan kunci / sertifikat pengirim Anda untuk menandatangani

  • Mengirim pesan yang ditandatangani melalui SparkPost, dan melihat pesan yang diterima

  • Opsional, mendapatkan sertifikat penerima Anda untuk enkripsi

  • Mengirim pesan yang ditandatangani dan dienkripsi melalui SparkPost, dan melihat pesan yang diterima

  • Mencoba alat mandiri yang berguna “mimeshow” untuk melihat detail internal file email.

OK – mari kita mulai!

Fitur bonus: menampilkan bagian MIME dengan “mimeshow”

Bagian dalam file multipart MIME RFC822 cukup kompleks untuk dibaca oleh manusia. Proyek ini mencakup alat mandiri untuk memudahkan proses ini, yang disebut mimeshow.

Ini mengambil file email apa pun yang Anda miliki (tidak hanya yang S/MIME) dan menunjukkan struktur internalnya. Berikut adalah contoh:

./mimeshow.py testcases/img_and_attachment.eml

Anda akan melihat:

To Bob <bob.lumreeker@gmail.com>
From Steve <steve@thetucks.com> 
Subject Testing attachments etc 
MIME-Version 1.0
Content-Type multipart/mixed; boundary="------------7D48652042860D0098C65210"
Content-Language en-GB
Content-Type multipart/alternative; boundary="------------58C0BF87598336550D70EB95" 
Content-Type text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding 7bit
Content-Transfer-Encoding quoted-printable 
Content-Type text/html; charset="utf-8"
Content-Type application/pdf; name="sparkpost-datasheet-tam-technical-account-management.pdf" 
Content-Transfer-Encoding base64
Content-Disposition attachment; filename="sparkpost-datasheet-tam-technical-account-management.pdf"

Anda juga dapat menggunakan sebagai penyaring untuk memberikan ringkasan yang dapat dibaca manusia dari output sparkpostSMIME :

./sparkpostSMIME.py tests/declaration.eml --sign --encrypt | ./mimeshow.py


Anda akan melihat:

To Bob <bob.lumreeker@gmail.com>  
From Steve <steve@thetucks.com>
Subject Here is our declaration 
Content-Language en-GB
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

Bagian dalam file multipart MIME RFC822 cukup kompleks untuk dibaca oleh manusia. Proyek ini mencakup alat mandiri untuk memudahkan proses ini, yang disebut mimeshow.

Ini mengambil file email apa pun yang Anda miliki (tidak hanya yang S/MIME) dan menunjukkan struktur internalnya. Berikut adalah contoh:

./mimeshow.py testcases/img_and_attachment.eml

Anda akan melihat:

To Bob <bob.lumreeker@gmail.com>
From Steve <steve@thetucks.com> 
Subject Testing attachments etc 
MIME-Version 1.0
Content-Type multipart/mixed; boundary="------------7D48652042860D0098C65210"
Content-Language en-GB
Content-Type multipart/alternative; boundary="------------58C0BF87598336550D70EB95" 
Content-Type text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding 7bit
Content-Transfer-Encoding quoted-printable 
Content-Type text/html; charset="utf-8"
Content-Type application/pdf; name="sparkpost-datasheet-tam-technical-account-management.pdf" 
Content-Transfer-Encoding base64
Content-Disposition attachment; filename="sparkpost-datasheet-tam-technical-account-management.pdf"

Anda juga dapat menggunakan sebagai penyaring untuk memberikan ringkasan yang dapat dibaca manusia dari output sparkpostSMIME :

./sparkpostSMIME.py tests/declaration.eml --sign --encrypt | ./mimeshow.py


Anda akan melihat:

To Bob <bob.lumreeker@gmail.com>  
From Steve <steve@thetucks.com>
Subject Here is our declaration 
Content-Language en-GB
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

Bagian dalam file multipart MIME RFC822 cukup kompleks untuk dibaca oleh manusia. Proyek ini mencakup alat mandiri untuk memudahkan proses ini, yang disebut mimeshow.

Ini mengambil file email apa pun yang Anda miliki (tidak hanya yang S/MIME) dan menunjukkan struktur internalnya. Berikut adalah contoh:

./mimeshow.py testcases/img_and_attachment.eml

Anda akan melihat:

To Bob <bob.lumreeker@gmail.com>
From Steve <steve@thetucks.com> 
Subject Testing attachments etc 
MIME-Version 1.0
Content-Type multipart/mixed; boundary="------------7D48652042860D0098C65210"
Content-Language en-GB
Content-Type multipart/alternative; boundary="------------58C0BF87598336550D70EB95" 
Content-Type text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding 7bit
Content-Transfer-Encoding quoted-printable 
Content-Type text/html; charset="utf-8"
Content-Type application/pdf; name="sparkpost-datasheet-tam-technical-account-management.pdf" 
Content-Transfer-Encoding base64
Content-Disposition attachment; filename="sparkpost-datasheet-tam-technical-account-management.pdf"

Anda juga dapat menggunakan sebagai penyaring untuk memberikan ringkasan yang dapat dibaca manusia dari output sparkpostSMIME :

./sparkpostSMIME.py tests/declaration.eml --sign --encrypt | ./mimeshow.py


Anda akan melihat:

To Bob <bob.lumreeker@gmail.com>  
From Steve <steve@thetucks.com>
Subject Here is our declaration 
Content-Language en-GB
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

1. Pasang alatnya

Alat demonstrasi tersedia di GitHub, lengkap dengan petunjuk instalasi. Anda mungkin melihat logo “build passing” – Travis dan pytest secara otomatis memeriksa status build. Perhatikan bahwa alat-alat ini tidak didukung secara resmi oleh SparkPost, tetapi saya telah berusaha membuatnya kuat dan mudah digunakan.

Jika Anda memiliki sedikit pengetahuan tentang Python dan pip, instalasi harus terasa cukup akrab. Pipfile secara otomatis menangani ketergantungan eksternal untuk Anda. Setelah selesai, Anda bisa memeriksa semua instalasi dengan menjalankan

./sparkpostSMIME.py -h

Anda harus melihat teks bantuan yang ramah. Selanjutnya, kita perlu…

Alat demonstrasi tersedia di GitHub, lengkap dengan petunjuk instalasi. Anda mungkin melihat logo “build passing” – Travis dan pytest secara otomatis memeriksa status build. Perhatikan bahwa alat-alat ini tidak didukung secara resmi oleh SparkPost, tetapi saya telah berusaha membuatnya kuat dan mudah digunakan.

Jika Anda memiliki sedikit pengetahuan tentang Python dan pip, instalasi harus terasa cukup akrab. Pipfile secara otomatis menangani ketergantungan eksternal untuk Anda. Setelah selesai, Anda bisa memeriksa semua instalasi dengan menjalankan

./sparkpostSMIME.py -h

Anda harus melihat teks bantuan yang ramah. Selanjutnya, kita perlu…

Alat demonstrasi tersedia di GitHub, lengkap dengan petunjuk instalasi. Anda mungkin melihat logo “build passing” – Travis dan pytest secara otomatis memeriksa status build. Perhatikan bahwa alat-alat ini tidak didukung secara resmi oleh SparkPost, tetapi saya telah berusaha membuatnya kuat dan mudah digunakan.

Jika Anda memiliki sedikit pengetahuan tentang Python dan pip, instalasi harus terasa cukup akrab. Pipfile secara otomatis menangani ketergantungan eksternal untuk Anda. Setelah selesai, Anda bisa memeriksa semua instalasi dengan menjalankan

./sparkpostSMIME.py -h

Anda harus melihat teks bantuan yang ramah. Selanjutnya, kita perlu…

2. Dapatkan kunci pengirim / sertifikat Anda untuk menandatangani

Jika Anda sudah memiliki file kunci untuk identitas pengiriman Anda, Anda dapat langsung melanjutkan. Jika tidak, berikut adalah dua opsi yang dapat dipilih:

a) Kunci / sertifikat uji yang ditandatangani sendiri (tidak valid secara eksternal)

Jika Anda hanya sedang menguji, Anda dapat membuat sertifikat dan kunci "ditandatangani sendiri" untuk alamat email menggunakan alat baris perintah openssl di Linux, mengikuti prosedur seperti yang ini. Di akhir proses tersebut, Anda akan memiliki file smime.p12. Ubah nama file ini agar sesuai dengan identitas pengiriman Anda, termasuk tanda @, misalnya, alice@example.com.p12.

atau

b) Kunci / sertifikat yang valid secara eksternal

Jika Anda ingin mendapatkan kunci / sertifikat yang valid secara eksternal yang memungkinkan Anda untuk menandatangani, ada daftar penyedia di sini. Saya menemukan Comodo bekerja dengan baik (gratis untuk penggunaan non-komersial), dan itu lebih mudah daripada prosedur tanda tangan sendiri di atas. Ikuti proses pendaftaran, terima email konfirmasi Anda, dan pastikan untuk membuka tautan di Firefox. Buka Preferensi Firefox / Privasi dan Keamanan. Gulir ke Sertifikat / Lihat Sertifikat:

Firefox browser settings page showing certificate management options under the Privacy & Security section, with controls for how the browser handles personal certificate requests.


Pilih sertifikat Anda, dan gunakan opsi “Cadangkan” untuk menyimpan sebagai file dalam format PKCS12 (tambahkan ekstensi file .p12 ke nama file Anda) yang membawa kunci privat dan rantai sertifikat publik.

Certificate Manager window showing a list of software security device certificates from COMODO CA Limited, with details including certificate names and serial numbers


Berikan kata sandi untuk mengamankan file .p12:

Certificate backup password entry dialog with password fields and strength meter


Hasilkan file kunci publik (.crt) dan privat (.pem) terpisah

Apakah Anda menggunakan a) atau b), Anda sekarang akan memiliki file .p12 untuk identitas pengirim Anda. Itu adalah langkah besar ke depan – ambil secangkir kopi sekarang!

Sekarang kita perlu menghasilkan file kunci publik dan privat terpisah seperti ini – mengganti alamat email Anda sendiri untuk yang dicontohkan. (Mac OSX dan Linux):

openssl pkcs12 -in alice\@example.com.p12 -clcerts -nokeys -out alice\@example.com.crt openssl pkcs12 -in alice\@example.com.p12 -nocerts -nodes -out alice\@example.com.pem

Anda perlu memasukkan kata sandi yang Anda berikan sebelumnya. Perhatikan bahwa backslash \ digunakan untuk meloloskan tanda @ – bukan memisahkan nama jalur direktori (itu adalah garis miring maju / di Mac OSX dan Linux).

Jika Anda menggunakan Windows, ada implementasi openssl yang tersedia seperti yang dibangun menjadi alat Git command-line MINGW64, tetapi saya menemukan itu cenderung macet. Anda mungkin akan merasa lebih mudah dan lebih cepat untuk melakukan ini di Linux dan kemudian menyalin file Anda. Alat Git yang sama untuk Windows dilengkapi dengan klien ssh yang bagus yang dapat Anda gunakan untuk masuk ke kotak Linux, seperti sebuah instans Amazon EC2.


2.1 Menandatangani pesan

Sudah ada kunci/sertifikat dan file sumber email dummy di direktori uji untuk alice@example.com, jadi Anda dapat mendapatkan beberapa output bahkan sebelum Anda memiliki kunci Anda sendiri. Cukup ketik yang berikut:

cd tests ../sparkpostSMIME.py example_email1.eml --sign

Dan Anda akan mendapatkan:

To: Bob <bob@example.com> 
From: Alice <alice@example.com> 
Subject: A message MIME-Version: 1.0 
Content-Type: application/x-pkcs7-mime; smime-type=signed-data; name="smime.p7m" 
Content-Transfer-Encoding: base64 
Content-Disposition: attachment; filename="smime.p7m" MIIKXAYJKoZIhvcNAQcCoIIKTTCCCkkCAQExDzANBglghkgBZQMEAgEFADCCAQoGCSqGSIb3DQEH AaCB/ASB+VRvOiBCb2IgPGJvYkBleGFtcGxlLmNvbT4NCkZyb206IEFsaWNlIDxhbGljZUBleGFt : :

Anda tidak dapat benar-benar mengirim email dari example.com via SparkPost kecuali Anda memiliki domain tersebut, jadi langkah berikutnya adalah menggunakan kunci Anda sendiri dan mengirim pesan yang ditandatangani dari domain Anda sendiri.

Jika Anda sudah memiliki file kunci untuk identitas pengiriman Anda, Anda dapat langsung melanjutkan. Jika tidak, berikut adalah dua opsi yang dapat dipilih:

a) Kunci / sertifikat uji yang ditandatangani sendiri (tidak valid secara eksternal)

Jika Anda hanya sedang menguji, Anda dapat membuat sertifikat dan kunci "ditandatangani sendiri" untuk alamat email menggunakan alat baris perintah openssl di Linux, mengikuti prosedur seperti yang ini. Di akhir proses tersebut, Anda akan memiliki file smime.p12. Ubah nama file ini agar sesuai dengan identitas pengiriman Anda, termasuk tanda @, misalnya, alice@example.com.p12.

atau

b) Kunci / sertifikat yang valid secara eksternal

Jika Anda ingin mendapatkan kunci / sertifikat yang valid secara eksternal yang memungkinkan Anda untuk menandatangani, ada daftar penyedia di sini. Saya menemukan Comodo bekerja dengan baik (gratis untuk penggunaan non-komersial), dan itu lebih mudah daripada prosedur tanda tangan sendiri di atas. Ikuti proses pendaftaran, terima email konfirmasi Anda, dan pastikan untuk membuka tautan di Firefox. Buka Preferensi Firefox / Privasi dan Keamanan. Gulir ke Sertifikat / Lihat Sertifikat:

Firefox browser settings page showing certificate management options under the Privacy & Security section, with controls for how the browser handles personal certificate requests.


Pilih sertifikat Anda, dan gunakan opsi “Cadangkan” untuk menyimpan sebagai file dalam format PKCS12 (tambahkan ekstensi file .p12 ke nama file Anda) yang membawa kunci privat dan rantai sertifikat publik.

Certificate Manager window showing a list of software security device certificates from COMODO CA Limited, with details including certificate names and serial numbers


Berikan kata sandi untuk mengamankan file .p12:

Certificate backup password entry dialog with password fields and strength meter


Hasilkan file kunci publik (.crt) dan privat (.pem) terpisah

Apakah Anda menggunakan a) atau b), Anda sekarang akan memiliki file .p12 untuk identitas pengirim Anda. Itu adalah langkah besar ke depan – ambil secangkir kopi sekarang!

Sekarang kita perlu menghasilkan file kunci publik dan privat terpisah seperti ini – mengganti alamat email Anda sendiri untuk yang dicontohkan. (Mac OSX dan Linux):

openssl pkcs12 -in alice\@example.com.p12 -clcerts -nokeys -out alice\@example.com.crt openssl pkcs12 -in alice\@example.com.p12 -nocerts -nodes -out alice\@example.com.pem

Anda perlu memasukkan kata sandi yang Anda berikan sebelumnya. Perhatikan bahwa backslash \ digunakan untuk meloloskan tanda @ – bukan memisahkan nama jalur direktori (itu adalah garis miring maju / di Mac OSX dan Linux).

Jika Anda menggunakan Windows, ada implementasi openssl yang tersedia seperti yang dibangun menjadi alat Git command-line MINGW64, tetapi saya menemukan itu cenderung macet. Anda mungkin akan merasa lebih mudah dan lebih cepat untuk melakukan ini di Linux dan kemudian menyalin file Anda. Alat Git yang sama untuk Windows dilengkapi dengan klien ssh yang bagus yang dapat Anda gunakan untuk masuk ke kotak Linux, seperti sebuah instans Amazon EC2.


2.1 Menandatangani pesan

Sudah ada kunci/sertifikat dan file sumber email dummy di direktori uji untuk alice@example.com, jadi Anda dapat mendapatkan beberapa output bahkan sebelum Anda memiliki kunci Anda sendiri. Cukup ketik yang berikut:

cd tests ../sparkpostSMIME.py example_email1.eml --sign

Dan Anda akan mendapatkan:

To: Bob <bob@example.com> 
From: Alice <alice@example.com> 
Subject: A message MIME-Version: 1.0 
Content-Type: application/x-pkcs7-mime; smime-type=signed-data; name="smime.p7m" 
Content-Transfer-Encoding: base64 
Content-Disposition: attachment; filename="smime.p7m" MIIKXAYJKoZIhvcNAQcCoIIKTTCCCkkCAQExDzANBglghkgBZQMEAgEFADCCAQoGCSqGSIb3DQEH AaCB/ASB+VRvOiBCb2IgPGJvYkBleGFtcGxlLmNvbT4NCkZyb206IEFsaWNlIDxhbGljZUBleGFt : :

Anda tidak dapat benar-benar mengirim email dari example.com via SparkPost kecuali Anda memiliki domain tersebut, jadi langkah berikutnya adalah menggunakan kunci Anda sendiri dan mengirim pesan yang ditandatangani dari domain Anda sendiri.

Jika Anda sudah memiliki file kunci untuk identitas pengiriman Anda, Anda dapat langsung melanjutkan. Jika tidak, berikut adalah dua opsi yang dapat dipilih:

a) Kunci / sertifikat uji yang ditandatangani sendiri (tidak valid secara eksternal)

Jika Anda hanya sedang menguji, Anda dapat membuat sertifikat dan kunci "ditandatangani sendiri" untuk alamat email menggunakan alat baris perintah openssl di Linux, mengikuti prosedur seperti yang ini. Di akhir proses tersebut, Anda akan memiliki file smime.p12. Ubah nama file ini agar sesuai dengan identitas pengiriman Anda, termasuk tanda @, misalnya, alice@example.com.p12.

atau

b) Kunci / sertifikat yang valid secara eksternal

Jika Anda ingin mendapatkan kunci / sertifikat yang valid secara eksternal yang memungkinkan Anda untuk menandatangani, ada daftar penyedia di sini. Saya menemukan Comodo bekerja dengan baik (gratis untuk penggunaan non-komersial), dan itu lebih mudah daripada prosedur tanda tangan sendiri di atas. Ikuti proses pendaftaran, terima email konfirmasi Anda, dan pastikan untuk membuka tautan di Firefox. Buka Preferensi Firefox / Privasi dan Keamanan. Gulir ke Sertifikat / Lihat Sertifikat:

Firefox browser settings page showing certificate management options under the Privacy & Security section, with controls for how the browser handles personal certificate requests.


Pilih sertifikat Anda, dan gunakan opsi “Cadangkan” untuk menyimpan sebagai file dalam format PKCS12 (tambahkan ekstensi file .p12 ke nama file Anda) yang membawa kunci privat dan rantai sertifikat publik.

Certificate Manager window showing a list of software security device certificates from COMODO CA Limited, with details including certificate names and serial numbers


Berikan kata sandi untuk mengamankan file .p12:

Certificate backup password entry dialog with password fields and strength meter


Hasilkan file kunci publik (.crt) dan privat (.pem) terpisah

Apakah Anda menggunakan a) atau b), Anda sekarang akan memiliki file .p12 untuk identitas pengirim Anda. Itu adalah langkah besar ke depan – ambil secangkir kopi sekarang!

Sekarang kita perlu menghasilkan file kunci publik dan privat terpisah seperti ini – mengganti alamat email Anda sendiri untuk yang dicontohkan. (Mac OSX dan Linux):

openssl pkcs12 -in alice\@example.com.p12 -clcerts -nokeys -out alice\@example.com.crt openssl pkcs12 -in alice\@example.com.p12 -nocerts -nodes -out alice\@example.com.pem

Anda perlu memasukkan kata sandi yang Anda berikan sebelumnya. Perhatikan bahwa backslash \ digunakan untuk meloloskan tanda @ – bukan memisahkan nama jalur direktori (itu adalah garis miring maju / di Mac OSX dan Linux).

Jika Anda menggunakan Windows, ada implementasi openssl yang tersedia seperti yang dibangun menjadi alat Git command-line MINGW64, tetapi saya menemukan itu cenderung macet. Anda mungkin akan merasa lebih mudah dan lebih cepat untuk melakukan ini di Linux dan kemudian menyalin file Anda. Alat Git yang sama untuk Windows dilengkapi dengan klien ssh yang bagus yang dapat Anda gunakan untuk masuk ke kotak Linux, seperti sebuah instans Amazon EC2.


2.1 Menandatangani pesan

Sudah ada kunci/sertifikat dan file sumber email dummy di direktori uji untuk alice@example.com, jadi Anda dapat mendapatkan beberapa output bahkan sebelum Anda memiliki kunci Anda sendiri. Cukup ketik yang berikut:

cd tests ../sparkpostSMIME.py example_email1.eml --sign

Dan Anda akan mendapatkan:

To: Bob <bob@example.com> 
From: Alice <alice@example.com> 
Subject: A message MIME-Version: 1.0 
Content-Type: application/x-pkcs7-mime; smime-type=signed-data; name="smime.p7m" 
Content-Transfer-Encoding: base64 
Content-Disposition: attachment; filename="smime.p7m" MIIKXAYJKoZIhvcNAQcCoIIKTTCCCkkCAQExDzANBglghkgBZQMEAgEFADCCAQoGCSqGSIb3DQEH AaCB/ASB+VRvOiBCb2IgPGJvYkBleGFtcGxlLmNvbT4NCkZyb206IEFsaWNlIDxhbGljZUBleGFt : :

Anda tidak dapat benar-benar mengirim email dari example.com via SparkPost kecuali Anda memiliki domain tersebut, jadi langkah berikutnya adalah menggunakan kunci Anda sendiri dan mengirim pesan yang ditandatangani dari domain Anda sendiri.

3. Kirim pesan yang ditandatangani melalui SparkPost

Sekarang mari kita gunakan domain pengiriman yang nyata, disiapkan 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 bisa menyesuaikan alamat From: untuk sesuai dengan domain pengiriman Anda sendiri dan alamat To: untuk sesuai dengan penerima tes 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 Kursus peristiwa manusia menjadi perlu …

Atur kunci API Anda:

export SPARKPOST_API_KEY=<<Put your API key here>

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 Dari: Steve <steve@thetucks.com> Ke: Bob  <bob.lumreeker@gmail.com> OK - dalam 1,15 detik

Beberapa detik setelahnya, email tiba di kotak masuk Bob. Thunderbird menampilkannya dengan titik merah di amplop, menunjukkan tanda tangan pengirim yang valid.

Thunderbird email inbox showing an email with a subject 'Here is our declaration'

Sukses! Selesaikan kopi itu, Anda telah berhak mendapatkannya. Jika Anda mengalami masalah, periksa alamat From: Anda di file email yang cocok dengan nama file .crt dan .pem Anda.

Sekarang mari kita gunakan domain pengiriman yang nyata, disiapkan 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 bisa menyesuaikan alamat From: untuk sesuai dengan domain pengiriman Anda sendiri dan alamat To: untuk sesuai dengan penerima tes 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 Kursus peristiwa manusia menjadi perlu …

Atur kunci API Anda:

export SPARKPOST_API_KEY=<<Put your API key here>

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 Dari: Steve <steve@thetucks.com> Ke: Bob  <bob.lumreeker@gmail.com> OK - dalam 1,15 detik

Beberapa detik setelahnya, email tiba di kotak masuk Bob. Thunderbird menampilkannya dengan titik merah di amplop, menunjukkan tanda tangan pengirim yang valid.

Thunderbird email inbox showing an email with a subject 'Here is our declaration'

Sukses! Selesaikan kopi itu, Anda telah berhak mendapatkannya. Jika Anda mengalami masalah, periksa alamat From: Anda di file email yang cocok dengan nama file .crt dan .pem Anda.

Sekarang mari kita gunakan domain pengiriman yang nyata, disiapkan 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 bisa menyesuaikan alamat From: untuk sesuai dengan domain pengiriman Anda sendiri dan alamat To: untuk sesuai dengan penerima tes 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 Kursus peristiwa manusia menjadi perlu …

Atur kunci API Anda:

export SPARKPOST_API_KEY=<<Put your API key here>

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 Dari: Steve <steve@thetucks.com> Ke: Bob  <bob.lumreeker@gmail.com> OK - dalam 1,15 detik

Beberapa detik setelahnya, email tiba di kotak masuk Bob. Thunderbird menampilkannya dengan titik merah di amplop, menunjukkan tanda tangan pengirim yang valid.

Thunderbird email inbox showing an email with a subject 'Here is our declaration'

Sukses! Selesaikan kopi itu, Anda telah berhak mendapatkannya. Jika Anda mengalami masalah, periksa alamat From: Anda di file email yang cocok 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 Bag   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 yang nyata:

cd tests ../sparkpostSMIME.py example_email1.eml --sign --encrypt

Anda akan melihat:

To: Bob <bob@example.com>
From: Alice <alice@example.com> 
Subject: A message 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 memperhatikan bahwa panjang output cukup lebih panjang dibandingkan dengan pesan terencrypted karena membawa banyak informasi tambahan serta pesan yang diacak itu sendiri.


4.1 Mengirim pesan terenkripsi dan ditandatangani melalui SparkPost

Mari kirim pesan terenkripsi ke alamat email yang 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 perlu file .crt – penerima tidak pernah perlu memberikan kunci privat mereka (.p12 dan .pem files).

Saya memiliki file bob.lumreeker@gmail.com.crt untuk penerima yang saya tuju – cocok dengan alamat Dari: di file saya.

Berikut adalah perintah untuk mengirim:

./sparkpostSMIME.py tests/declaration.eml --sign --encrypt --send_api

Saya melihat:

Membuka 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

Mail muncul di Thunderbird dengan ikon tanda tangan “titik merah” dan ikon “gembok” terenkripsi.

Thunderbird email view with signature and encryption icons

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

Avocado marketing email with guacamole in a blue bowl and product order sectionsGmail interface showing an HTML email with guacamole image and Avocado marketing content

Perhatikan bahwa drop-down menunjukkan “Alamat email terverifikasi”.

Untuk mengenkripsi pesan, Anda memerlukan kunci publik penerima dalam bentuk sertifikat. Ini adalah file teks yang terlihat seperti ini:

Atribut Bag   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 yang nyata:

cd tests ../sparkpostSMIME.py example_email1.eml --sign --encrypt

Anda akan melihat:

To: Bob <bob@example.com>
From: Alice <alice@example.com> 
Subject: A message 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 memperhatikan bahwa panjang output cukup lebih panjang dibandingkan dengan pesan terencrypted karena membawa banyak informasi tambahan serta pesan yang diacak itu sendiri.


4.1 Mengirim pesan terenkripsi dan ditandatangani melalui SparkPost

Mari kirim pesan terenkripsi ke alamat email yang 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 perlu file .crt – penerima tidak pernah perlu memberikan kunci privat mereka (.p12 dan .pem files).

Saya memiliki file bob.lumreeker@gmail.com.crt untuk penerima yang saya tuju – cocok dengan alamat Dari: di file saya.

Berikut adalah perintah untuk mengirim:

./sparkpostSMIME.py tests/declaration.eml --sign --encrypt --send_api

Saya melihat:

Membuka 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

Mail muncul di Thunderbird dengan ikon tanda tangan “titik merah” dan ikon “gembok” terenkripsi.

Thunderbird email view with signature and encryption icons

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

Avocado marketing email with guacamole in a blue bowl and product order sectionsGmail interface showing an HTML email with guacamole image and Avocado marketing content

Perhatikan bahwa drop-down menunjukkan “Alamat email terverifikasi”.

Untuk mengenkripsi pesan, Anda memerlukan kunci publik penerima dalam bentuk sertifikat. Ini adalah file teks yang terlihat seperti ini:

Atribut Bag   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 yang nyata:

cd tests ../sparkpostSMIME.py example_email1.eml --sign --encrypt

Anda akan melihat:

To: Bob <bob@example.com>
From: Alice <alice@example.com> 
Subject: A message 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 memperhatikan bahwa panjang output cukup lebih panjang dibandingkan dengan pesan terencrypted karena membawa banyak informasi tambahan serta pesan yang diacak itu sendiri.


4.1 Mengirim pesan terenkripsi dan ditandatangani melalui SparkPost

Mari kirim pesan terenkripsi ke alamat email yang 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 perlu file .crt – penerima tidak pernah perlu memberikan kunci privat mereka (.p12 dan .pem files).

Saya memiliki file bob.lumreeker@gmail.com.crt untuk penerima yang saya tuju – cocok dengan alamat Dari: di file saya.

Berikut adalah perintah untuk mengirim:

./sparkpostSMIME.py tests/declaration.eml --sign --encrypt --send_api

Saya melihat:

Membuka 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

Mail muncul di Thunderbird dengan ikon tanda tangan “titik merah” dan ikon “gembok” terenkripsi.

Thunderbird email view with signature and encryption icons

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

Avocado marketing email with guacamole in a blue bowl and product order sectionsGmail interface showing an HTML email with guacamole image and Avocado marketing content

Perhatikan bahwa drop-down menunjukkan “Alamat email terverifikasi”.

Pikiran lebih lanjut & hal-hal yang perlu diwaspadai

Alat ini mengambil pendekatan yang sangat sederhana untuk menarik kunci yang diperlukan – ia hanya mencari file yang dinamai di direktori saat ini. Pengaturan yang lebih kompleks, seperti menyimpan semua kunci dalam database, dapat dengan mudah ditambahkan, tetapi saya ingin kode tersebut tetap 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 tangannya. Alat ini menghapus header Bcc: dari pesan yang dikirim (seperti yang dilakukan klien email desktop).

Untuk memastikan bahwa pesan melewati SparkPost tanpa diubah (yang dapat merusak penandatanganan), alat ini mengatur opsi API untuk pengiriman “transaksional”, dengan pelacakan pembukaan dan klik dinonaktifkan.

Jika Anda menggunakan enkripsi, ingatlah bahwa alat ini mengambil alamat To: tunggal untuk itu. Penerima lain hanya dapat mendekode isi pesan jika mereka memiliki kunci pribadi penerima To:. Jika Anda hanya menggunakan penerima sekunder sebagai catatan pengiriman yang dilakukan, misalnya, itu mungkin saja baik-baik saja.

Alat ini mengambil pendekatan yang sangat sederhana untuk menarik kunci yang diperlukan – ia hanya mencari file yang dinamai di direktori saat ini. Pengaturan yang lebih kompleks, seperti menyimpan semua kunci dalam database, dapat dengan mudah ditambahkan, tetapi saya ingin kode tersebut tetap 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 tangannya. Alat ini menghapus header Bcc: dari pesan yang dikirim (seperti yang dilakukan klien email desktop).

Untuk memastikan bahwa pesan melewati SparkPost tanpa diubah (yang dapat merusak penandatanganan), alat ini mengatur opsi API untuk pengiriman “transaksional”, dengan pelacakan pembukaan dan klik dinonaktifkan.

Jika Anda menggunakan enkripsi, ingatlah bahwa alat ini mengambil alamat To: tunggal untuk itu. Penerima lain hanya dapat mendekode isi pesan jika mereka memiliki kunci pribadi penerima To:. Jika Anda hanya menggunakan penerima sekunder sebagai catatan pengiriman yang dilakukan, misalnya, itu mungkin saja baik-baik saja.

Alat ini mengambil pendekatan yang sangat sederhana untuk menarik kunci yang diperlukan – ia hanya mencari file yang dinamai di direktori saat ini. Pengaturan yang lebih kompleks, seperti menyimpan semua kunci dalam database, dapat dengan mudah ditambahkan, tetapi saya ingin kode tersebut tetap 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 tangannya. Alat ini menghapus header Bcc: dari pesan yang dikirim (seperti yang dilakukan klien email desktop).

Untuk memastikan bahwa pesan melewati SparkPost tanpa diubah (yang dapat merusak penandatanganan), alat ini mengatur opsi API untuk pengiriman “transaksional”, dengan pelacakan pembukaan dan klik dinonaktifkan.

Jika Anda menggunakan enkripsi, ingatlah bahwa alat ini mengambil alamat To: tunggal untuk itu. Penerima lain hanya dapat mendekode isi pesan jika mereka memiliki kunci pribadi penerima To:. Jika Anda hanya menggunakan penerima sekunder sebagai catatan pengiriman yang dilakukan, misalnya, itu mungkin saja baik-baik saja.

Ditandatangani, disegel, disampaikan…Saya milikmu

Itulah gambaran singkat kami tentang cara menandatangani, menyegel, dan mengirim pesan S/MIME melalui SparkPost. Pengingat cepat: proyek demo tersedia di GitHub, dan saya telah berusaha untuk membuatnya mudah diinstal dan digunakan.

Itulah gambaran singkat kami tentang cara menandatangani, menyegel, dan mengirim pesan S/MIME melalui SparkPost. Pengingat cepat: proyek demo tersedia di GitHub, dan saya telah berusaha untuk membuatnya mudah diinstal dan digunakan.

Itulah gambaran singkat kami tentang cara menandatangani, menyegel, dan mengirim pesan S/MIME melalui SparkPost. Pengingat cepat: proyek demo tersedia di GitHub, dan saya telah berusaha untuk membuatnya mudah diinstal dan digunakan.

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