S/MIME الجزء 2: تم التوقيع، والختم، والتسليم من خلال SparkPost
طائر
31/12/2018
البريد الإلكتروني
1 min read

النقاط الرئيسية
المقدمة: الجزء 2 ينتقل من نظرية S/MIME إلى الممارسة - موضحاً كيفية توقيع وتشفير رسائل البريد الإلكتروني رقمياً باستخدام SparkPost كمنصة للتسليم.
الهدف: تجهيز المطورين بسير عمل بسيط وسهل الاستخدام من خلال سطر الأوامر لتوقيع الرسائل المرسلة، والتحقق من التوقيعات، و(اختياريًا) تشفير المحتوى للمستلمين المحددين.
النقاط البارزة:
الإعداد: تثبيت أدوات العرض مفتوحة المصدر من GitHub (مع فحص آلي باستخدام Travis + pytest). تتولى Pipfile معالجة جميع اعتمادات Python.
مفاتيح المرسل:
إنشاء شهادة موقعة ذاتياً أو شهادة صادرة عن جهة مصدقة (
.p12) لهوية بريدك الإلكتروني.تقسيمها إلى ملفات خاصة (
.pem) وعامة (.crt) لاستخدامها من قبل أداة التوقيع.
التوقيع:
استخدام برنامج
sparkpostSMIME.pyالمضمن لتوقيع الرسائل التجريبية (على سبيل المثال،tests/declaration.eml).تأكيد التوقيعات بصريًا في عملاء مثل Thunderbird (أيقونة النقطة الحمراء).
التشفير:
الحصول على الشهادة العامة لكل مستلم (
.crt).تشغيل الأداة مرة أخرى لإنتاج رسالة موقعة + مشفرة.
يمكن للمستلمين التحقق وفك التشفير باستخدام مفاتيحهم الخاصة.
التسليم عبر SparkPost:
إعداد نطاق إرسال صالح ومفتاح API.
إرسال الرسائل عبر واجهة برمجة التطبيقات الخاصة بـ SparkPost مع تعطيل تتبع لضمان النزاهة.
أداة إضافية - mimeshow:
يعرض هيكل MIME بلغة مفهومة RFC822 لأغراض تصحيح الأخطاء أو الفحص.
نصائح عملية:
الحفاظ على أسماء الملفات متوافقة مع عنوان From:.
تجنب تعديل محتويات الرسالة بعد التوقيع.
استخدام Bcc فقط للنسخ الأرشيفية - هؤلاء المستلمون لا يمكنهم فك التشفير إذا كانت الرسالة مشفرة إلى عنوان To واحد.
أهم النقاط في الأسئلة والأجوبة
لماذا نستخدم توقيع S/MIME؟
يُصادق على المرسل ويضمن سلامة الرسالة - تعمل عملاء مثل Thunderbird على عرض مؤشر بصري عندما تكون التوقيع صالحًا.
كيف أحصل على شهادة المرسل الخاصة بي؟
إما أن تقوم بالتوقيع الذاتي عبر OpenSSL (للاختبار) أو الحصول على شهادة موثوقة من مزودين مثل Comodo (مجانية للاستخدام غير التجاري).
هل يمكنني تشفير الرسائل لعدة مستلمين؟
فقط إذا كان لديك المفتاح العمومي لكل مستلم. يقوم البرنامج النصي التجريبي بتشفير عنوان To الوحيد بشكل افتراضي.
ما الضمانات التي تحافظ على عدم كسر التوقيعات أثناء النقل؟
تقوم الأداة بضبط خيارات واجهة برمجة تطبيقات SparkPost للإرسال التبادلي وتعطيل تتبع الفتح/النقر، بحيث تمر الحمولة دون تغيير.
ما هو دور العرض الصامت؟
يقوم بتحليل ملفات البريد الإلكتروني الخام ويعرض هيكلها متعدد الأجزاء - وهو مفيد لفحص توقيع S/MIME والمرفقات ورؤوس البريد.
ما التالي في السلسلة؟
الجزء 3 يمدد هذه القدرات S/MIME إلى منصات البريد الإلكتروني الآمن المحلية مثل PowerMTA و Momentum.
في الجزء الأول، أجرينا جولة سريعة حول S/MIME، حيث نظرنا في توقيع وتشفير تدفقات رسائلنا عبر مجموعة من عملاء البريد. يمكن توقيع رسائل S/MIME (مما يثبت هوية المرسل) أو تشفيرها (مما يحفظ محتوى الرسالة سرياً)، أو كليهما.

في هذه الحلقة، سنقوم بما يلي:
تثبيت بعض أدوات سطر الأوامر البسيطة لتوقيع وتشفير البريد الإلكتروني
الحصول على مفتاحك / الشهادة الخاصة بك للتوقيع
إرسال رسالة موقعة عبر SparkPost، والنظر إلى الرسالة المستلمة
اختياريًا، الحصول على الشهادة الخاصة بك لاستقبال التشفير
إرسال رسالة موقعة ومشفرة عبر SparkPost، والنظر إلى الرسالة المستلمة
تجربة أداة مستقلة مفيدة تسمى “mimeshow” للنظر إلى تفاصيل ملف البريد الإلكتروني.
حسناً - دعنا نبدأ!

