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

النقاط الرئيسية
الفرضية: إرسال بريد إلكتروني مشفر باستخدام 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، قمنا بجولة سريعة في S/MIME، نلقي نظرة على التوقيع وتشفير تدفقات رسائلنا عبر مجموعة من عملاء البريد الإلكتروني. الجزء 2 أخذنا من خلال أداة خط الأوامر البسيطة لتوقيع وتشفير رسائل البريد الإلكتروني، ثم إرسالها من خلال SparkPost. الجزء 3 أظهر كيفية حقن تدفقات البريد الآمن في المنصات المحلية مثل Port25 PowerMTA و Momentum.
في هذه السلسلة، رأينا كيف أن تضمين توقيع S/MIME هو أمر بسيط إلى حد ما. إرسال البريد المشفر باستخدام S/MIME أكثر تعقيدًا لأنه يتعين عليك الحصول على مفاتيح الجمهور للمستلمين. إن الأمر شيء عندما تستخدم عميل بريد إلكتروني للبشر مثل Thunderbird - لكن كيف يمكن أن يعمل ذلك مع تدفقات البريد الإلكتروني التي تم إنشاؤها بواسطة التطبيقات؟ تتطلب رسائل البريد الإلكتروني التي تم إنشاؤها بواسطة التطبيقات، مثل تلك المستخدمة في منصات المواعدة، استراتيجية دقيقة لتعظيم الانخراط. شاهد كيف تخلق تطبيقات المواعدة تجارب بريد إلكتروني مثيرة ومشغلة.
لكن انتظر - هناك طريقة أخرى للدخول إلى موردور للحصول على تلك المفاتيح. يمكن لخدمتك دعوة عملائك (عبر البريد الإلكتروني، بالطبع) لإرسال بريد موقّع إليك إلى عنوان خدمة العملاء المعروف. باستخدام القوى السحرية لـ SparkPost Inbound Relay webhooks، سنستخرج ونخزن تلك المفتاح العام لاستخدامك.
يمكننا تلخيص هذا في حالة استخدام بسيطة:
كمستلم للرسائل، أقدم خدمتكم بتوقيع بريدي الشخصي عبر البريد الإلكتروني، حتى يمكن إرسال رسائل البريد الإلكتروني إليّ في شكل مشفر باستخدام S/MIME في المستقبل.
من هنا، دعنا نستنتج بعض المتطلبات الأكثر تفصيلاً:
نحن بحاجة إلى خدمة بريد إلكتروني دائم وموثوق بها لاستقبال تلك الرسائل الموقعة.
يجب ألا تكون هناك متطلبات خاصة على تنسيق البريد، بخلاف أنه يجب أن يحمل توقيع S/MIME.
لأن أي شخص يمكنه محاولة إرسال بريد إلى هذه الخدمة، يجب أن يتم تصميمها بشكل دفاعي، على سبيل المثال، لرفض الرسائل
في الجزء 1، قمنا بجولة سريعة في S/MIME، نلقي نظرة على التوقيع وتشفير تدفقات رسائلنا عبر مجموعة من عملاء البريد الإلكتروني. الجزء 2 أخذنا من خلال أداة خط الأوامر البسيطة لتوقيع وتشفير رسائل البريد الإلكتروني، ثم إرسالها من خلال SparkPost. الجزء 3 أظهر كيفية حقن تدفقات البريد الآمن في المنصات المحلية مثل Port25 PowerMTA و Momentum.
في هذه السلسلة، رأينا كيف أن تضمين توقيع S/MIME هو أمر بسيط إلى حد ما. إرسال البريد المشفر باستخدام S/MIME أكثر تعقيدًا لأنه يتعين عليك الحصول على مفاتيح الجمهور للمستلمين. إن الأمر شيء عندما تستخدم عميل بريد إلكتروني للبشر مثل Thunderbird - لكن كيف يمكن أن يعمل ذلك مع تدفقات البريد الإلكتروني التي تم إنشاؤها بواسطة التطبيقات؟ تتطلب رسائل البريد الإلكتروني التي تم إنشاؤها بواسطة التطبيقات، مثل تلك المستخدمة في منصات المواعدة، استراتيجية دقيقة لتعظيم الانخراط. شاهد كيف تخلق تطبيقات المواعدة تجارب بريد إلكتروني مثيرة ومشغلة.
لكن انتظر - هناك طريقة أخرى للدخول إلى موردور للحصول على تلك المفاتيح. يمكن لخدمتك دعوة عملائك (عبر البريد الإلكتروني، بالطبع) لإرسال بريد موقّع إليك إلى عنوان خدمة العملاء المعروف. باستخدام القوى السحرية لـ SparkPost Inbound Relay webhooks، سنستخرج ونخزن تلك المفتاح العام لاستخدامك.
يمكننا تلخيص هذا في حالة استخدام بسيطة:
كمستلم للرسائل، أقدم خدمتكم بتوقيع بريدي الشخصي عبر البريد الإلكتروني، حتى يمكن إرسال رسائل البريد الإلكتروني إليّ في شكل مشفر باستخدام S/MIME في المستقبل.
من هنا، دعنا نستنتج بعض المتطلبات الأكثر تفصيلاً:
نحن بحاجة إلى خدمة بريد إلكتروني دائم وموثوق بها لاستقبال تلك الرسائل الموقعة.
يجب ألا تكون هناك متطلبات خاصة على تنسيق البريد، بخلاف أنه يجب أن يحمل توقيع S/MIME.
لأن أي شخص يمكنه محاولة إرسال بريد إلى هذه الخدمة، يجب أن يتم تصميمها بشكل دفاعي، على سبيل المثال، لرفض الرسائل
1. نظرة عامة على الحل
إليك كيف ستبدو الحل الشامل.

