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

Bird

01‏/02‏/2019

البريد الإلكتروني

1 min read

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

النقاط الرئيسية

    • Premise: Sending S/MIME-encrypted email isn’t hard once you can automatically collect each recipient’s public key. This post closes that gap by using SparkPost Inbound Relay Webhooks to receive signed emails, extract certificates, and store them for later encryption.

    • Goal: Build a Flask-based webhook service that listens for incoming signed messages, validates them (DKIM + certificate checks), and safely writes each public key to disk for use in outbound secure mail.

    • Highlights:

      1. Problem: Manual key exchange doesn’t scale for app-generated email.

      2. Solution: Invite users to send a signed email; the inbound webhook automatically parses and stores their PEM certificate.

      3. Setup steps:

        • Configure an Inbound Domain and MX records (e.g., inbound.yourdomain.com).

        • Create an Inbound Relay Webhook via the SparkPost API pointing to your app endpoint.

        • Deploy a small Flask app (webapp.py) using configuration from webapp.ini.

        • Log extensively for transparency; integrate Pytest + Travis CI for automated validation.

      4. Security measures:

        • Verify DKIM signatures and message authenticity.

        • Validate certificate trust chain before storing.

        • Use a secret auth token in webhook headers.

      5. Output:

        • Each valid inbound message creates a certificate file such as bob.lumreeker@gmail.com.crt.

        • Once stored, these keys enable encrypted replies using earlier scripts from parts 2 and 3.

أبرز الأسئلة والأجوبة

  • Why is collecting recipient keys so critical for S/MIME?

    Because encryption requires each recipient’s public key; automating this step lets any app send secure mail without manual exchange.

  • How does SparkPost Inbound Relay Webhook simplify key collection?

    It converts any signed inbound email into a structured JSON payload, allowing your app to parse and persist certificates programmatically.

  • What safeguards prevent spoofing or junk submissions?

    The service validates DKIM signatures, enforces authentication tokens, and rejects malformed or unsigned messages.

  • Where are certificates stored and in what format?

    They’re written to disk in PEM format (.crt files), ready for use by the signing/encryption toolchain built in previous parts.

  • What’s the developer workflow?

    Run the Flask app, verify with Postman using the provided sample payload, then connect it to SparkPost’s live webhook for continuous operation.

  • Overall takeaway?

    S/MIME key management can be fully automated with a few lines of Python and SparkPost APIs—bringing scalable encryption to any app-generated email workflow.

في هذه السلسلة، رأينا كيف أن تضمين توقيع S/MIME عملية بسيطة إلى حد ما. إرسال بريد مشفر باستخدام S/MIME أكثر تعقيدًا لأنه يتطلب الحصول على المفاتيح العامة للمستلمين. الأمر بسيط عندما تستخدم عميل بريد إلكتروني للبشر مثل Thunderbird – ولكن كيف يمكن أن يعمل ذلك مع تدفقات البريد الإلكتروني المولدة بواسطة التطبيقات؟

في الجزء 1، أخذنا جولة سريعة على S/MIME، ننظر في توقيع وتشفير تدفقات الرسائل عبر مجموعة من عملاء البريد. الجزء 2 أوصلنا إلى أداة بسيطة لسطر الأوامر لتوقيع وتشفير الرسائل الإلكترونية، ثم إرسالها عبر SparkPost. الجزء 3 أظهر كيفية إدخال تدفقات البريد الآمنة في المنصات المحلية مثل Port25 PowerMTA وMomentum.

في هذه السلسلة، رأينا أن تضمين توقيع S/MIME هو أمر سهل نسبيًا. إرسال البريد المشفر باستخدام S/MIME هو أكثر تعقيدًا لأنه يجب عليك الحصول على مفاتيح عامة للمستلمين. الأمر سهل عند استخدام عميل بريد للبشر مثل Thunderbird – لكن كيف يمكن أن يعمل ذلك مع تدفقات البريد الإلكتروني التي تنتجها التطبيقات؟ رسائل البريد الإلكتروني التي تولدها التطبيقات، مثل تلك المستخدمة من قبل منصات المواعدة، تتطلب استراتيجية محكمة لتعزيز التفاعل. شاهد كيف تخلق تطبيقات المواعدة تجارب بريد إلكتروني موجَّه مثيرة.

