
في الجزء الأول، قمنا بجولة سريعة في S/MIME، حيث نظرنا في توقيع وتشفير تدفقات الرسائل الخاصة بنا عبر مجموعة من عملاء البريد. يمكن توقيع رسائل S/MIME (مما يثبت هوية المرسل)، تشفيرها (للحفاظ على سرية محتوى الرسالة)، أو كلاهما.

في هذه القسط، سنقوم ب:
تثبيت بعض الأدوات البسيطة لواجهة الأوامر لتوقيع وتشفير البريد الإلكتروني
الحصول على مفتاح / شهادة المرسل لتوقيع البريد
إرسال رسالة موقعة عبر SparkPost، وننظر في الرسالة المستلمة
اختياريًا، الحصول على شهادة المستلم للتشفير
إرسال رسالة موقعة ومشفرة عبر SparkPost، والنظر في الرسالة المستلمة
تجربة أداة مستقلة مفيدة "mimeshow" لفحص داخليات ملف البريد الإلكتروني.
حسنًا – لنبدأ!
1. قم بتثبيت الأدوات
أدوات العرض التوضيحي موجودة في Github هنا، مع تعليمات التثبيت الكاملة. قد تلاحظ شعار “build passing” – يقوم Travis و pytest بالتحقق تلقائيًا من حالة البناء. لاحظ أن هذه الأدوات غير مدعومة رسميًا من قبل SparkPost، لكنني حاولت جعلها قوية وسهلة الاستخدام.
إذا كان لديك بعض المعرفة بـ Python و pip، يجب أن يكون التثبيت مألوفًا نوعًا ما. يقوم Pipfile بمعالجة الاعتماديات الخارجية تلقائيًا لك. بمجرد الانتهاء، يمكنك التحقق من أن كل شيء تم تثبيته بتشغيل
./sparkpostSMIME.py -h
يجب أن ترى نص المساعدة الودي. بعد ذلك، نحتاج إلى...
2. احصل على مفتاح المرسل / الشهادة للتوقيع
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=<<ضع مفتاح API الخاص بك هنا>>
أرسل البريد الإلكتروني:
./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> موافق - في 1.15 ثانية
بعد ثوانٍ قليلة، يصل البريد الإلكتروني إلى صندوق بريد Bob. يعرضه Thunderbird بنقطة حمراء على الظرف، مما يشير إلى توقيع المرسل صالح.

نجاح! انتهي من القهوة، لقد استحقيتها. إذا كنت تواجه مشكلة، تحقق من أن عنوان From: في ملف البريد الإلكتروني يتطابق مع اسم ملفات .crt و.pem الخاصة بك.
4. تشفير الرسائل
لتشفير رسالة، تحتاج إلى المفتاح العام للمستلم بصيغة الشهادة. هذا هو ملف نصي يبدو هكذا:
سمات الحزمة 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----- يبدو وكأنه أحرف عشوائية هنا -----END CERTIFICATE-----
هناك شهادة مستلم وهمي لbob@example.com في دليل الاختبارات، لذا يمكنك التدرب معها قبل أن تحصل على شهادة حقيقية:
cd tests ../sparkpostSMIME.py example_email1.eml --sign --encrypt
سترى:
ستلاحظ أن طول الإخراج أطول بكثير منه في رسالة مشفرة لأنه يحمل الكثير من المعلومات الإضافية بالإضافة إلى الرسالة المشفرة نفسها.
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> OK - في 1.168 ثانية
تظهر الرسالة في Thunderbird مع أيقونة التوقيع "النقطة الحمراء" وأيقونة التشفير "القفل".

يمكنك إرسال بريد إلكتروني معقد معتمد على HTML يحتوي على روابط وصور بنفس السهولة، مثل الذي شوهد في الجزء 1. بعض العملاء مثل Thunderbird يطلبون إذنًا لعرض الروابط والصور الخارجية داخل رسائل S/MIME المشفرة، ولكن الرسائل الموقعة فقط تعرض بشكل جيد في العملاء بما في ذلك Thunderbird و Gmail:


لاحظ أن القائمة المنسدلة تعرض "عنوان البريد الإلكتروني تم التحقق منه".
أفكار أخرى وأشياء يجب الانتباه إليها
تأخذ هذه الأداة نهجًا بسيطًا للغاية في جمع المفاتيح الضرورية - فهي تقوم فقط بالبحث عن الملفات المسماة في الدليل الحالي. يمكن بسهولة إضافة ترتيبات أكثر تعقيدًا، مثل حفظ جميع المفاتيح في قاعدة بيانات، لكنني أردت أن يكون الكود بسيطًا قدر الإمكان.
يمكنك تضمين مستلمين آخرين باستخدام Cc: و Bcc: وسيتم تسليمهم؛ قد يكون هذا مفيدًا لأغراض الأرشفة. الرسائل الموقعة يتم استلامها ويمكن عرضها بواسطة مستلمين آخرين كاملة مع التوقيع. تقوم الأداة بإزالة ترويسة Bcc: من الرسالة التي يتم تسليمها (مثلما يفعل عميل البريد الإلكتروني المكتبي).
لضمان مرور الرسائل من خلال SparkPost دون تغيير (مما قد يفسد التوقيع)، تقوم الأداة بتعيين خيارات API للبريد الإلكتروني "التعاملات"، مع تعطيل تتبع الفتحات والنقرات.
إذا كنت تستخدم التشفير، ضع في اعتبارك أن الأداة تلتقط عنوان To: الوحيد لذلك. يمكن للمستلمين الآخرين فك تشفير نص الرسالة فقط إذا كان لديهم المفتاح الخاص بالمستلم To:. إذا كنت تستخدم المستلمين الثانويين فقط كسجل للتسليمات التي تمت، على سبيل المثال، فقد يكون ذلك مناسبًا على أي حال.
موقعة، مختومة، تم تسليمها... أنا لك
هذا هو ملخصنا السريع حول كيفية توقيع، ختم وإرسال رسائل S/MIME عبر SparkPost. تذكير سريع: يوجد مشروع العرض التجريبي على Github هنا، لقد حاولت جعله سهل التثبيت والاستخدام.
ميزة إضافية: عرض أجزاء MIME باستخدام "mimeshow"
الملفات المتعددة الأجزاء بتنسيق RFC822 MIME معقدة للغاية للقراءة بالنسبة للبشر. يتضمن المشروع أداة مستقلة لتسهيل هذا الأمر، تُسمى mimeshow.
هذه الأداة تأخذ أي ملفات بريد إلكتروني لديك (ليس فقط الخاصة بـ S/MIME) وتظهر الهيكل الداخلي. إليك مثال:
./mimeshow.py testcases/img_and_attachment.eml
سترى:
يمكنك أيضًا استخدامها كعامل تصفية لتقديم ملخص يمكن قراءته من قبل البشر لإخراج sparkpostSMIME:
./sparkpostSMIME.py tests/declaration.eml --sign --encrypt | ./mimeshow.py
سترى:
أخيرًا...
لتلخيص - لقد قمنا بتثبيت بعض الأدوات البسيطة لسطر الأوامر لتوقيع وتشفير البريد الإلكتروني (مستودع Github موجود هنا، مع تعليمات التثبيت الكاملة).
لقد حصلنا على مفتاح المرسل / الشهادة للتوقيع، وأرسلنا رسالة موقعة عبر SparkPost. حصلنا على شهادة المستلم للتشفير، ثم أرسلنا رسالة موقعة ومشفرة عبر SparkPost.
أخيرًا، جربنا الأداة المستقلة المفيدة "mimeshow" للنظر في مكونات ملف البريد الإلكتروني الداخلية.
هذا كل شيء في الوقت الحالي! أراكم قريبًا!