إليك كيف ستبدو الحل الشامل.

إليك كيف ستبدو الحل الشامل.

2. تثبيت وتكوين وبدء تطبيق الويب
سنبدأ بهذه الجزء، لذا سيكون لدينا اختباره بالكامل قبل توصيل ويب هوكس الخاص بتوصيل inbound.
التطبيق الويب متضمن في نفس مشروع GitHub كالأجزاء 1 – 3، لذا إذا كنت قد اتبعت تلك الأجزاء، فإن لديك بالفعل. إليك الأجزاء الجديدة:
برنامج readSMIMEsig.py - قراءة بريد إلكتروني وتحليل الشهادات الوسيطة وشهادات المستخدم.
برنامج webapp.py - تطبيق ويب بسيط متوافق مع Flask للاستخدام مع ويب هوكس توصيل SparkPost.
webapp.ini - ملف تكوين لما سبق. يمكّن ملف التكوين من تمرير نفس القيم بسهولة إلى كل من تطبيقات سطر الأوامر والتطبيقات الويب.
يجب أن تضمن أن المضيف لديك لديه رقم المنفذ TCP الصحيح مفتوحاً للطلبات الواردة من العالم الخارجي حتى يتمكن SparkPost من إرسال رسائل إلى تطبيقك. إذا كنت مستضافًا على AWS EC2، على سبيل المثال، فسيتعين عليك تكوين مجموعة الأمان الخاصة بنسختك.
تم توفير التعليمات الخاصة بتكوين وبدء تطبيق الويب في دليل الإعداد الخاص بنا - إنه سهل للغاية. للتحقق مما إذا كان تطبيقك يعمل ويمكن الوصول إليه من العالم الخارجي، يمكنك إرسال طلبات (فارغة) من مضيف آخر باستخدام curl، على سبيل المثال:
curl -X POST https://app.trymsys.net:8855/
يجب أن ترى ردًا مثل:
{"message":"Unknown Content-Type in request headers"}
هذه علامة جيدة - تطبيقك يعمل!
في webapp.log على المضيف لديك، سترى مخرجات مشابهة لما يلي:
2019-01-15 00:11:07,575,root,INFO,Request from 38.96.5.10,scheme=https,path=/ 2019-01-15 00:11:07,575,root,INFO,| len(headers)=3,len(body)=None 2019-01-15 00:11:07,575,root,INFO,| Unknown Content-Type: None
لمساعدتك في التعامل مع البيانات الحقيقية في تطبيقك على الفور، يمكنك استيراد طلب Postman هذا المحدد من مستودع المشروع. هذا يحاكي ما ستفعله حسابات SparkPost الخاصة بك، أي أنه يرسل POST عبر https يحتوي على بريد إلكتروني مع شهادة صالحة محددة (تعود إلى حساب اختبار لي) إلى تطبيقك.
كل ما عليك فعله هو تغيير عنوان الهدف في الطلب (في المربع الرمادي أعلاه) ليتناسب مع تثبيتك. إذا قمت بتغيير قيمة الرمز المميز في webapp.ini، قم بتعديل قيمة رأس الطلب في Postman لتتوافق.
إذا كان تطبيقك يعمل، سترى ردًا "200 OK" في Postman. سوف يحتوي ملف webapp.log الخاص بمضيفك على مخرجات مثل هذه:
2019-01-15 00:11:48,554,root,INFO,Request from 38.96.5.10,scheme=https,path=/ 2019-01-15 00:11:48,554,root,INFO,| len(headers)=10,len(body)=14778 2019-01-15 00:11:48,555,root,INFO,| msg_from=bob.lumreeker@gmail.com,rcpt_to=secureme@inbound.thetucks.com,len(email_rfc822)=9223 2019-01-15 00:11:48,599,root,INFO,| from=bob.lumreeker@gmail.com,DKIM passed 2019-01-15 00:11:48,600,root,INFO,| content-type=multipart/signed; protocol="application/pkcs7-signature"; micalg=sha-256; boundary="------------ms010908020707040304020406",content-description=None 2019-01-15 00:11:48,600,root,INFO,| content-type=text/plain; charset=utf-8; format=flowed,content-description=None 2019-01-15 00:11:48,600,root,INFO,| content-type=application/pkcs7-signature; name="smime.p7s",content-description=S/MIME Cryptographic Signature 2019-01-15 00:11:48,600,root,INFO,| filename=smime.p7s,bytes=3998 2019-01-15 00:11:48,601,root,INFO,| Certificate: subject email_address=['bob.lumreeker@gmail.com'],not_valid_before=2018-10-03 00:00:00,not_valid_after=2019-10-03 23:59:59,hash_algorithm=sha256,key_size=2048 bytes, issuer={'countryName': 'GB', 'stateOrProvinceName': 'Greater Manchester', 'localityName': 'Salford', 'organizationName': 'COMODO CA Limited', 'commonName': 'COMODO RSA Client Authentication and Secure Email CA'} 2019-01-15 00:11:48,602,root,INFO,| Certificate: subject email_address=[],not_valid_before=2013-01-10 00:00:00,not_valid_after=2028-01-09 23:59:59,hash_algorithm=sha384,key_size=2048 bytes, issuer={'countryName': 'GB', 'stateOrProvinceName': 'Greater Manchester', 'localityName': 'Salford', 'organizationName': 'COMODO CA Limited', 'commonName': 'COMODO RSA Certification Authority'} 2019-01-15 00:11:48,616,root,INFO,| written file ./bob.lumreeker@gmail.com.crt,bytes=1870,ok=True
لإجراء فحص سريع، ابحث عن السطر الأخير - إذا قال "written file"، فأنت بخير. البقية من هذا تُظهر فحص DKIM وعملية التحقق من الشهادة.
سنبدأ بهذه الجزء، لذا سيكون لدينا اختباره بالكامل قبل توصيل ويب هوكس الخاص بتوصيل inbound.
التطبيق الويب متضمن في نفس مشروع GitHub كالأجزاء 1 – 3، لذا إذا كنت قد اتبعت تلك الأجزاء، فإن لديك بالفعل. إليك الأجزاء الجديدة:
برنامج readSMIMEsig.py - قراءة بريد إلكتروني وتحليل الشهادات الوسيطة وشهادات المستخدم.
برنامج webapp.py - تطبيق ويب بسيط متوافق مع Flask للاستخدام مع ويب هوكس توصيل SparkPost.
webapp.ini - ملف تكوين لما سبق. يمكّن ملف التكوين من تمرير نفس القيم بسهولة إلى كل من تطبيقات سطر الأوامر والتطبيقات الويب.
يجب أن تضمن أن المضيف لديك لديه رقم المنفذ TCP الصحيح مفتوحاً للطلبات الواردة من العالم الخارجي حتى يتمكن SparkPost من إرسال رسائل إلى تطبيقك. إذا كنت مستضافًا على AWS EC2، على سبيل المثال، فسيتعين عليك تكوين مجموعة الأمان الخاصة بنسختك.
تم توفير التعليمات الخاصة بتكوين وبدء تطبيق الويب في دليل الإعداد الخاص بنا - إنه سهل للغاية. للتحقق مما إذا كان تطبيقك يعمل ويمكن الوصول إليه من العالم الخارجي، يمكنك إرسال طلبات (فارغة) من مضيف آخر باستخدام curl، على سبيل المثال:
curl -X POST https://app.trymsys.net:8855/
يجب أن ترى ردًا مثل:
{"message":"Unknown Content-Type in request headers"}
هذه علامة جيدة - تطبيقك يعمل!
في webapp.log على المضيف لديك، سترى مخرجات مشابهة لما يلي:
2019-01-15 00:11:07,575,root,INFO,Request from 38.96.5.10,scheme=https,path=/ 2019-01-15 00:11:07,575,root,INFO,| len(headers)=3,len(body)=None 2019-01-15 00:11:07,575,root,INFO,| Unknown Content-Type: None
لمساعدتك في التعامل مع البيانات الحقيقية في تطبيقك على الفور، يمكنك استيراد طلب Postman هذا المحدد من مستودع المشروع. هذا يحاكي ما ستفعله حسابات SparkPost الخاصة بك، أي أنه يرسل POST عبر https يحتوي على بريد إلكتروني مع شهادة صالحة محددة (تعود إلى حساب اختبار لي) إلى تطبيقك.
كل ما عليك فعله هو تغيير عنوان الهدف في الطلب (في المربع الرمادي أعلاه) ليتناسب مع تثبيتك. إذا قمت بتغيير قيمة الرمز المميز في webapp.ini، قم بتعديل قيمة رأس الطلب في Postman لتتوافق.
إذا كان تطبيقك يعمل، سترى ردًا "200 OK" في Postman. سوف يحتوي ملف webapp.log الخاص بمضيفك على مخرجات مثل هذه:
2019-01-15 00:11:48,554,root,INFO,Request from 38.96.5.10,scheme=https,path=/ 2019-01-15 00:11:48,554,root,INFO,| len(headers)=10,len(body)=14778 2019-01-15 00:11:48,555,root,INFO,| msg_from=bob.lumreeker@gmail.com,rcpt_to=secureme@inbound.thetucks.com,len(email_rfc822)=9223 2019-01-15 00:11:48,599,root,INFO,| from=bob.lumreeker@gmail.com,DKIM passed 2019-01-15 00:11:48,600,root,INFO,| content-type=multipart/signed; protocol="application/pkcs7-signature"; micalg=sha-256; boundary="------------ms010908020707040304020406",content-description=None 2019-01-15 00:11:48,600,root,INFO,| content-type=text/plain; charset=utf-8; format=flowed,content-description=None 2019-01-15 00:11:48,600,root,INFO,| content-type=application/pkcs7-signature; name="smime.p7s",content-description=S/MIME Cryptographic Signature 2019-01-15 00:11:48,600,root,INFO,| filename=smime.p7s,bytes=3998 2019-01-15 00:11:48,601,root,INFO,| Certificate: subject email_address=['bob.lumreeker@gmail.com'],not_valid_before=2018-10-03 00:00:00,not_valid_after=2019-10-03 23:59:59,hash_algorithm=sha256,key_size=2048 bytes, issuer={'countryName': 'GB', 'stateOrProvinceName': 'Greater Manchester', 'localityName': 'Salford', 'organizationName': 'COMODO CA Limited', 'commonName': 'COMODO RSA Client Authentication and Secure Email CA'} 2019-01-15 00:11:48,602,root,INFO,| Certificate: subject email_address=[],not_valid_before=2013-01-10 00:00:00,not_valid_after=2028-01-09 23:59:59,hash_algorithm=sha384,key_size=2048 bytes, issuer={'countryName': 'GB', 'stateOrProvinceName': 'Greater Manchester', 'localityName': 'Salford', 'organizationName': 'COMODO CA Limited', 'commonName': 'COMODO RSA Certification Authority'} 2019-01-15 00:11:48,616,root,INFO,| written file ./bob.lumreeker@gmail.com.crt,bytes=1870,ok=True
لإجراء فحص سريع، ابحث عن السطر الأخير - إذا قال "written file"، فأنت بخير. البقية من هذا تُظهر فحص DKIM وعملية التحقق من الشهادة.
سنبدأ بهذه الجزء، لذا سيكون لدينا اختباره بالكامل قبل توصيل ويب هوكس الخاص بتوصيل inbound.
التطبيق الويب متضمن في نفس مشروع GitHub كالأجزاء 1 – 3، لذا إذا كنت قد اتبعت تلك الأجزاء، فإن لديك بالفعل. إليك الأجزاء الجديدة:
برنامج readSMIMEsig.py - قراءة بريد إلكتروني وتحليل الشهادات الوسيطة وشهادات المستخدم.
برنامج webapp.py - تطبيق ويب بسيط متوافق مع Flask للاستخدام مع ويب هوكس توصيل SparkPost.
webapp.ini - ملف تكوين لما سبق. يمكّن ملف التكوين من تمرير نفس القيم بسهولة إلى كل من تطبيقات سطر الأوامر والتطبيقات الويب.
يجب أن تضمن أن المضيف لديك لديه رقم المنفذ TCP الصحيح مفتوحاً للطلبات الواردة من العالم الخارجي حتى يتمكن SparkPost من إرسال رسائل إلى تطبيقك. إذا كنت مستضافًا على AWS EC2، على سبيل المثال، فسيتعين عليك تكوين مجموعة الأمان الخاصة بنسختك.
تم توفير التعليمات الخاصة بتكوين وبدء تطبيق الويب في دليل الإعداد الخاص بنا - إنه سهل للغاية. للتحقق مما إذا كان تطبيقك يعمل ويمكن الوصول إليه من العالم الخارجي، يمكنك إرسال طلبات (فارغة) من مضيف آخر باستخدام curl، على سبيل المثال:
curl -X POST https://app.trymsys.net:8855/
يجب أن ترى ردًا مثل:
{"message":"Unknown Content-Type in request headers"}
هذه علامة جيدة - تطبيقك يعمل!
في webapp.log على المضيف لديك، سترى مخرجات مشابهة لما يلي:
2019-01-15 00:11:07,575,root,INFO,Request from 38.96.5.10,scheme=https,path=/ 2019-01-15 00:11:07,575,root,INFO,| len(headers)=3,len(body)=None 2019-01-15 00:11:07,575,root,INFO,| Unknown Content-Type: None
لمساعدتك في التعامل مع البيانات الحقيقية في تطبيقك على الفور، يمكنك استيراد طلب Postman هذا المحدد من مستودع المشروع. هذا يحاكي ما ستفعله حسابات SparkPost الخاصة بك، أي أنه يرسل POST عبر https يحتوي على بريد إلكتروني مع شهادة صالحة محددة (تعود إلى حساب اختبار لي) إلى تطبيقك.
كل ما عليك فعله هو تغيير عنوان الهدف في الطلب (في المربع الرمادي أعلاه) ليتناسب مع تثبيتك. إذا قمت بتغيير قيمة الرمز المميز في webapp.ini، قم بتعديل قيمة رأس الطلب في Postman لتتوافق.
إذا كان تطبيقك يعمل، سترى ردًا "200 OK" في Postman. سوف يحتوي ملف webapp.log الخاص بمضيفك على مخرجات مثل هذه:
2019-01-15 00:11:48,554,root,INFO,Request from 38.96.5.10,scheme=https,path=/ 2019-01-15 00:11:48,554,root,INFO,| len(headers)=10,len(body)=14778 2019-01-15 00:11:48,555,root,INFO,| msg_from=bob.lumreeker@gmail.com,rcpt_to=secureme@inbound.thetucks.com,len(email_rfc822)=9223 2019-01-15 00:11:48,599,root,INFO,| from=bob.lumreeker@gmail.com,DKIM passed 2019-01-15 00:11:48,600,root,INFO,| content-type=multipart/signed; protocol="application/pkcs7-signature"; micalg=sha-256; boundary="------------ms010908020707040304020406",content-description=None 2019-01-15 00:11:48,600,root,INFO,| content-type=text/plain; charset=utf-8; format=flowed,content-description=None 2019-01-15 00:11:48,600,root,INFO,| content-type=application/pkcs7-signature; name="smime.p7s",content-description=S/MIME Cryptographic Signature 2019-01-15 00:11:48,600,root,INFO,| filename=smime.p7s,bytes=3998 2019-01-15 00:11:48,601,root,INFO,| Certificate: subject email_address=['bob.lumreeker@gmail.com'],not_valid_before=2018-10-03 00:00:00,not_valid_after=2019-10-03 23:59:59,hash_algorithm=sha256,key_size=2048 bytes, issuer={'countryName': 'GB', 'stateOrProvinceName': 'Greater Manchester', 'localityName': 'Salford', 'organizationName': 'COMODO CA Limited', 'commonName': 'COMODO RSA Client Authentication and Secure Email CA'} 2019-01-15 00:11:48,602,root,INFO,| Certificate: subject email_address=[],not_valid_before=2013-01-10 00:00:00,not_valid_after=2028-01-09 23:59:59,hash_algorithm=sha384,key_size=2048 bytes, issuer={'countryName': 'GB', 'stateOrProvinceName': 'Greater Manchester', 'localityName': 'Salford', 'organizationName': 'COMODO CA Limited', 'commonName': 'COMODO RSA Certification Authority'} 2019-01-15 00:11:48,616,root,INFO,| written file ./bob.lumreeker@gmail.com.crt,bytes=1870,ok=True
لإجراء فحص سريع، ابحث عن السطر الأخير - إذا قال "written file"، فأنت بخير. البقية من هذا تُظهر فحص DKIM وعملية التحقق من الشهادة.
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.
الآن يمكنك إرسال رسائل بريد إلكتروني مشفرة إلى بوب، باستخدام الأدوات الموضحة في الأجزاء 2 & 3 من هذه السلسلة.
يمكنك فحص محتويات الشهادة باستخدام:
openssl x509 -inform PEM -in bob.lumreeker\@gmail.com.crt -text -noout
أولاً، نختار نطاقًا لاستخدامه كعنوان رسالتنا الواردة - هنا سيكون 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.
الآن يمكنك إرسال رسائل بريد إلكتروني مشفرة إلى بوب، باستخدام الأدوات الموضحة في الأجزاء 2 & 3 من هذه السلسلة.
يمكنك فحص محتويات الشهادة باستخدام:
openssl x509 -inform PEM -in bob.lumreeker\@gmail.com.crt -text -noout
أولاً، نختار نطاقًا لاستخدامه كعنوان رسالتنا الواردة - هنا سيكون 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.
الآن يمكنك إرسال رسائل بريد إلكتروني مشفرة إلى بوب، باستخدام الأدوات الموضحة في الأجزاء 2 & 3 من هذه السلسلة.
يمكنك فحص محتويات الشهادة باستخدام:
openssl x509 -inform PEM -in bob.lumreeker\@gmail.com.crt -text -noout
4. داخلي: التحقق من DKIM، والتحقق من الشهادة
تتحقق التطبيق من أن رسائل البريد الإلكتروني المستلمة تحتوي على DKIM صحيح وتتحقق من أن الشهادات نفسها صالحة، كما هو موضح هنا. هناك ملاحظات تنفيذية في ذلك أيضًا، وأفكار لمزيد من العمل.
تتحقق التطبيق من أن رسائل البريد الإلكتروني المستلمة تحتوي على DKIM صحيح وتتحقق من أن الشهادات نفسها صالحة، كما هو موضح هنا. هناك ملاحظات تنفيذية في ذلك أيضًا، وأفكار لمزيد من العمل.
تتحقق التطبيق من أن رسائل البريد الإلكتروني المستلمة تحتوي على DKIM صحيح وتتحقق من أن الشهادات نفسها صالحة، كما هو موضح هنا. هناك ملاحظات تنفيذية في ذلك أيضًا، وأفكار لمزيد من العمل.
في الختام…
لقد رأينا كيف يمكن جمع مفاتيح الجمهور المستلم بسهولة باستخدام بريد إلكتروني إلى عنوان ويب خاص بالاستلام. بمجرد الانتهاء، يمكن لهؤلاء المستلمين تلقي رسائلهم في شكل مشفر باستخدام S/MIME.
هذا كل شيء في الوقت الحالي! إرسال سعيد.
لقد رأينا كيف يمكن جمع مفاتيح الجمهور المستلم بسهولة باستخدام بريد إلكتروني إلى عنوان ويب خاص بالاستلام. بمجرد الانتهاء، يمكن لهؤلاء المستلمين تلقي رسائلهم في شكل مشفر باستخدام S/MIME.
هذا كل شيء في الوقت الحالي! إرسال سعيد.
لقد رأينا كيف يمكن جمع مفاتيح الجمهور المستلم بسهولة باستخدام بريد إلكتروني إلى عنوان ويب خاص بالاستلام. بمجرد الانتهاء، يمكن لهؤلاء المستلمين تلقي رسائلهم في شكل مشفر باستخدام S/MIME.
هذا كل شيء في الوقت الحالي! إرسال سعيد.