في هذه الحلقة، سنقوم بما يلي:
تثبيت بعض أدوات سطر الأوامر البسيطة لتوقيع وتشفير البريد الإلكتروني
الحصول على مفتاحك / الشهادة الخاصة بك للتوقيع
إرسال رسالة موقعة عبر SparkPost، والنظر إلى الرسالة المستلمة
اختياريًا، الحصول على الشهادة الخاصة بك لاستقبال التشفير
إرسال رسالة موقعة ومشفرة عبر SparkPost، والنظر إلى الرسالة المستلمة
تجربة أداة مستقلة مفيدة تسمى “mimeshow” للنظر إلى تفاصيل ملف البريد الإلكتروني.
حسناً - دعنا نبدأ!

في هذه الحلقة، سنقوم بما يلي:
تثبيت بعض أدوات سطر الأوامر البسيطة لتوقيع وتشفير البريد الإلكتروني
الحصول على مفتاحك / الشهادة الخاصة بك للتوقيع
إرسال رسالة موقعة عبر SparkPost، والنظر إلى الرسالة المستلمة
اختياريًا، الحصول على الشهادة الخاصة بك لاستقبال التشفير
إرسال رسالة موقعة ومشفرة عبر SparkPost، والنظر إلى الرسالة المستلمة
تجربة أداة مستقلة مفيدة تسمى “mimeshow” للنظر إلى تفاصيل ملف البريد الإلكتروني.
حسناً - دعنا نبدأ!
ميزة إضافية: عرض أجزاء MIME باستخدام "mimeshow"
الملفات متعددة الأجزاء في RFC822 MIME معقدة للغاية بالنسبة للبشر لقراءتها. يتضمن المشروع أداة مستقلة لجعل ذلك أسهل، تُدعى mimeshow.
تأخذ هذه الأداة أي ملفات بريد إلكتروني لديك (ليس فقط ملفات S/MIME) وتظهر الهيكل الداخلي. إليك مثالاً:
./mimeshow.py testcases/img_and_attachment.eml
سترى:
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"
يمكنك أيضًا استخدامها كمرشح لتقديم ملخص قابل للقراءة البشرية لمخرجات sparkpostSMIME :
./sparkpostSMIME.py tests/declaration.eml --sign --encrypt | ./mimeshow.py
سترى:
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
الملفات متعددة الأجزاء في RFC822 MIME معقدة للغاية بالنسبة للبشر لقراءتها. يتضمن المشروع أداة مستقلة لجعل ذلك أسهل، تُدعى mimeshow.
تأخذ هذه الأداة أي ملفات بريد إلكتروني لديك (ليس فقط ملفات S/MIME) وتظهر الهيكل الداخلي. إليك مثالاً:
./mimeshow.py testcases/img_and_attachment.eml
سترى:
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"
يمكنك أيضًا استخدامها كمرشح لتقديم ملخص قابل للقراءة البشرية لمخرجات sparkpostSMIME :
./sparkpostSMIME.py tests/declaration.eml --sign --encrypt | ./mimeshow.py
سترى:
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
الملفات متعددة الأجزاء في RFC822 MIME معقدة للغاية بالنسبة للبشر لقراءتها. يتضمن المشروع أداة مستقلة لجعل ذلك أسهل، تُدعى mimeshow.
تأخذ هذه الأداة أي ملفات بريد إلكتروني لديك (ليس فقط ملفات S/MIME) وتظهر الهيكل الداخلي. إليك مثالاً:
./mimeshow.py testcases/img_and_attachment.eml
سترى:
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"
يمكنك أيضًا استخدامها كمرشح لتقديم ملخص قابل للقراءة البشرية لمخرجات sparkpostSMIME :
./sparkpostSMIME.py tests/declaration.eml --sign --encrypt | ./mimeshow.py
سترى:
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. تثبيت الأدوات
أدوات العرض متاحة على GitHub، مع تعليمات التثبيت. قد تلاحظ شعار "البناء ناجح" – Travis وpytest تقومان تلقائيًا بالتحقق من حالة البناء. لاحظ أن هذه الأدوات غير مدعومة رسميًا من قبل SparkPost، لكنني حاولت جعلها قوية وسهلة الاستخدام.
إذا كان لديك بعض المعرفة بـ Python وpip، يجب أن تشعر أن عملية التثبيت مألوفة جداً. يعتني ملف Pipfile بالتبعيات الخارجية تلقائيًا من أجلك. بمجرد الانتهاء، يمكنك التحقق مما إذا كان كل شيء مثبتًا من خلال تشغيل
./sparkpostSMIME.py -hيجب أن ترى نص المساعدة الودود. بعد ذلك، نحتاج إلى…
أدوات العرض متاحة على GitHub، مع تعليمات التثبيت. قد تلاحظ شعار "البناء ناجح" – Travis وpytest تقومان تلقائيًا بالتحقق من حالة البناء. لاحظ أن هذه الأدوات غير مدعومة رسميًا من قبل SparkPost، لكنني حاولت جعلها قوية وسهلة الاستخدام.
إذا كان لديك بعض المعرفة بـ Python وpip، يجب أن تشعر أن عملية التثبيت مألوفة جداً. يعتني ملف Pipfile بالتبعيات الخارجية تلقائيًا من أجلك. بمجرد الانتهاء، يمكنك التحقق مما إذا كان كل شيء مثبتًا من خلال تشغيل
./sparkpostSMIME.py -hيجب أن ترى نص المساعدة الودود. بعد ذلك، نحتاج إلى…
أدوات العرض متاحة على GitHub، مع تعليمات التثبيت. قد تلاحظ شعار "البناء ناجح" – Travis وpytest تقومان تلقائيًا بالتحقق من حالة البناء. لاحظ أن هذه الأدوات غير مدعومة رسميًا من قبل SparkPost، لكنني حاولت جعلها قوية وسهلة الاستخدام.
إذا كان لديك بعض المعرفة بـ Python وpip، يجب أن تشعر أن عملية التثبيت مألوفة جداً. يعتني ملف Pipfile بالتبعيات الخارجية تلقائيًا من أجلك. بمجرد الانتهاء، يمكنك التحقق مما إذا كان كل شيء مثبتًا من خلال تشغيل
./sparkpostSMIME.py -hيجب أن ترى نص المساعدة الودود. بعد ذلك، نحتاج إلى…
٢. احصل على مفتاح المرسل / الشهادة للتوقيع
إذا كان لديك بالفعل ملف مفتاح لهويتك المرسلة، يمكنك تخطي هذه الخطوة. خلاف ذلك، إليك خياران للاختيار من بينهما:
أ) مفتاح / شهادة اختبار موقعة ذاتيًا (غير صالحة خارجيًا)
إذا كنت تجري اختبارًا فقط، يمكنك إنشاء شهادات ومفاتيح "موقعة ذاتيًا" لعنوان بريد إلكتروني باستخدام أداة سطر الأوامر openssl على نظام لينكس، باتباع إجراء مثل هذا. في نهاية تلك العملية، ستحصل على ملف smime.p12 . قم بإعادة تسمية هذا الملف ليتناسب مع هويتك المرسلة، بما في ذلك علامة @، على سبيل المثال، alice@example.com.p12 .
أو
ب) مفاتيح / شهادات صالحة خارجيًا
إذا كنت ترغب في الحصول على مفاتيح / شهادات صالحة خارجيًا تتيح لك التوقيع، فهناك قائمة بمقدمي الخدمات هنا. لقد وجدت أن Comodo تعمل بشكل جيد (مجانًا للاستخدام غير التجاري)، ومن الأسهل من إجراء التوقيع الذاتي المذكور أعلاه. اتبع عملية التسجيل، واستلم بريد التحقق الخاص بك، واحرص على فتح الرابط في فايرفوكس. اذهب إلى تفضيلات فايرفوكس / الخصوصية والأمان. انتقل إلى الشهادات / عرض الشهادات:

اختر شهادتك، واستخدم خيار "نسخ احتياطي" لحفظها كملف بتنسيق PKCS12 (أضف لاحقة الملف .p12 إلى اسم الملف الخاص بك) والذي يحمل المفتاح الخاص وسلسلة الشهادات العامة.

قدم كلمة مرور لتأمين ملف .p12:

إنشاء ملفات مفاتيح عامة (.crt) وخاصة (.pem) منفصلة
سواء كنت قد استخدمت أ) أو ب)، سيكون لديك الآن ملف .p12 لهويتك المرسلة. هذه خطوة كبيرة للأمام – احصل على فنجان قهوة الآن!
الآن نحتاج إلى إنشاء ملفات مفاتيح عامة وخاصة منفصلة مثل هذه – مع استبدال عنوان بريدك الإلكتروني بنفس عنوان المثال. (ماك أو إس إكس ولينكس):
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
ستحتاج إلى إدخال كلمة المرور التي قدمتها سابقًا. لاحظ أن تلك الشرطتين المائلتين \ تُستخدم لـ الهروب من علامة @ – وليس فصل أسماء مسار الدليل (هذا هو الشرط المائل / على ماك أو إس إكس ولينكس).
إذا كنت تستخدم ويندوز، هناك تطبيقات openssl متاحة مثل الـ MINGW64 المدمجة في أدوات سطر أوامر Git، لكني وجدت أنه يميل إلى التوقف. من المحتمل أنك ستجد أنه أسهل وأسرع للقيام بذلك على لينكس ثم نسخ الملفات الخاصة بك. تأتي تلك الأدوات نفسها لـ Git لويندوز مع عميل ssh جميل يمكنك استخدامه لتسجيل الدخول إلى صندوق لينكس، مثل مثيل Amazon EC2.
2.1 توقيع رسالة
يوجد بالفعل ملف مفتاح / شهادة وهمية وملف مصدر بريد إلكتروني في دليل الاختبارات لـ alice@example.com، لذا يمكنك الحصول على بعض المخرجات حتى قبل أن تحصل على مفاتيحك الخاصة. اكتب ما يلي:
cd tests ../sparkpostSMIME.py example_email1.eml --sign
وستحصل على:
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 : :
لا يمكنك فعليًا إرسال رسائل بريد إلكتروني من example.com عبر SparkPost ما لم تكن تملك ذلك النطاق، لذا فإن الخطوة التالية هي استخدام مفتاحك الخاص وإرسال رسالة موقعة من نطاقك الخاص.
إذا كان لديك بالفعل ملف مفتاح لهويتك المرسلة، يمكنك تخطي هذه الخطوة. خلاف ذلك، إليك خياران للاختيار من بينهما:
أ) مفتاح / شهادة اختبار موقعة ذاتيًا (غير صالحة خارجيًا)
إذا كنت تجري اختبارًا فقط، يمكنك إنشاء شهادات ومفاتيح "موقعة ذاتيًا" لعنوان بريد إلكتروني باستخدام أداة سطر الأوامر openssl على نظام لينكس، باتباع إجراء مثل هذا. في نهاية تلك العملية، ستحصل على ملف smime.p12 . قم بإعادة تسمية هذا الملف ليتناسب مع هويتك المرسلة، بما في ذلك علامة @، على سبيل المثال، alice@example.com.p12 .
أو
ب) مفاتيح / شهادات صالحة خارجيًا
إذا كنت ترغب في الحصول على مفاتيح / شهادات صالحة خارجيًا تتيح لك التوقيع، فهناك قائمة بمقدمي الخدمات هنا. لقد وجدت أن Comodo تعمل بشكل جيد (مجانًا للاستخدام غير التجاري)، ومن الأسهل من إجراء التوقيع الذاتي المذكور أعلاه. اتبع عملية التسجيل، واستلم بريد التحقق الخاص بك، واحرص على فتح الرابط في فايرفوكس. اذهب إلى تفضيلات فايرفوكس / الخصوصية والأمان. انتقل إلى الشهادات / عرض الشهادات:

اختر شهادتك، واستخدم خيار "نسخ احتياطي" لحفظها كملف بتنسيق PKCS12 (أضف لاحقة الملف .p12 إلى اسم الملف الخاص بك) والذي يحمل المفتاح الخاص وسلسلة الشهادات العامة.

قدم كلمة مرور لتأمين ملف .p12:

إنشاء ملفات مفاتيح عامة (.crt) وخاصة (.pem) منفصلة
سواء كنت قد استخدمت أ) أو ب)، سيكون لديك الآن ملف .p12 لهويتك المرسلة. هذه خطوة كبيرة للأمام – احصل على فنجان قهوة الآن!
الآن نحتاج إلى إنشاء ملفات مفاتيح عامة وخاصة منفصلة مثل هذه – مع استبدال عنوان بريدك الإلكتروني بنفس عنوان المثال. (ماك أو إس إكس ولينكس):
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
ستحتاج إلى إدخال كلمة المرور التي قدمتها سابقًا. لاحظ أن تلك الشرطتين المائلتين \ تُستخدم لـ الهروب من علامة @ – وليس فصل أسماء مسار الدليل (هذا هو الشرط المائل / على ماك أو إس إكس ولينكس).
إذا كنت تستخدم ويندوز، هناك تطبيقات openssl متاحة مثل الـ MINGW64 المدمجة في أدوات سطر أوامر Git، لكني وجدت أنه يميل إلى التوقف. من المحتمل أنك ستجد أنه أسهل وأسرع للقيام بذلك على لينكس ثم نسخ الملفات الخاصة بك. تأتي تلك الأدوات نفسها لـ Git لويندوز مع عميل ssh جميل يمكنك استخدامه لتسجيل الدخول إلى صندوق لينكس، مثل مثيل Amazon EC2.
2.1 توقيع رسالة
يوجد بالفعل ملف مفتاح / شهادة وهمية وملف مصدر بريد إلكتروني في دليل الاختبارات لـ alice@example.com، لذا يمكنك الحصول على بعض المخرجات حتى قبل أن تحصل على مفاتيحك الخاصة. اكتب ما يلي:
cd tests ../sparkpostSMIME.py example_email1.eml --sign
وستحصل على:
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 : :
لا يمكنك فعليًا إرسال رسائل بريد إلكتروني من example.com عبر SparkPost ما لم تكن تملك ذلك النطاق، لذا فإن الخطوة التالية هي استخدام مفتاحك الخاص وإرسال رسالة موقعة من نطاقك الخاص.
إذا كان لديك بالفعل ملف مفتاح لهويتك المرسلة، يمكنك تخطي هذه الخطوة. خلاف ذلك، إليك خياران للاختيار من بينهما:
أ) مفتاح / شهادة اختبار موقعة ذاتيًا (غير صالحة خارجيًا)
إذا كنت تجري اختبارًا فقط، يمكنك إنشاء شهادات ومفاتيح "موقعة ذاتيًا" لعنوان بريد إلكتروني باستخدام أداة سطر الأوامر openssl على نظام لينكس، باتباع إجراء مثل هذا. في نهاية تلك العملية، ستحصل على ملف smime.p12 . قم بإعادة تسمية هذا الملف ليتناسب مع هويتك المرسلة، بما في ذلك علامة @، على سبيل المثال، alice@example.com.p12 .
أو
ب) مفاتيح / شهادات صالحة خارجيًا
إذا كنت ترغب في الحصول على مفاتيح / شهادات صالحة خارجيًا تتيح لك التوقيع، فهناك قائمة بمقدمي الخدمات هنا. لقد وجدت أن Comodo تعمل بشكل جيد (مجانًا للاستخدام غير التجاري)، ومن الأسهل من إجراء التوقيع الذاتي المذكور أعلاه. اتبع عملية التسجيل، واستلم بريد التحقق الخاص بك، واحرص على فتح الرابط في فايرفوكس. اذهب إلى تفضيلات فايرفوكس / الخصوصية والأمان. انتقل إلى الشهادات / عرض الشهادات:

اختر شهادتك، واستخدم خيار "نسخ احتياطي" لحفظها كملف بتنسيق PKCS12 (أضف لاحقة الملف .p12 إلى اسم الملف الخاص بك) والذي يحمل المفتاح الخاص وسلسلة الشهادات العامة.

قدم كلمة مرور لتأمين ملف .p12:

إنشاء ملفات مفاتيح عامة (.crt) وخاصة (.pem) منفصلة
سواء كنت قد استخدمت أ) أو ب)، سيكون لديك الآن ملف .p12 لهويتك المرسلة. هذه خطوة كبيرة للأمام – احصل على فنجان قهوة الآن!
الآن نحتاج إلى إنشاء ملفات مفاتيح عامة وخاصة منفصلة مثل هذه – مع استبدال عنوان بريدك الإلكتروني بنفس عنوان المثال. (ماك أو إس إكس ولينكس):
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
ستحتاج إلى إدخال كلمة المرور التي قدمتها سابقًا. لاحظ أن تلك الشرطتين المائلتين \ تُستخدم لـ الهروب من علامة @ – وليس فصل أسماء مسار الدليل (هذا هو الشرط المائل / على ماك أو إس إكس ولينكس).
إذا كنت تستخدم ويندوز، هناك تطبيقات openssl متاحة مثل الـ MINGW64 المدمجة في أدوات سطر أوامر Git، لكني وجدت أنه يميل إلى التوقف. من المحتمل أنك ستجد أنه أسهل وأسرع للقيام بذلك على لينكس ثم نسخ الملفات الخاصة بك. تأتي تلك الأدوات نفسها لـ Git لويندوز مع عميل ssh جميل يمكنك استخدامه لتسجيل الدخول إلى صندوق لينكس، مثل مثيل Amazon EC2.
2.1 توقيع رسالة
يوجد بالفعل ملف مفتاح / شهادة وهمية وملف مصدر بريد إلكتروني في دليل الاختبارات لـ alice@example.com، لذا يمكنك الحصول على بعض المخرجات حتى قبل أن تحصل على مفاتيحك الخاصة. اكتب ما يلي:
cd tests ../sparkpostSMIME.py example_email1.eml --sign
وستحصل على:
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 : :
لا يمكنك فعليًا إرسال رسائل بريد إلكتروني من example.com عبر SparkPost ما لم تكن تملك ذلك النطاق، لذا فإن الخطوة التالية هي استخدام مفتاحك الخاص وإرسال رسالة موقعة من نطاقك الخاص.
3. أرسل رسالة موقعة عبر SparkPost
الآن دعنا نستخدم نطاق إرسال حقيقي، تم إعداده وفقًا لـ SparkPost دليل المستخدم الجديد. لدينا ملفات شهادة المرسل والمفتاح في الدليل الحالي:
steve@thetucks.com.crt steve@thetucks.com.pem
الملف tests/declaration.eml مضمن في المشروع. إنه مجرد ملف نصي، لذا يمكنك تخصيص عنوان From: ليناسب نطاق الإرسال الخاص بك وعنوان To: ليناسب مستقبل الاختبار الخاص بك. يبدأ الملف كما يلي:
To: Bob <bob.lumreeker@gmail.com> From: Steve <steve@thetucks.com> Subject: إليك إعلاننا MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Content-Language: en-GB عندما تصبح الضرورة ...
قم بتعيين مفتاح API الخاص بك:
export SPARKPOST_API_KEY=<<Put your API key here>
أرسل البريد الإلكتروني:
./sparkpostSMIME.py tests/declaration.eml --sign --send_api
سترى:
تم فتح الاتصال إلى https://api.sparkpost.com/api/v1 إرسال tests/declaration.eml From: Steve <steve@thetucks.com> To: Bob <bob.lumreeker@gmail.com> OK - في 1.15 ثانية
بعد ثانية أو نحو ذلك، يصل البريد الإلكتروني إلى صندوق بريد Bob. تعرض Thunderbird البريد الإلكتروني بنقطة حمراء على المغلف، مما يدل على توقيع مرسل صالح.

