S/MIME الجزء 4: جمع مفاتيح المستلمين العامة بسهولة – باستخدام واجهات برمجة تطبيقات SparkPost Inbound Relay
البريد الإلكتروني
·

النقاط الرئيسية
الفرضية: إرسال بريد إلكتروني مشفر باستخدام S/MIME ليس صعبًا بمجرد أن تتمكن من جمع المفتاح العام لكل مستلم تلقائيًا. تغلق هذه المشاركة هذه الفجوة باستخدام Webhook لخدمة SparkPost للاستلام لتلقي رسائل البريد الإلكتروني الموقعة، واستخراج الشهادات، وتخزينها للتشفير لاحقًا.
الهدف: بناء خدمة Webhook تعتمد على Flask تستمع للرسائل الموقعة الواردة، والتحقق منها (DKIM + فحص الشهادات)، وكتابة كل مفتاح عام بأمان على القرص لاستخدامه في البريد الآمن الصادر.
النقاط البارزة:
المشكلة: تبادل المفاتيح اليدوي لا يتناسب مع رسائل البريد الإلكتروني الناتجة عن التطبيقات.
الحل: دعوة المستخدمين لإرسال بريد إلكتروني موقّع؛ يقوم Webhook الوارد تلقائيًا بتحليل وتخزين شهادة PEM الخاصة بهم.
خطوات الإعداد:
قم بتكوين النطاق الوارد وسجلات MX (مثلاً، inbound.yourdomain.com).
أنشئ Webhook لت Relay الوارد عبر واجهة برمجة تطبيقات SparkPost تشير إلى نقطة نهاية تطبيقك.
نشر تطبيق Flask صغير (webapp.py) باستخدام التكوين من webapp.ini.
سجل بشكل موسع للشفافية؛ دمج Pytest + Travis CI للتحقق الآلي.
تدابير الأمان:
تحقق من توقيعات DKIM وأصالة الرسالة.
تحقق من سلسلة الثقة في الشهادة قبل التخزين.
استخدم رمز مصادقة سري في ترويسات Webhook.
الناتج:
كل رسالة واردة صالحة تنشئ ملف شهادة مثل bob.lumreeker@gmail.com.crt.
بمجرد التخزين، تمكّن هذه المفاتيح من الردود المشفرة باستخدام السكربتات السابقة من الأجزاء 2 و 3.
أهم النقاط في الأسئلة والأجوبة
لماذا يعتبر جمع مفاتيح المتلقي أمرًا حرجًا للبروتوكول S/MIME؟
لأن التشفير يتطلب المفتاح العام لكل مستلم؛ فإن أتمتة هذه الخطوة تتيح لأي تطبيق إرسال بريد إلكتروني آمن دون تبادل يدوي.
كيف يسهل SparkPost Inbound Relay Webhook جمع المفاتيح؟
يحول أي بريد إلكتروني وارد موقع إلى حمولة JSON منظمة، مما يسمح لتطبيقك بتحليل الشهادات والاحتفاظ بها برمجياً.
ما هي التدابير الوقائية التي تمنع التزوير أو تقديم الطلبات الزائفة؟
تقوم الخدمة بالتحقق من توقيعات DKIM، وتفرض رموز المصادقة، وترفض الرسائل المشوهة أو غير الموقعة.
أين يتم تخزين الشهادات وفي أي صيغة؟
تم كتابتها على القرص بتنسيق PEM (
.crtملفات)، جاهزة للاستخدام من قبل أداة التوقيع/التشفير المبنية في الأجزاء السابقة.ما هي سير工作 المطور؟
قم بتشغيل تطبيق Flask، تحقق باستخدام Postman باستخدام الحمولة النموذجية المقدمة، ثم قم بتوصيله بويب هوك الحي لSparkPost من أجل التشغيل المستمر.
المغزى العام؟
يمكن إدارة مفاتيح S/MIME بشكل كامل بشكل تلقائي باستخدام بضع سطور من Python وSparkPost APIs - مما يوفر تشفيراً قابلاً للتوسيع لأي سير عمل بريد إلكتروني مُولد بواسطة التطبيقات.
في الجزء 1، قمنا بجولة سريعة في S/MIME، نلقي نظرة على التوقيع وتشفير تدفقات رسائلنا عبر مجموعة من عملاء البريد الإلكتروني. الجزء 2 أخذنا من خلال أداة خط الأوامر البسيطة لتوقيع وتشفير رسائل البريد الإلكتروني، ثم إرسالها من خلال SparkPost. الجزء 3 أظهر كيفية حقن تدفقات البريد الآمن في المنصات المحلية مثل Port25 PowerMTA و Momentum.
في هذه السلسلة، رأينا كيف أن تضمين توقيع S/MIME هو أمر بسيط إلى حد ما. إرسال البريد المشفر باستخدام S/MIME أكثر تعقيدًا لأنه يتعين عليك الحصول على مفاتيح الجمهور للمستلمين. إن الأمر شيء عندما تستخدم عميل بريد إلكتروني للبشر مثل Thunderbird - لكن كيف يمكن أن يعمل ذلك مع تدفقات البريد الإلكتروني التي تم إنشاؤها بواسطة التطبيقات؟ تتطلب رسائل البريد الإلكتروني التي تم إنشاؤها بواسطة التطبيقات، مثل تلك المستخدمة في منصات المواعدة، استراتيجية دقيقة لتعظيم الانخراط. شاهد كيف تخلق تطبيقات المواعدة تجارب بريد إلكتروني مثيرة ومشغلة.
لكن انتظر - هناك طريقة أخرى للدخول إلى موردور للحصول على تلك المفاتيح. يمكن لخدمتك دعوة عملائك (عبر البريد الإلكتروني، بالطبع) لإرسال بريد موقّع إليك إلى عنوان خدمة العملاء المعروف. باستخدام القوى السحرية لـ SparkPost Inbound Relay webhooks، سنستخرج ونخزن تلك المفتاح العام لاستخدامك.
يمكننا تلخيص هذا في حالة استخدام بسيطة:
كمستلم للرسائل، أقدم خدمتكم بتوقيع بريدي الشخصي عبر البريد الإلكتروني، حتى يمكن إرسال رسائل البريد الإلكتروني إليّ في شكل مشفر باستخدام S/MIME في المستقبل.
من هنا، دعنا نستنتج بعض المتطلبات الأكثر تفصيلاً:
نحن بحاجة إلى خدمة بريد إلكتروني دائم وموثوق بها لاستقبال تلك الرسائل الموقعة.
يجب ألا تكون هناك متطلبات خاصة على تنسيق البريد، بخلاف أنه يجب أن يحمل توقيع S/MIME.
لأن أي شخص يمكنه محاولة إرسال بريد إلى هذه الخدمة، يجب أن يتم تصميمها بشكل دفاعي، على سبيل المثال، لرفض الرسائل
1. نظرة عامة على الحل
إليك كيف ستبدو الحل الشامل.

2. تثبيت وتكوين وبدء تطبيق الويب
3. إعداد Webhooks الخاص بـ SparkPost للإرسال الوارد
4. داخلي: التحقق من DKIM، والتحقق من الشهادة
تتحقق التطبيق من أن رسائل البريد الإلكتروني المستلمة تحتوي على DKIM صحيح وتتحقق من أن الشهادات نفسها صالحة، كما هو موضح هنا. هناك ملاحظات تنفيذية في ذلك أيضًا، وأفكار لمزيد من العمل.
في الختام…
لقد رأينا كيف يمكن جمع مفاتيح الجمهور المستلم بسهولة باستخدام بريد إلكتروني إلى عنوان ويب خاص بالاستلام. بمجرد الانتهاء، يمكن لهؤلاء المستلمين تلقي رسائلهم في شكل مشفر باستخدام S/MIME.
هذا كل شيء في الوقت الحالي! إرسال سعيد.





