bg-tutorials

كيفية إنشاء CSR لشهادة توقيع الأكواد على macOS باستخدام Keychain Access

لا يزال تطبيق Keychain Access موجودًا على كل جهاز Mac، وما زال Certificate Assistant الخاص به يولّد طلبات توقيع الشهادات. أما إذا كان هذا الطلب مفيدًا فعلًا لتوقيع الأكواد، فذلك يعتمد كليًا على نوع الشهادة التي تطلبها. بالنسبة لشهادة Apple Developer ID، وهي الشهادة التي تتيح لك توزيع برامج Mac خارج متجر Mac App Store، يُعد Keychain Access الأداة الصحيحة والخطوات أدناه لا تزال سارية. أما بالنسبة لـشهادة توقيع أكواد تجارية صادرة عن جهة إصدار شهادات عامة (Certificate Authority)، وهي النوع المستخدم لتوقيع ملفات Windows التنفيذية وبرامج التثبيت وبرامج التشغيل وتطبيقات Java، فإن الطلب المُولّد عبر Keychain Access لم يعد مقبولًا منذ 1 يونيو 2023، لأن المفتاح الخاص يجب الآن أن يُنشأ على جهاز مادي (hardware).

حدد أولًا أي النوعين تحتاجه، ثم اتبع القسم المطابق.

ما هي شهادة توقيع الأكواد التي تحصل عليها فعليًا؟

يُطلق على كلا المنتجين اسم شهادات توقيع الأكواد، ويثبت كل منهما هوية ناشر البرنامج، لكنهما يصدران عن جهات مختلفة ويتبعان قواعد مختلفة. يصل القراء إلى هذه الصفحة لأن Apple وجهات إصدار الشهادات العامة تستخدم المصطلحات نفسها للإشارة إلى شيئين مختلفين.

  • شهادة Apple Developer ID. صادرة عن Apple، ضمن جهة إصدار الشهادات الخاصة بها Developer ID Certification Authority، لأعضاء برنامج Apple Developer Program. تُستخدم لتوقيع تطبيقات Mac والإضافات وحزم التثبيت التي توزعها بنفسك، بحيث يتعرف نظام macOS Gatekeeper عليك كمطوّر معروف الهوية. يتم توليد زوج المفاتيح على جهاز Mac الخاص بك ويبقى في سلسلة مفاتيح تسجيل الدخول (login keychain)، وتقوم بإنشاء الطلب عبر Keychain Access.
  • شهادة توقيع أكواد موثوقة عمومًا. تُشترى من جهة إصدار شهادات عامة مثل Sectigo أو DigiCert أو GlobalSign. تُستخدم لتوقيع الملفات التنفيذية لنظام Windows، وحزم تثبيت MSI، وبرامج التشغيل، وسكربتات PowerShell، وتطبيقات Java. وتخضع هذه الشهادة لمتطلبات CA/Browser Forum Code Signing Baseline Requirements، التي تشترط أن يُنشأ المفتاح الخاص على جهاز مادي معتمد ويبقى عليه، بحيث لا يوجد أي دور لـ Keychain Access.

القاعدة السريعة لاتخاذ القرار: إذا كان البرنامج الذي توقّعه يعمل على macOS وتقوم بتوزيعه خارج متجر Mac App Store، فأنت بحاجة إلى شهادة Developer ID. أما إذا كنت توقّع أي شيء لنظام Windows، أو تطبيق Java، فأنت بحاجة إلى شهادة توقيع أكواد تجارية، حتى لو قمت ببنائها على جهاز Mac. لا تُعد أي من هاتين الشهادتين شهادة SSL/TLS. إذا كان ما تريده فعليًا هو تفعيل HTTPS على خادم Mac، فاتبع بدلًا من ذلك كيفية إنشاء CSR على خوادم macOS.

المسار التجاري: لماذا لم تعد طريقة Keychain مناسبة