نجاح! أكمل ذلك القهوة، لقد كسبت ذلك. إذا كنت تواجه مشكلة، تحقق من أن عنوان From: في ملف البريد الإلكتروني يتطابق مع اسم ملفات .crt و .pem الخاصة بك.
الآن دعنا نستخدم نطاق إرسال حقيقي، تم إعداده وفقًا لـ SparkPost دليل المستخدم الجديد. لدينا ملفات شهادة المرسل والمفتاح في الدليل الحالي:
steve@thetucks.com.crt steve@thetucks.com.pem
الملف tests/declaration.eml مضمن في المشروع. إنه مجرد ملف نصي، لذا يمكنك تخصيص عنوان From: ليناسب نطاق الإرسال الخاص بك وعنوان To: ليناسب مستقبل الاختبار الخاص بك. يبدأ الملف كما يلي:
To: Bob <bob.lumreeker@gmail.com> From: Steve <steve@thetucks.com> Subject: إليك إعلاننا MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Content-Language: en-GB عندما تصبح الضرورة ...
قم بتعيين مفتاح API الخاص بك:
export SPARKPOST_API_KEY=<<Put your API key here>
أرسل البريد الإلكتروني:
./sparkpostSMIME.py tests/declaration.eml --sign --send_api
سترى:
تم فتح الاتصال إلى https://api.sparkpost.com/api/v1 إرسال tests/declaration.eml From: Steve <steve@thetucks.com> To: Bob <bob.lumreeker@gmail.com> OK - في 1.15 ثانية
بعد ثانية أو نحو ذلك، يصل البريد الإلكتروني إلى صندوق بريد Bob. تعرض Thunderbird البريد الإلكتروني بنقطة حمراء على المغلف، مما يدل على توقيع مرسل صالح.

نجاح! أكمل ذلك القهوة، لقد كسبت ذلك. إذا كنت تواجه مشكلة، تحقق من أن عنوان From: في ملف البريد الإلكتروني يتطابق مع اسم ملفات .crt و .pem الخاصة بك.
الآن دعنا نستخدم نطاق إرسال حقيقي، تم إعداده وفقًا لـ SparkPost دليل المستخدم الجديد. لدينا ملفات شهادة المرسل والمفتاح في الدليل الحالي:
steve@thetucks.com.crt steve@thetucks.com.pem
الملف tests/declaration.eml مضمن في المشروع. إنه مجرد ملف نصي، لذا يمكنك تخصيص عنوان From: ليناسب نطاق الإرسال الخاص بك وعنوان To: ليناسب مستقبل الاختبار الخاص بك. يبدأ الملف كما يلي:
To: Bob <bob.lumreeker@gmail.com> From: Steve <steve@thetucks.com> Subject: إليك إعلاننا MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Content-Language: en-GB عندما تصبح الضرورة ...
قم بتعيين مفتاح API الخاص بك:
export SPARKPOST_API_KEY=<<Put your API key here>
أرسل البريد الإلكتروني:
./sparkpostSMIME.py tests/declaration.eml --sign --send_api
سترى:
تم فتح الاتصال إلى https://api.sparkpost.com/api/v1 إرسال tests/declaration.eml From: Steve <steve@thetucks.com> To: Bob <bob.lumreeker@gmail.com> OK - في 1.15 ثانية
بعد ثانية أو نحو ذلك، يصل البريد الإلكتروني إلى صندوق بريد Bob. تعرض Thunderbird البريد الإلكتروني بنقطة حمراء على المغلف، مما يدل على توقيع مرسل صالح.

