
في هذه السلسلة، رأينا كيف أن تضمين توقيع S/MIME عملية بسيطة إلى حد ما. إرسال بريد مشفر باستخدام S/MIME أكثر تعقيدًا لأنه يتطلب الحصول على المفاتيح العامة للمستلمين. الأمر بسيط عندما تستخدم عميل بريد إلكتروني للبشر مثل Thunderbird – ولكن كيف يمكن أن يعمل ذلك مع تدفقات البريد الإلكتروني المولدة بواسطة التطبيقات؟
في الجزء 1، أجرينا جولة سريعة على S/MIME، واستعرضنا التوقيع وتشفير تدفقات الرسائل الخاصة بنا عبر مجموعة من عملاء البريد. الجزء 2 قادنا من خلال أداة سطر أوامر بسيطة للتوقيع على الرسائل وتشفيرها، ثم إرسالها عبر SparkPost. أظهر الجزء 3 كيفية إدخال تدفقات بريد آمنة في المنصات المحلية مثل Port25 PowerMTA وMomentum.
في هذه السلسلة، رأينا كيف أن تضمين توقيع S/MIME أمر بسيط نسبيًا. إرسال بريد مشفر باستخدام S/MIME أكثر تعقيدًا لأنك تحتاج إلى الحصول على مفاتيح عامة للمستلمين. هذا شيء عندما تستخدم عميل بريد للبشر مثل Thunderbird – ولكن كيف يمكن أن يعمل ذلك مع تدفقات البريد الإلكتروني التي تُنشأ بواسطة التطبيقات؟
لكن انتظر – هناك طريقة أخرى للوصول إلى موردور للحصول على تلك المفاتيح. يمكن لخدمتك دعوة عملائك (عبر البريد الإلكتروني، بالطبع) لإرسال بريد موقع إليك مجددًا إلى عنوان خدمة العملاء المعروف. باستخدام القوى السحرية لـSparkPost Inbound Relay webhooks، سنستخرج المفتاح العام ونخزنه لتستخدمه.
يمكننا تلخيص هذا في حالة استخدام بسيطة:
بصفتي مستلِما للرسائل، أقدم لخدمتك توقيع بريدي الإلكتروني الشخصي عبر البريد الإلكتروني، بحيث يمكن إرسال الرسائل إليّ في المستقبل في شكل مشفر باستخدام S/MIME.
من هذا، دعونا نستخلص بعض المتطلبات الأكثر تفصيلًا:
نحتاج إلى خدمة بريد إلكتروني واردة موثوقة ومستمرة لتلقي تلك الرسائل الموقعة.
لا ينبغي أن تكون هناك متطلبات خاصة على صيغة البريد، بخلاف أن يحمل توقيع S/MIME.
لأن أي شخص يمكن أن يحاول إرسال بريد إلى هذه الخدمة، يجب تصميمها بشكل دفاعي، على سبيل المثال، لرفض الرسائل "المزيفة" من الفاعلين السيئين. سوف تكون هناك حاجة إلى طبقات عديدة من الفحص.
إذا تم التحقق من كل شيء بنجاح، ستقوم الخدمة بتخزين الشهادة في ملف، باستخدام تنسيق Privacy-Enhanced Mail (PEM).
هناك بعض المتطلبات غير الوظيفة:
قد يكون من الصعب رؤية خدمات الويب التي تتعامل بشكل آلي فقط من الاستجابات لما يحدث داخليًا. ينبغي أن توفر الخدمة سجلات على مستوى التطبيق قابلة للقراءة البشرية بشكل واسع. وبالأخص، ينبغي تسجيل عمليات تحليل وفحص الشهادات.
نضيف حالات اختبار لأجزاء التطبيق الداخلية، باستخدام إطار العمل الجميل Pytest، ونقوم بتشغيل تلك الاختبارات تلقائيًا عند التسجيل باستخدام تكامل Travis CI مع GitHub.
حسنًا – دعونا نبدأ!
1. نظرة عامة على الحل
إليك كيف ستبدو الحلول العامة.

2. تثبيت، تكوين وبدء تشغيل التطبيق الويب
3. إعداد Webhooks استقبال SparkPost
أولاً، نختار نطاقًا لاستخدامه كعنوان رسائلنا الواردة – هنا، سيكون inbound.thetucks.com. قم بإعداد النطاق الخاص بك وفقًا لهذا الدليل. الخطوات التي استخدمتها بالتفصيل:
3.1 إضافة سجلات MX
ستحتاج إلى الوصول إلى حساب مزود خدمة الإنترنت الخاص بك. عند الانتهاء، يمكنك التحقق منها باستخدام dig – ها هو الأمر الخاص بنطاقي.
dig +short MX inbound.thetucks.com
يجب أن ترى:
10 rx3.sparkpostmail.com. 10 rx1.sparkpostmail.com. 10 rx2.sparkpostmail.com.
3.2 إنشاء نطاق وارد
استخدم مجموعة SparkPost Postman API، تحديد النطاقات الواردة / إنشاء .. الاتصال. يحتوي جسم طلب POST على النطاق الخاص بك، على سبيل المثال:
{ "domain": "inbound.thetucks.com" }

3.3 إنشاء Webhook ترحيل
قم بإنشاء Webhook ترحيل وارد باستخدام الاتصال Postman المناسب. يحتوي جسم الرسالة في حالتي على:
{ "name": "Certificate Collection Webhook", "target": "https://app.trymsys.net:8855/", "auth_token": "t0p s3cr3t t0k3n", "match": { "protocol": "SMTP", "domain": "inbound.thetucks.com" } }
كما ذكر من قبل، أوصي بتعيين auth_token إلى القيمة السرية الخاصة بك، كما هو موضح في ملف webapp.ini على مضيفك.
يحتاج قيمة "target" لمطابقة عنوان مضيفك والمنفذ TCP الذي ستستضيف فيه تطبيق الويب.
يحتاج قيمة "domain" لمطابقة سجلات MX التي تم إعدادها في الخطوة 1.

هذا هو! تم الانتهاء من الأعمال الداخلية. يجب أن تكون الآن قادرًا على إرسال الشهادات إلى العنوان الوارد الخاص بك، سيتم معالجتها وتظهر على مضيف تطبيق الويب الخاص بك – في هذه الحالة، ملف باسم bob.lumreeker@gmail.com.crt.
الآن يمكنك إرسال رسائل بريد إلكتروني مشفرة إلى Bob، باستخدام الأدوات الموصوفة في الجزئين 2 و3 من هذه السلسلة.
يمكنك فحص محتويات الشهادة باستخدام:
openssl x509 -inform PEM -in bob.lumreeker\@gmail.com.crt -text -noout
4. الداخلية: التحقق من DKIM، التحقق من الشهادة
يتحقق التطبيق من أن رسائل البريد الإلكتروني المستلمة تحتوي على DKIM صالح ويتحقق من أن الشهادات نفسها صالحة، كما هو موضح هنا. هناك ملاحظات تنفيذية في الداخل أيضًا، وأفكار لمزيد من العمل.
تلخيص...
لقد رأينا كيف يمكن جمع مفاتيح المستلمين العامة بسهولة باستخدام بريد إلكتروني إلى عنوان ويب هوكس للاستقبال. بمجرد الانتهاء من ذلك، يمكن لهؤلاء المستلمين تلقي رسائلهم في شكل مشفر باستخدام S/MIME.
هذا كل شيء في الوقت الحالي! إرسال سعيد.