منذ 1 يونيو 2023، أصبحت متطلبات CA/Browser Forum Code Signing Baseline Requirements تشترط أن يُنشأ المفتاح الخاص لكل شهادة توقيع أكواد موثوقة عمومًا، سواء كانت قياسية (OV) أو شهادة تحقق موسّع (EV)، ويُخزَّن داخل وحدة تشفير مادية (hardware crypto module) تستوفي معيار FIPS 140-2 Level 2، أو Common Criteria EAL4+، أو معيارًا مكافئًا، وأن يكون غير قابل للتصدير. وقد كانت شهادات EV لتوقيع الأكواد تتطلب دائمًا استخدام جهاز مادي؛ وجاء تغيير عام 2023 ليوسّع القاعدة نفسها لتشمل الشهادات القياسية أيضًا.

يفشل المفتاح المُنشأ عبر Certificate Assistant في اجتياز هذا الاختبار بحكم تصميمه، لثلاثة أسباب منفصلة:

  • المفتاح عبارة عن مادة مفتاح برمجية قابلة للتصدير. يُكتب داخل سلسلة مفاتيح تسجيل الدخول الخاصة بك، ويمكنك تحديده وتصديره كملف .p12. وهذه القابلية للنقل مريحة لتطوير تطبيقات Apple، لكنها بالضبط الخاصية التي جاء متطلب استخدام الجهاز المادي لإزالتها.
  • حجم المفتاح لا يتوافق مع المتطلبات. تحدد Baseline Requirements حدًا أدنى قدره RSA بحجم 3072 بت لتوقيع الأكواد، بينما لا تحتوي قائمة Key Size في Certificate Assistant على خيار 3072.
  • الطلب لا يحمل تقريبًا أي معلومات عن الهوية. لا يطلب Certificate Assistant سوى الاسم الشائع (Common Name) وعناوين البريد الإلكتروني. ولا يوجد مكان لإدخال تفاصيل المؤسسة أو المدينة أو الولاية أو الدولة التي تتحقق منها جهة إصدار الشهادات لإصدار شهادة توقيع أكواد محققة على مستوى المؤسسة.

وهذا يترك طريقتين صالحتين للحصول على شهادة توقيع أكواد موثوقة عمومًا، ويُحدد اختيار إحداهما عند إجراء الطلب:

  • الرمز المادي (token) مع الشحن. تقوم جهة إصدار الشهادات بتوليد زوج المفاتيح والطلب على رمز USB معتمد من جانبها، ثم تحمّل الشهادة الصادرة عليه، وترسل لك الرمز عبر البريد. لن تحتاج إلى إنشاء أو لصق أي CSR في أي مكان. راجع أي طريقة تسليم لشهادة توقيع الأكواد يجب اختيارها.
  • رمزك المادي الخاص، أو HSM، أو HSM سحابي، مع شهادة إثبات (attestation). تقوم أنت بتوليد المفتاح داخل الجهاز، وإنشاء الطلب هناك، وتقديم ملف إثبات يثبت أن المفتاح أُنشئ على جهاز متوافق مع المعايير ولا يمكن تصديره. اتبع دليل توليد CSR وإثبات YubiKey 5 FIPS أو دليل توليد CSR وإثبات Luna Network Attached HSM v7.x، أو الرجوع إلى وثائق مورّد جهاز HSM الخاص بك.

وهناك تغيير آخر دخل حيز التنفيذ بالفعل: خفّض التصويت CSC-31 مدة الصلاحية القصوى لشهادات توقيع الأكواد الموثوقة عمومًا من 39 شهرًا إلى 460 يومًا للشهادات الصادرة اعتبارًا من 1 مارس 2026، لذا أصبحت عمليات التجديد تتكرر الآن كل 15 شهرًا تقريبًا. للاطلاع على الصورة الأوسع، راجع كيفية إنشاء CSR لشهادة توقيع الأكواد ونسخة OpenSSL من الدليل نفسه.

إنشاء CSR في Keychain Access لشهادة Apple Developer ID

إذا كنت قد حفظت ملف .certSigningRequest بالفعل، انتقل مباشرة إلى تقديمه في حساب المطوّر الخاص بك.

هناك أمران يجب التحقق منهما قبل البدء. تحتاج إلى عضوية في Apple Developer Program، وتشترط Apple أن يكون لديك دور Account Holder لإنشاء شهادة Developer ID. كما يُسمح لك بما يصل إلى خمس شهادات Developer ID Application وخمس شهادات Developer ID Installer لكل فريق. تطلب منك البوابة رفع طلب في كل مرة تنشئ فيها شهادة، لذا كرر هذه العملية مرة واحدة لكل شهادة.