نجاح! أكمل ذلك القهوة، لقد كسبت ذلك. إذا كنت تواجه مشكلة، تحقق من أن عنوان From: في ملف البريد الإلكتروني يتطابق مع اسم ملفات .crt و .pem الخاصة بك.
4. تشفير الرسائل
لتشفير رسالة، تحتاج إلى مفتاح المستلم العام في شكل شهادة. هذه عبارة عن ملف نصي يبدو هكذا:
سمات الحقيبة اسم الودود: s COMODO CA Limited ID #2 معرف المفتاح المحلي: 32 84 AB 9C 56 5C 80 C6 89 4D 40 46 DD D4 7C 71 E8 CD ED C1 الموضوع=/emailAddress=bob.lumreeker@gmail.com الجهة المصدرة=/C=GB/ST=Greater Manchester/L=Salford/O=COMODO CA Limited/CN=COMODO RSA Client Authentication and Secure Email CA -----BEGIN CERTIFICATE----- يبدو كأحرف عشوائية هنا -----END CERTIFICATE-----
يوجد شهادة مستلم وهمية للبريد الإلكتروني bob@example.com في دليل الاختبارات، لذا يمكنك التدرب عليها قبل أن تحصل على شهادة حقيقية:
cd tests ../sparkpostSMIME.py example_email1.eml --sign --encrypt
سترى:
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 :
ستلاحظ أن طول الناتج أطول بكثير من الرسالة المشفرة لأنه يحمل الكثير من المعلومات الإضافية بالإضافة إلى الرسالة المخفية نفسها.
4.1 إرسال رسالة مشفرة وموقعة عبر SparkPost
دعنا نرسل رسالة مشفرة إلى عنوان بريد إلكتروني حقيقي. يمكنك اتباع نفس العملية كما في السابق (شهادة ذاتية التوقيع أو مزود مثل Comodo) للحصول على مفتاح عام / شهادة لعناوين مستلمين خاصتك. تحتاج فقط إلى ملف .crt – المستلم لا يحتاج أبدًا إلى إعطائك مفتاحه الخاص (.p12 و .pem).
لدي الملف bob.lumreeker@gmail.com.crt لمستلمي المقصود – مطابق لعنوان From: في ملفي.
إليك الأمر للإرسال:
./sparkpostSMIME.py tests/declaration.eml --sign --encrypt --send_api
أرى:
تم فتح الاتصال على https://api.sparkpost.com/api/v1 إرسال tests/declaration.eml من: Steve <steve@thetucks.com> إلى: Bob <bob.lumreeker@gmail.com> تم - في 1.168 ثانية
يظهر البريد في Thunderbird مع أيقونة
لتشفير رسالة، تحتاج إلى مفتاح المستلم العام في شكل شهادة. هذه عبارة عن ملف نصي يبدو هكذا:
سمات الحقيبة اسم الودود: s COMODO CA Limited ID #2 معرف المفتاح المحلي: 32 84 AB 9C 56 5C 80 C6 89 4D 40 46 DD D4 7C 71 E8 CD ED C1 الموضوع=/emailAddress=bob.lumreeker@gmail.com الجهة المصدرة=/C=GB/ST=Greater Manchester/L=Salford/O=COMODO CA Limited/CN=COMODO RSA Client Authentication and Secure Email CA -----BEGIN CERTIFICATE----- يبدو كأحرف عشوائية هنا -----END CERTIFICATE-----
يوجد شهادة مستلم وهمية للبريد الإلكتروني bob@example.com في دليل الاختبارات، لذا يمكنك التدرب عليها قبل أن تحصل على شهادة حقيقية:
cd tests ../sparkpostSMIME.py example_email1.eml --sign --encrypt
سترى:
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 :
ستلاحظ أن طول الناتج أطول بكثير من الرسالة المشفرة لأنه يحمل الكثير من المعلومات الإضافية بالإضافة إلى الرسالة المخفية نفسها.
4.1 إرسال رسالة مشفرة وموقعة عبر SparkPost
دعنا نرسل رسالة مشفرة إلى عنوان بريد إلكتروني حقيقي. يمكنك اتباع نفس العملية كما في السابق (شهادة ذاتية التوقيع أو مزود مثل Comodo) للحصول على مفتاح عام / شهادة لعناوين مستلمين خاصتك. تحتاج فقط إلى ملف .crt – المستلم لا يحتاج أبدًا إلى إعطائك مفتاحه الخاص (.p12 و .pem).
لدي الملف bob.lumreeker@gmail.com.crt لمستلمي المقصود – مطابق لعنوان From: في ملفي.
إليك الأمر للإرسال:
./sparkpostSMIME.py tests/declaration.eml --sign --encrypt --send_api
أرى:
تم فتح الاتصال على https://api.sparkpost.com/api/v1 إرسال tests/declaration.eml من: Steve <steve@thetucks.com> إلى: Bob <bob.lumreeker@gmail.com> تم - في 1.168 ثانية
يظهر البريد في Thunderbird مع أيقونة
لتشفير رسالة، تحتاج إلى مفتاح المستلم العام في شكل شهادة. هذه عبارة عن ملف نصي يبدو هكذا:
سمات الحقيبة اسم الودود: s COMODO CA Limited ID #2 معرف المفتاح المحلي: 32 84 AB 9C 56 5C 80 C6 89 4D 40 46 DD D4 7C 71 E8 CD ED C1 الموضوع=/emailAddress=bob.lumreeker@gmail.com الجهة المصدرة=/C=GB/ST=Greater Manchester/L=Salford/O=COMODO CA Limited/CN=COMODO RSA Client Authentication and Secure Email CA -----BEGIN CERTIFICATE----- يبدو كأحرف عشوائية هنا -----END CERTIFICATE-----
يوجد شهادة مستلم وهمية للبريد الإلكتروني bob@example.com في دليل الاختبارات، لذا يمكنك التدرب عليها قبل أن تحصل على شهادة حقيقية:
cd tests ../sparkpostSMIME.py example_email1.eml --sign --encrypt
سترى:
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 :
ستلاحظ أن طول الناتج أطول بكثير من الرسالة المشفرة لأنه يحمل الكثير من المعلومات الإضافية بالإضافة إلى الرسالة المخفية نفسها.
4.1 إرسال رسالة مشفرة وموقعة عبر SparkPost
دعنا نرسل رسالة مشفرة إلى عنوان بريد إلكتروني حقيقي. يمكنك اتباع نفس العملية كما في السابق (شهادة ذاتية التوقيع أو مزود مثل Comodo) للحصول على مفتاح عام / شهادة لعناوين مستلمين خاصتك. تحتاج فقط إلى ملف .crt – المستلم لا يحتاج أبدًا إلى إعطائك مفتاحه الخاص (.p12 و .pem).
لدي الملف bob.lumreeker@gmail.com.crt لمستلمي المقصود – مطابق لعنوان From: في ملفي.
إليك الأمر للإرسال:
./sparkpostSMIME.py tests/declaration.eml --sign --encrypt --send_api
أرى:
تم فتح الاتصال على https://api.sparkpost.com/api/v1 إرسال tests/declaration.eml من: Steve <steve@thetucks.com> إلى: Bob <bob.lumreeker@gmail.com> تم - في 1.168 ثانية
يظهر البريد في Thunderbird مع أيقونة
أفكار إضافية وأمور يجب الانتباه إليها
تأخذ هذه الأداة نهجًا بسيطًا للغاية في سحب المفاتيح الضرورية – فهي تبحث ببساطة عن الملفات المسماة في الدليل الحالي. يمكن بسهولة إضافة ترتيبات أكثر تعقيدًا، مثل الاحتفاظ بجميع المفاتيح في قاعدة بيانات، لكنني أردت أن يكون الكود بسيطًا قدر الإمكان.
يمكنك تضمين مستلمين آخرين باستخدام Cc: و Bcc: وسوف يتم تسليمهم؛ قد يكون هذا مفيدًا لأغراض الأرشفة. يتم استلام الرسائل الموقعة ويمكن عرضها من قبل مستلمين آخرين مع التوقيع. تقوم الأداة بإزالة رأس Bcc: من الرسالة المرسلة (كما سيفعل عميل البريد المكتبي).
لضمان مرور الرسائل عبر SparkPost دون تغيير (مما قد يكسر التوقيع)، تقوم الأداة بضبط خيارات API لـ “البريد Transactional”، مع تعطيل تتبع الفتح والنقر.
إذا كنت تستخدم التشفير، خذ في اعتبارك أن الأداة تلتقط عنوان To: الوحيد لذلك. يمكن للمستلمين الآخرين فك تشفير جسم الرسالة فقط إذا كانت لديهم المفتاح الخاص لمستلم To:. إذا كنت تستخدم مستلمين ثانويين فقط كسجل للتسليمات التي تمت، على سبيل المثال، قد يكون ذلك مقبولًا على أي حال.
تأخذ هذه الأداة نهجًا بسيطًا للغاية في سحب المفاتيح الضرورية – فهي تبحث ببساطة عن الملفات المسماة في الدليل الحالي. يمكن بسهولة إضافة ترتيبات أكثر تعقيدًا، مثل الاحتفاظ بجميع المفاتيح في قاعدة بيانات، لكنني أردت أن يكون الكود بسيطًا قدر الإمكان.
يمكنك تضمين مستلمين آخرين باستخدام Cc: و Bcc: وسوف يتم تسليمهم؛ قد يكون هذا مفيدًا لأغراض الأرشفة. يتم استلام الرسائل الموقعة ويمكن عرضها من قبل مستلمين آخرين مع التوقيع. تقوم الأداة بإزالة رأس Bcc: من الرسالة المرسلة (كما سيفعل عميل البريد المكتبي).
لضمان مرور الرسائل عبر SparkPost دون تغيير (مما قد يكسر التوقيع)، تقوم الأداة بضبط خيارات API لـ “البريد Transactional”، مع تعطيل تتبع الفتح والنقر.
إذا كنت تستخدم التشفير، خذ في اعتبارك أن الأداة تلتقط عنوان To: الوحيد لذلك. يمكن للمستلمين الآخرين فك تشفير جسم الرسالة فقط إذا كانت لديهم المفتاح الخاص لمستلم To:. إذا كنت تستخدم مستلمين ثانويين فقط كسجل للتسليمات التي تمت، على سبيل المثال، قد يكون ذلك مقبولًا على أي حال.
تأخذ هذه الأداة نهجًا بسيطًا للغاية في سحب المفاتيح الضرورية – فهي تبحث ببساطة عن الملفات المسماة في الدليل الحالي. يمكن بسهولة إضافة ترتيبات أكثر تعقيدًا، مثل الاحتفاظ بجميع المفاتيح في قاعدة بيانات، لكنني أردت أن يكون الكود بسيطًا قدر الإمكان.
يمكنك تضمين مستلمين آخرين باستخدام Cc: و Bcc: وسوف يتم تسليمهم؛ قد يكون هذا مفيدًا لأغراض الأرشفة. يتم استلام الرسائل الموقعة ويمكن عرضها من قبل مستلمين آخرين مع التوقيع. تقوم الأداة بإزالة رأس Bcc: من الرسالة المرسلة (كما سيفعل عميل البريد المكتبي).
لضمان مرور الرسائل عبر SparkPost دون تغيير (مما قد يكسر التوقيع)، تقوم الأداة بضبط خيارات API لـ “البريد Transactional”، مع تعطيل تتبع الفتح والنقر.
إذا كنت تستخدم التشفير، خذ في اعتبارك أن الأداة تلتقط عنوان To: الوحيد لذلك. يمكن للمستلمين الآخرين فك تشفير جسم الرسالة فقط إذا كانت لديهم المفتاح الخاص لمستلم To:. إذا كنت تستخدم مستلمين ثانويين فقط كسجل للتسليمات التي تمت، على سبيل المثال، قد يكون ذلك مقبولًا على أي حال.
موقع، مختوم، مُسلّم... أنا لك
هذه لمحة سريعة عن كيفية توقيع وختم وتسليم رسائل S/MIME من خلال SparkPost. تذكير سريع: مشروع العرض التوضيحي متاح على GitHub، وقد حاولت جعل تثبيته واستخدامه سهلاً.
هذه لمحة سريعة عن كيفية توقيع وختم وتسليم رسائل S/MIME من خلال SparkPost. تذكير سريع: مشروع العرض التوضيحي متاح على GitHub، وقد حاولت جعل تثبيته واستخدامه سهلاً.
هذه لمحة سريعة عن كيفية توقيع وختم وتسليم رسائل S/MIME من خلال SparkPost. تذكير سريع: مشروع العرض التوضيحي متاح على GitHub، وقد حاولت جعل تثبيته واستخدامه سهلاً.