لكن انتظر – هناك طريقة أخرى للدخول إلى Mordor للحصول على تلك المفاتيح. يمكن لخدمتك دعوة عملائك (عبر البريد الإلكتروني، بالطبع) لإرسال بريد إلكتروني موقَّع مرة أخرى إلى عنوان خدمة العملاء المعروف. باستخدام قوى سحرية من SparkPost Inbound Relay webhooks، سنستخلص ونخزن المفتاح العام لك لاستخدامه.

يمكننا تلخيص هذا في حالة استخدام بسيطة:

  • كمستلم للرسائل، أقدم لخدمتك توقيعي الشخصي عبر البريد الإلكتروني، لكي يمكن إرسال الرسائل مستقبلاً لي في شكل مشفر باستخدام S/MIME.

من هنا، دعونا نشتق بعض المتطلبات المفصلة:

  • نحتاج إلى خدمة بريد إلكتروني داخلي موثوقة تعمل بشكل دائم لتلقي تلك الرسائل الموقعة.

  • يجب ألا تكون هناك متطلبات خاصة على تنسيق البريد، بخلاف أنه يجب أن يحتوي على توقيع S/MIME.

  • نظرًا لأنه يمكن لأي شخص محاولة إرسال بريد إلى هذه الخدمة، يجب تصميمها بشكل دفاعي، على سبيل المثال، لرفض الرسائل "المزيفة" من الجهات الفاعلة السيئة. سيكون هناك حاجة لعدة طبقات من الفحص.

  • إذا كان كل شيء صحيح، ستخزن الخدمة الشهادة في ملف، باستخدام تنسيق PEM النصي المعروف.

هناك بعض المتطلبات غير الوظيفية:

  • يمكن أن تكون خدمات الويب هوك من جهاز إلى جهاز صعبة الرؤية فقط من الاستجابات إلى ما يحدث في الداخل. يجب على الخدمة أن توفر سجلات شاملة قابلة للقراءة البشرية على مستوى التطبيقات. يجب تسجيل فحص وتفسير الشهادات بشكل خاص.

  • نضيف حالات اختبار للعمليات الداخلية للتطبيق، باستخدام منصة Pytest الرائعة، وتشغيل تلك الاختبارات تلقائيًا عند عملية الإدراج باستخدام تكامل Travis CI مع GitHub.

حسنًا – دعونا نبدأ!

1. نظرة عامة على الحل

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

Diagram depicting a secure email flow illustrating how emails are verified using certificates for secure transmission.

2. تثبيت، تكوين وبدء تشغيل التطبيق الويب

سنبدأ بهذه الجزئية، حتى نجري جميع الاختبارات اللازمة قبل التعامل مع الروابط الواردة.

يتم تضمين تطبيق الويب في نفس مشروع GitHub مثل الأجزاء 1 – 3، لذا إذا كنت قد تابعت تلك الأجزاء، لديك ذلك بالفعل. هنا الأجزاء الجديدة:

  • برنامج readSMIMEsig.py – قراءة البريد الإلكتروني واستخراج الشهادات المتوسطة وشهادات المستخدم.

  • برنامج webapp.py – تطبيق ويب متوافق مع Flask للاستخدام مع SparkPost Inbound Relay Webhooks.

  • 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، أي إرسال https POST يحتوي على بريد إلكتروني مع شهادة معينة وصالحة (تنتمي إلى حساب اختبار) لتطبيقك.

فقط تحتاج إلى تغيير العنوان الهدف في الطلب (في المربع الرمادي أعلاه) ليتطابق مع إعدادك. إذا غيرت قيمة الرمز في 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

لإجراء فحص سريع، تحقق من السطر الأخير – إذا قال "ملف مكتوب"، فأنت على ما يرام. الباقي يوضح عملية التحقق من DKIM والتحقق من الشهادة.

سنبدأ بهذه الجزئية، حتى نجري جميع الاختبارات اللازمة قبل التعامل مع الروابط الواردة.

يتم تضمين تطبيق الويب في نفس مشروع GitHub مثل الأجزاء 1 – 3، لذا إذا كنت قد تابعت تلك الأجزاء، لديك ذلك بالفعل. هنا الأجزاء الجديدة:

  • برنامج readSMIMEsig.py – قراءة البريد الإلكتروني واستخراج الشهادات المتوسطة وشهادات المستخدم.

  • برنامج webapp.py – تطبيق ويب متوافق مع Flask للاستخدام مع SparkPost Inbound Relay Webhooks.

  • 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، أي إرسال https POST يحتوي على بريد إلكتروني مع شهادة معينة وصالحة (تنتمي إلى حساب اختبار) لتطبيقك.