الخطوة 1: افتح Keychain Access وابدأ الطلب

لم يعد Keychain Access موجودًا في المكان الذي تذكره معظم الدروس التعليمية. حتى إصدار macOS Sonoma، كان موجودًا في Applications > Utilities. أما اعتبارًا من macOS Sequoia، فقد نقلته Apple إلى /System/Library/CoreServices/Applications/، وهو مجلد نظام لا يعرضه Finder عند تصفح Applications، لذا لن تجد شيئًا الآن إذا بحثت تحت Utilities. أسرع طريقتين لفتحه هما استخدام Spotlight (اضغط على Command-Space واكتب Keychain Access)، أو تنفيذ أمر واحد في Terminal:

open "/System/Library/CoreServices/Applications/Keychain Access.app"

بعد فتح التطبيق، اختر Keychain Access > Certificate Assistant > Request a Certificate From a Certificate Authority من شريط القوائم.

قبل ذلك، انقر على منطقة فارغة في قائمة العناصر بحيث لا يكون أي عنصر محددًا. فإذا كان أحد المفاتيح أو الشهادات مظللًا، يتغير عنصر القائمة إلى Request a Certificate From a Certificate Authority With متبوعًا باسم ذلك العنصر، وسيقوم ببناء الطلب حول المفتاح الموجود بدلًا من إنشاء زوج جديد. وهذا مفيد عندما تريد عمدًا إعادة استخدام مفتاح، لكنه مُربك عندما لا تقصد ذلك.

قائمة Keychain Access مفتوحة على Certificate Assistant، مع تمييز خيار Request a Certificate From a Certificate Authority

الخطوة 2: املأ نافذة Certificate Information

يفتح Certificate Assistant على لوحة بعنوان Certificate Information. ولا تطلب سوى القليل جدًا:

  • User Email Address: عنوان البريد الإلكتروني المرتبط بحساب Apple Developer الخاص بك.
  • Common Name: تسمية لزوج المفاتيح، على سبيل المثال Developer ID Application Key. هذا ليس الاسم الذي سيظهر في الشهادة في النهاية. تبني Apple موضوع الشهادة الصادرة من فريقك، بالصيغة Developer ID Application: Your Team Name (TEAMID)، لذا تعامل مع هذا الحقل كمرجع خاص بك فقط.
  • CA Email Address: اتركه فارغًا. يُستخدم فقط في خيار التسليم الآخر.
  • Request is: اختر Saved to disk، وليس Emailed to the CA. تقبل بوابة مطوري Apple ملفًا مرفوعًا.

إذا أردت أيضًا اختيار حجم المفتاح أو الخوارزمية، ضع علامة على Let me specify key pair information هنا. ثم انقر Continue.

لوحة Certificate Information في Certificate Assistant، تُظهر حقول User Email Address وCommon Name وCA Email Address مع اختيار Saved to disk

الخطوة 3: اختر إعدادات زوج المفاتيح، إذا احتجت إلى ذلك

تظهر هذه اللوحة فقط إذا وضعت علامة في الخطوة 2، وبالنسبة لشهادة Developer ID يمكنك عادةً تخطّيها. الإعدادات الافتراضية هي RSA بحجم 2048 بت، وهو ما تستخدمه تعليمات Apple نفسها. عند اختيار RSA، توفر قائمة Key Size الأحجام 2048 و4096 و8192 بت. أما قائمة Algorithm فتوفر RSA وECC، والتبديل إلى ECC يستبدل تلك الأحجام بـ 256 و384 و521 بت. اترك الخوارزمية على RSA ما لم تطلب الخدمة التي تسجّل فيها تحديدًا مفتاح منحنى إهليلجي.

كانت النسخ السابقة من هذا الدليل تنصحك باختيار 3072 بت على الأقل في هذه المرحلة. هذا الرقم هو الحد الأدنى الذي يفرضه CA/Browser Forum لشهادات توقيع الأكواد التجارية. لا ينطبق على Developer ID، ولا يُتاح في هذه القائمة أصلًا، لذا لا يوجد ما يمكن اختياره. انقر Continue.

لوحة Specify Key Pair Information في Certificate Assistant، تُظهر قائمتي Key Size وAlgorithm

الخطوة 4: احفظ الطلب وتحقق من محتواه

اختر مكان حفظ الملف وانقر Save. ستحصل على ملف بامتداد .certSigningRequest، كما يضع Certificate Assistant زوج المفاتيح المطابق في سلسلة مفاتيح تسجيل الدخول الخاصة بك. الملف نفسه نص PEM عادي، لذا يمكنك فتحه في TextEdit وقراءته، رغم أن الكتلة المشفّرة لن تخبرك بالكثير بمفردها.

ملف طلب توقيع شهادة مفتوح في TextEdit، يُظهر علامتي BEGIN وEND CERTIFICATE REQUEST حول الكتلة المشفّرة

للتأكد من التفاصيل قبل رفع الملف، فك تشفير الطلب في Terminal. يعمل هذا مع أمر openssl الموجود مسبقًا على macOS، وهو في الواقع LibreSSL وليس OpenSSL الأصلي، لذا لا يوجد شيء تحتاج إلى تثبيته:

openssl req -noout -text -in CertificateSigningRequest.certSigningRequest

تحقق من ثلاثة أمور في الناتج: يُظهر سطر Subject الاسم الشائع (Common Name) وعنوان البريد الإلكتروني الذي أدخلته، ويشير سطر المفتاح العام إلى 2048 bit (أو أي حجم اخترته)، وتكون خوارزمية التوقيع SHA-256. إذا كنت تفضّل عدم استخدام Terminal، فألصق محتوى الملف في أداة فك تشفير CSR الخاصة بنا لقراءة الحقول نفسها.

الخطوة 5: قدّم الطلب وثبّت الشهادة

سجّل الدخول إلى حساب Apple Developer الخاص بك وافتح Certificates, Identifiers & Profiles. انقر على Certificates في الشريط الجانبي، ثم على زر الإضافة، وضمن Software اختر Developer ID. اختر النوع الذي تحتاجه:

  • Developer ID Application يوقّع تطبيق Mac أو إضافة أو حزمة.
  • Developer ID Installer يوقّع حزمة تثبيت Mac التي تحتوي على تطبيقك الموقّع.

انقر Continue، ثم Choose File، واختر ملف .certSigningRequest الخاص بك، وانقر Continue مرة أخرى، ثم انقر Download. تُعيد Apple ملف شهادة بامتداد .cer. انقر نقرًا مزدوجًا عليه لتثبيته، وسيظهر في Keychain Access تحت My Certificates، مقترنًا بالمفتاح الخاص الذي أُنشئ في الخطوة 4.

التوقيع بالشهادة لا يمثل سوى نصف ما يتحقق منه macOS. يتوقع Gatekeeper أن يكون البرنامج المُحمَّل من خارج متجر Mac App Store موقَّعًا بشهادة Developer ID ومُصدَّقًا (notarized) من Apple، لذا قدّم النسخة الموقَّعة للتصديق قبل توزيعها. التصديق لا يحل محل التوقيع، بل يعمل فوقه.

اعثر على المفتاح الخاص واحتفظ بنسخة احتياطية منه

لا قيمة للشهادة بدون المفتاح الخاص الذي أنشأه Certificate Assistant، وهذا المفتاح موجود في مكان واحد بالضبط حتى تنسخه. للعثور عليه، افتح Keychain Access، حدد سلسلة مفاتيح login، ثم فئة Keys، وابحث عن الاسم الشائع (Common Name) الذي أدخلته في الخطوة 2. سترى إدخالين تحت هذا الاسم، مفتاح عام ومفتاح خاص. لاحظ أن المفتاح العام ليس هو CSR الخاص بك: فـ CSR هو ملف .certSigningRequest الذي حفظته على القرص.

Keychain Access يعرض زوج المفتاح العام والمفتاح الخاص اللذين أنشأهما Certificate Assistant في سلسلة مفاتيح تسجيل الدخول