فقط تحتاج إلى تغيير العنوان الهدف في الطلب (في المربع الرمادي أعلاه) ليتطابق مع إعدادك. إذا غيرت قيمة الرمز في 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

لإجراء فحص سريع، تحقق من السطر الأخير – إذا قال "ملف مكتوب"، فأنت على ما يرام. الباقي يوضح عملية التحقق من DKIM والتحقق من الشهادة.

سنبدأ بهذه الجزئية، حتى نجري جميع الاختبارات اللازمة قبل التعامل مع الروابط الواردة.

يتم تضمين تطبيق الويب في نفس مشروع GitHub مثل الأجزاء 1 – 3، لذا إذا كنت قد تابعت تلك الأجزاء، لديك ذلك بالفعل. هنا الأجزاء الجديدة:

  • برنامج readSMIMEsig.py – قراءة البريد الإلكتروني واستخراج الشهادات المتوسطة وشهادات المستخدم.

  • برنامج webapp.py – تطبيق ويب متوافق مع Flask للاستخدام مع SparkPost Inbound Relay Webhooks.

  • 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، أي إرسال https POST يحتوي على بريد إلكتروني مع شهادة معينة وصالحة (تنتمي إلى حساب اختبار) لتطبيقك.

فقط تحتاج إلى تغيير العنوان الهدف في الطلب (في المربع الرمادي أعلاه) ليتطابق مع إعدادك. إذا غيرت قيمة الرمز في 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

لإجراء فحص سريع، تحقق من السطر الأخير – إذا قال "ملف مكتوب"، فأنت على ما يرام. الباقي يوضح عملية التحقق من 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 إنشاء نطاق وارد

استخدم مجموعة API الخاصة بسبارك بوست في بوست مان، مع تحديد نطاقات الوارد / إنشاء .. استدعاء. يحتوي جسم طلب POST على نطاقك، على سبيل المثال:

{ "domain": "inbound.thetucks.com" }
Postman desktop application with an open tab displaying a 'Create an Inbound Domain' API request, featuring fields such as domain input, several header options, and a JSON payload, aimed at testing and automating API workflows.


3.3 إنشاء رابط ترحيل وارد

قم بإنشاء رابط ترحيل وارد باستخدام استدعاء بوست مان المناسب. يحتوي نص الرسالة في حالتي على:

{
  "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.

Postman interface, showing the process of creating a relay webhook with detailed JSON configuration, with sections including request method, parameters, and code snippet.


هذا كل شيء! السباكة تمت. يجب أن تكون قادرًا الآن على إرسال الشهادات إلى عنوانك الوارد، سيتم معالجتها وستظهر على مضيف تطبيق الويب الخاص بك – في هذه الحالة، ملف باسم bob.lumreeker@gmail.com.crt.

يمكنك الآن إرسال رسائل بريد إلكتروني مشفرة إلى بوب، باستخدام الأدوات الموضحة في الأجزاء 2 & 3 من هذه السلسلة.

يمكنك فحص محتويات شهادة باستخدام:

openssl x509 -inform PEM -in bob.lumreeker\@gmail.com.crt -text -noout

4. الداخلية: التحقق من DKIM، التحقق من الشهادة

يتحقق التطبيق من أن رسائل البريد الإلكتروني المستلمة تحتوي على DKIM صالح ويتحقق من أن الشهادات نفسها صالحة، كما هو موضح هنا. هناك ملاحظات تنفيذية في الداخل أيضًا، وأفكار لمزيد من العمل.

تلخيص...

لقد رأينا كيف يمكن جمع مفاتيح المستلمين العامة بسهولة باستخدام بريد إلكتروني إلى عنوان ويب هوكس للاستقبال. بمجرد الانتهاء من ذلك، يمكن لهؤلاء المستلمين تلقي رسائلهم في شكل مشفر باستخدام S/MIME.

هذا كل شيء في الوقت الحالي! إرسال سعيد.

أخبار أخرى

اقرأ المزيد من هذه الفئة

A person is standing at a desk while typing on a laptop.

منصة AI-native الكاملة التي تتماشى مع نمو عملك.

A person is standing at a desk while typing on a laptop.

منصة AI-native الكاملة التي تتماشى مع نمو عملك.

A person is standing at a desk while typing on a laptop.

منصة AI-native الكاملة التي تتماشى مع نمو عملك.