بمجرد تثبيت ملف .cer، ابحث بدلًا من ذلك تحت My Certificates. هناك تظهر الشهادة ومفتاحها الخاص كإدخال واحد، وهي هوية التوقيع التي يستخدمها codesign وXcode وسكربتات البناء الخاصة بك. لنقل هذه الهوية إلى جهاز Mac آخر أو إلى خادم بناء، انقر بزر الماوس الأيمن على الإدخال واختر Export، مما ينتج ملف .p12 محميًا بكلمة مرور تحددها أنت. احتفظ بهذا الملف بنفس الطريقة التي تحتفظ بها بأي مفتاح توقيع، لأن أي شخص يملكه ويعرف كلمة المرور يمكنه توقيع برامج باسمك.

احتفظ بنسخة احتياطية منه قبل أن تحتاج إليها. تكون شهادات Developer ID صالحة لمدة خمس سنوات ولا يمكن تجديدها: عند انتهاء صلاحية إحداها، تُنشئ بديلًا لها. وإذا فقدت المفتاح الخاص، فلن يمكن استخدام الشهادة مرة أخرى أبدًا وسيتعين عليك إنشاء أخرى، مما يستهلك واحدة من فتحاتك الخمس لـ Developer ID Application أو الخمس لـ Developer ID Installer. قاوم الرغبة في إلغاء الشهادة الميتة لتنظيم الأمور. توضح Apple صراحة أن التطبيق الموقّع بشهادة Developer ID ملغاة لن يتم تثبيته، ولن يُشغَّل لمستخدم لديه بالفعل هذا التطبيق، لذا فإن الإلغاء سيُعطّل كل نسخة موجودة بالفعل. لا تلجأ إلى الإلغاء إلا إذا سُرق المفتاح فعليًا، وتوقّع حدوث هذا العطل.

ملاحظة تنظيمية لمن وصل إلى هذه الصفحة من أجل شهادة تجارية: إذا كنت قد أنشأت بالفعل زوج مفاتيح في Keychain Access لطلب شهادة من جهة إصدار شهادات عامة، فلا يمكن استخدامه ولن تقبله أي جهة إصدار شهادات. لن يحدث أي عطل إذا تركته كما هو، لكن لا يوجد سبب كافٍ للاحتفاظ بمادة مفتاح توقيع قابلة للتصدير في سلسلة المفاتيح. حدد كلًا من المفتاح العام والمفتاح الخاص تحت Keys واحذفهما، ثم اطلب الشهادة عبر رمز مادي أو HSM بدلًا من ذلك.

الأسئلة الشائعة

هل ما زال بإمكاني إنشاء CSR لتوقيع الأكواد باستخدام Keychain Access؟

بالنسبة لشهادة Apple Developer ID، نعم، وهي الطريقة التي توثقها Apple. أما بالنسبة لشهادة توقيع أكواد موثوقة عمومًا من جهة إصدار شهادات تجارية، فلا. منذ 1 يونيو 2023، يجب أن تُنشأ تلك المفاتيح الخاصة وتُخزَّن على وحدة تشفير مادية تستوفي معيار FIPS 140-2 Level 2، أو Common Criteria EAL4+، أو معيارًا مكافئًا، والمفتاح المُنشأ في Keychain Access هو مادة مفتاح برمجية قابلة للتصدير.

أين يوجد Keychain Access في إصدارات macOS الحالية؟

في /System/Library/CoreServices/Applications/. نقلته Apple إلى هناك في macOS Sequoia، لذا لم يعد موجودًا في Applications > Utilities ولا يظهر عند تصفح Applications في Finder. افتحه باستخدام Spotlight، أو نفّذ الأمر open "/System/Library/CoreServices/Applications/Keychain Access.app" في Terminal. تطبيق Passwords المنفصل الذي جرى تقديمه إلى جانبه يتعامل فقط مع كلمات المرور، وليس مع الشهادات والمفاتيح.

ما حجم المفتاح الذي يجب أن أختاره في Certificate Assistant؟

RSA بحجم 2048 بت لشهادة Developer ID، وهو الإعداد الافتراضي، لذا يمكنك ترك خيار Let me specify key pair information بدون تحديد. عند اختيار RSA، توفر قائمة Key Size الأحجام 2048 و4096 و8192 بت، والتبديل إلى ECC يستبدل تلك بـ 256 و384 و521 بت. لا تتوفر في أي إعداد قيمة 3072 بت، وهي الحد الأدنى الذي يفرضه CA/Browser Forum لشهادات توقيع الأكواد التجارية، وهذا أحد الأسباب العديدة التي تجعل هذا المسار غير مناسب لطلب تجاري.

لماذا لا يطلب Certificate Assistant اسم شركتي أو مدينتي أو دولتي؟

لأن الطلب الذي يُنشئه لا يحمل سوى الاسم الشائع (Common Name) وعناوين البريد الإلكتروني. لا تحتاج Apple إلى المزيد: فهي تملأ موضوع شهادة Developer ID من حساب المطوّر الخاص بك. أما جهة إصدار الشهادات التجارية فتحتاج فعليًا إلى تفاصيل المؤسسة، وتتحقق منها مقابل السجلات العامة، وهذا سبب آخر يجعل طلب Keychain غير مناسب لذلك النوع من الطلبات.

هل أحتاج إلى رمز مادي (hardware token) لشهادة Apple Developer ID؟

لا. تنطبق قاعدة الجهاز المادي الخاصة بـ CA/Browser Forum على شهادات توقيع الأكواد الموثوقة عمومًا الصادرة عن جهات إصدار شهادات تجارية. أما شهادات Developer ID فتصدرها جهة إصدار الشهادات الخاصة بـ Apple لأعضاء برنامج Apple Developer Program، ويُنشأ المفتاح في سلسلة مفاتيح تسجيل الدخول الخاصة بك عبر Certificate Assistant، تمامًا كما هو موضح أعلاه.

هل أحتاج إلى CSR منفصل لكل من Developer ID Application وDeveloper ID Installer؟

أنشئ واحدًا لكل منهما. تطلب منك بوابة المطورين رفع طلب توقيع شهادة عند كل عملية إنشاء شهادة، ومنح كل هوية زوج مفاتيح خاص بها يعني أن استبدال إحداهما أو إلغاءها يترك البرنامج الموقَّع بالأخرى دون تأثير. أعطِ كل طلب اسمًا شائعًا (Common Name) يمكنك تمييزه لاحقًا في Keychain Access.

حفظت CSR لكن لا أستطيع العثور على المفتاح الخاص. ما الخطأ الذي حدث؟

تحقق من فئة Keys في سلسلة مفاتيح login، بالبحث عن الاسم الشائع (Common Name) الذي أدخلته وليس اسم الملف. وإذا كان غائبًا فعليًا، فالأسباب المعتادة هي أن زوج المفاتيح أُنشئ على جهاز Mac مختلف أو تحت حساب مستخدم مختلف، أو أن عنصر سلسلة المفاتيح قد حُذف، أو أن الطلب بُني من مفتاح موجود مسبقًا باستخدام النسخة البديلة من عنصر القائمة Request a Certificate From a Certificate Authority With. بدون المفتاح الخاص، لا يمكن استخدام الطلب، لذا أنشئ طلبًا جديدًا.

ما هي مدة صلاحية شهادة توقيع الأكواد؟

تقتصر شهادات توقيع الأكواد الموثوقة عمومًا الصادرة اعتبارًا من 1 مارس 2026 على 460 يومًا، بعد أن كانت 39 شهرًا وفق التصويت CSC-31 لمنتدى CA/Browser Forum. أما شهادات Apple Developer ID فهي صالحة لمدة خمس سنوات، ويتم استبدالها بدلًا من تجديدها. وفي كلتا الحالتين، يستمر عمل البرنامج الذي وقّعته أثناء صلاحية الشهادة بعد انتهاء صلاحيتها، شريطة أن يكون التوقيع مختومًا بالوقت (timestamped). تطبّق Apple استثناءً واحدًا: فهي تتحقق من شهادة Developer ID Installer لحظة تشغيل حزمة التثبيت، لذا يجب إعادة توقيع ملف .pkg بمجرد انتهاء صلاحية تلك الشهادة، حتى لو لم يتأثر التطبيق الموجود بداخله.

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

وفِّر 10% على شهادات SSL عند الطلب اليوم!

إصدار سريع، وتشفير قوي، وثقة في المتصفح بنسبة 99.99%، ودعم مخصص، وضمان استرداد المال خلال 25 يومًا. رمز القسيمة: SAVE10

صورة مفصلة لتنين أثناء طيرانه

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