فاحص سلسلة الشهادات

بمساعدة الخادم جديد تشخيص المواقع وHTTP

يقرأ السلسلة التي يقدّمها الخادم في مصافحة TLS (يتصل خادم متقن من شبكة Cloudflare) أو حزمة PEM تلصقها، ويتتبعها من الشهادة الطرفية باسم المُصدِر ومعرّف المفتاح، ثم يتحقق عبر WebCrypto من أن توقيع كل شهادة يصحّ بمفتاح الشهادة التي تليها. ويذكر الشهادة الوسيطة الناقصة والترتيب الخاطئ والشهادات الزائدة أو المنتهية وقيود CA. لا يُستشار أي مخزن جذور، فالأداة تصف السلسلة ولا تعلن أنها موثوقة.

الخصوصية: يرسل خادم متقن طلبات الاختبار الصغيرة والثابتة الموصوفة في هذه الصفحة إلى المضيف الذي تحدده، ولا يُخزَّن أي شيء. استخدمه فقط مع الأنظمة المصرّح لك باختبارها.
جارٍ تحميل الأداة…

لماذا يجب أن يرسل الخادم الشهادات الوسيطة؟

لا يحمل العملاء إلا شهادات الجذر، أما شهادة الموقع فتوقّعها جهة إصدار وسيطة، لذلك يجب أن يرسل الخادم شهادته تليها كل شهادة وسيطة حتى ذلك الجذر (RFC 8446 §4.4.2). ثم يفحص العميل كل حلقة — اسم المُصدِر ومعرّف المفتاح والتوقيع (RFC 5280) — حتى يبلغ جذراً يثق به أصلاً؛ وإذا غابت شهادة وسيطة عجز كثير من العملاء عن بناء هذا المسار ورفضوا الاتصال.

كيفية استخدام فاحص سلسلة الشهادات

  1. أدخل اسم المضيف (أو عنوان IP مع اسم الموقع في حقل SNI)، أو الصق حزمة تبدأ بشهادة الموقع.
  2. اضغط «فحص السلسلة».
  3. اقرأ الملخص: يجب أن تظهر ✓ في «السلسلة مكتملة» و«التواقيع متحققة». ثم اقرأ قائمة المشكلات إن وُجدت.
  4. أصلح إعداد الخادم، وغالباً يكفي تركيب ملف السلسلة الكاملة بدلاً من الشهادة وحدها، ثم أعد الفحص.

مزايا فاحص سلسلة الشهادات

  • يقرأ قائمة الشهادات التي يرسلها الخادم في مصافحة TLS كما هي وبترتيبها، حتى في خوادم TLS 1.3 التي تكون فيها رسالة Certificate مشفّرة
  • يفحص حزمة PEM ملصوقة (ملف fullchain.pem أو حزمة CA أو تصدير من موازن الأحمال) داخل متصفحك بالكامل قبل نشرها
  • يتتبع السلسلة من الشهادة الطرفية باسم المُصدِر ومعرّف المفتاح، ويبيّن هل تصل إلى جهة إصدار يُنتظر أن يحمل العميل جذرها
  • يتحقق من كل حلقة عبر WebCrypto: يُفحص توقيع كل شهادة بالمفتاح العام للشهادة المقدَّمة على أنها مُصدِرتها (RSA وRSA-PSS وECDSA P-256/384/521 وEd25519)
  • ينبّه إلى الشهادة الوسيطة الناقصة والترتيب الخاطئ والتكرار والشهادات الزائدة والمنتهية أو التي لم يبدأ سريانها، وإلى المُصدِر غير المعلَّم كـ CA أو الخالي من keyCertSign، وتجاوز pathLen
  • جدول يعرض لكل شهادة دورها وموضوعها ومُصدِرها وتاريخ انتهائها والأيام المتبقية ومفتاحها والشهادة التي وقّعتها
  • السلسلة كما أُرسلت بصيغة PEM، جاهزة للنسخ أو التنزيل باسم chain.pem

المدخلات والمخرجات

المدخلات

  • اسم المضيف أو الرابط والمنفذ واسم الخادم (SNI): مصدر قراءة السلسلة، كما في فاحص شهادة SSL.
  • أو حزمة ملصوقة: شهادات PEM بالترتيب الذي يرسلها به الخادم، شهادة الموقع أولاً. لا يُجلب شيء عند وجود الحزمة، واسم المضيف إن أُدخل يُطابَق مع الشهادة الأولى فقط.

المخرجات

  • الملخص: عدد الشهادات، واكتمال السلسلة، والترتيب من الطرفية إلى الجذر، وتحقق توقيع كل حلقة، وتضمين الجذر، وهل تغطي الشهادة الطرفية المضيف.
  • السلسلة: صف لكل شهادة بدورها (طرفية أو وسيطة أو جذر أو خارج السلسلة) وموضوعها ومُصدِرها وانتهائها والأيام المتبقية ومفتاحها والشهادة التي تحقق توقيعها بمفتاحها.
  • المشكلات: كل مشكلة في جملة تسمّي الشهادة برقمها وموضوعها.
  • السلسلة كما أُرسلت (في الفحص المباشر فقط): الشهادات بصيغة PEM بترتيب الخادم.

مثال على فاحص سلسلة الشهادات

حزمة المثال: شهادة الموقع مع شهادتها الوسيطة، ملصوقةً (فُحصت في 14 أكتوبر 2026)

الإدخال:

الحزمة الملصوقة: شهادة www.example.com تليها «Example Issuing CA R1» (مثال الصفحة)
اسم المضيف: www.example.com

النتيجة:

الشهادات 2 · السلسلة مكتملة ✓ · الترتيب من الطرفية إلى الجذر ✓ · التواقيع متحققة ✓ (فُحصت كل الحلقات) · الجذر مضمَّن ✗ (اختياري) · الطرفية تغطي هذا المضيف ✓
#1 www.example.com · المُصدِر Example Issuing CA R1 · طرفية · صالحة حتى 2046-10-01 · 7291 يوماً · EC P-256 (256 bits) · موقّعة من ✓ (#2)
#2 Example Issuing CA R1 · المُصدِر Example Root CA X1 · وسيطة · صالحة حتى 2051-10-01 · EC P-256 (256 bits) · موقّعة من — (الجذر لم يُرسَل)

كيف تقرأ نتائج فاحص سلسلة الشهادات

✓ في «السلسلة مكتملة» تعني أن السلسلة تصعد من الطرفية إلى جذر مضمَّن، أو إلى شهادة CA لم يُرسَل مُصدِرها ويُنتظر أن يكون في مخزن العميل (وهذا لا يُفحص). و✗ تعني غالباً غياب الشهادة الوسيطة: قد تصلح المتصفحات ذلك، وأغلب العملاء الآخرين لا يفعلون.

✓ في «التواقيع متحققة» تعني أن كل حلقة أمكن فحصها تحققت. و✗ تعني أن شهادة ليست موقّعة من التي قُدّمت على أنها مُصدِرتها، وغالباً تكون الوسيطة من جهة أخرى أو قديمة بعد أن غيّرت الجهة وسيطاتها. و? تعني خوارزمية لا تتحقق منها WebCrypto. و— تعني أنه لا حلقة للفحص، إذ لم تُرسَل إلا الشهادة الطرفية.

✗ في «الجذر مضمَّن» أمر طبيعي لا خطأ. أما الصف الموسوم «خارج السلسلة» فشهادة يرسلها الخادم بلا فائدة؛ احذفها لتوفير البايتات وتجنّب إرباك العملاء.

النتيجة السليمة تصف السلسلة التي يرسلها الخادم؛ أما ثقة متصفح أو جهاز بعينه بجذرها فيقررها مخزن الجذور لدى ذلك العميل، وهو ما لا تملكه الصفحة.

متى تستخدم فاحص سلسلة الشهادات

  • معرفة سبب رفض عميل API أو تطبيق جوال أو curl لموقع يفتح جيداً في متصفح الحاسوب.
  • فحص ملف fullchain.pem أو حزمة CA قبل تركيبها على موازن أحمال أو خادم بريد أو جهاز شبكي.
  • التأكد من أن الخادم أخذ الشهادة الوسيطة الجديدة لجهة الإصدار بعد التجديد ولم يعد يرسل القديمة.
  • تحديد الشهادة المنتهية أو الخالية من علَم CA في سلسلة طويلة.

استكشاف الأخطاء وإصلاحها

  • «أرسل الخادم الشهادة الطرفية وحدها»: اضبط السلسلة الكاملة؛ في nginx يجب أن يشير ssl_certificate إلى ملف fullchain، وفي Apache استخدم ملف شهادة يتضمن الوسيطات، وفي موازن الأحمال ارفع حزمة CA.
  • «ليست موقّعة من»: الشهادة الوسيطة لا تخص هذه الشهادة الطرفية. نزّل الوسيطة التي تصدر منها جهتك حالياً واستبدل القديمة بها.
  • «ليست جزءاً من السلسلة الممتدة من الشهادة الطرفية»: تُرسَل شهادةٌ زائدة (غالباً وسيطة قديمة أو توقيع متقاطع لم يعد لازماً). احذفها من الحزمة.
  • «الشهادات ليست مرتبة من الطرفية إلى الجذر»: أعد ترتيب الحزمة لتأتي شهادة الموقع أولاً وتليها كل شهادة بمُصدِرها.
  • الموقع يمر عبر Cloudflare: الصق السلسلة بدلاً من ذلك. يستطيع عارض الشهادات في أغلب المتصفحات تصدير السلسلة بصيغة PEM، وعلى خادمك استخدم ملف fullchain الذي كتبه عميل جهة الإصدار.

الأسئلة الشائعة حول فاحص سلسلة الشهادات

لماذا يعمل موقعي في المتصفح ويفشل في تطبيق الجوال أو curl؟

إذا أرسل الخادم شهادته وحدها فبعض المتصفحات تصلح السلسلة بنفسها: تنزّل الشهادة الوسيطة من العنوان المذكور في الشهادة أو تستخدم نسخة محفوظة لديها، فيبدو الموقع سليماً على جهازك. أما curl وبرامج Java وPython ومعظم عملاء API وتطبيقات الجوال فتفشل. الحل في الخادم: أرسل الشهادة الطرفية تليها كل الشهادات الوسيطة (غالباً ملف fullchain.pem).

هل يجب إرسال شهادة الجذر ضمن السلسلة؟

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

ماذا يثبت أن كل شهادة «موقّعة من التي تليها»؟

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

بأي ترتيب يجب أن تُرسل الشهادات؟

الشهادة الطرفية أولاً، ثم التي أصدرتها، ثم التي أصدرت تلك، وهكذا. يشترط RFC 8446 أن تأتي الطرفية أولاً، ويقول إن كل شهادة تالية ينبغي أن تصادق على التي قبلها؛ وبعض العملاء يتسامح مع ترتيب آخر وبعضها لا، لذلك تنبّه الأداة إليه.

كيف أفحص سلسلة موقع يمر عبر Cloudflare؟

لا يمكن ذلك باسم المضيف، لأن خادم متقن يعمل على Cloudflare Workers ولا يُسمح له بفتح اتصالات مباشرة إلى عناوين Cloudflare. صدّر السلسلة من عارض الشهادات في متصفحك (أو خذ ملف fullchain من خادمك) والصقها، أو افحص خادمك الأصلي بعنوان IP مع اسم الموقع في حقل SNI.

لماذا تظهر حلقة بعلامة ? بدلاً من ✓ أو ✗؟

توقيعها يستخدم خوارزمية لا تستطيع WebCrypto التحقق منها، مثل DSA أو Ed448 أو توقيعات MD5 أو SHA-224 أو منحنى غير شائع. فتُعرض الحلقة «غير متحقق منها» لا «مكسورة»؛ وافحصها بـ OpenSSL إن كانت مهمة.

ملاحظات تقنية

يرسل خادم TLS قائمة certificate_list والشهادة الطرفية أولاً؛ ويقول RFC 8446 §4.4.2 (وRFC 5246 في TLS 1.2) إن كل شهادة تالية ينبغي أن تصادق على التي قبلها. ويجوز حذف الجذر لأن العملاء يأخذونه من مخزنهم.

يتبع الربط RFC 5280: يجب أن يساوي اسم المُصدِر في الشهادة اسم الموضوع في الشهادة التالية، وإذا حملت الشهادتان المعرّفين وجب أن يساوي Authority Key Identifier معرّف Subject Key Identifier للمُصدِر. وكل شهادة مُصدِرة يجب أن تكون CA (basicConstraints) مسموحاً لها بتوقيع الشهادات (keyCertSign)، ضمن pathLenConstraint وتواريخ صلاحيتها.

تُتحقق كل حلقة بفحص التوقيع على بايتات TBSCertificate بالمفتاح العام للمُصدِر عبر WebCrypto: RSASSA-PKCS1-v1_5 وRSA-PSS مع SHA-1 أو SHA-2، وECDSA (بعد تحويل توقيع DER إلى صيغة r||s الخام) على P-256 وP-384 وP-521، وEd25519. والخوارزميات غير المتاحة في WebCrypto تُذكر غير قابلة للفحص، ولا تُعدّ صحيحة أبداً.

يُقرأ النص الملصوق (حتى 256 KB) بصيغة PEM وفق RFC 7468: كل كتلة -----BEGIN CERTIFICATE-----، حتى 16 كتلة، بالترتيب المعطى. والكتلة التي يتعذّر فكّ ترميز base64 أو DER فيها تُذكر بموضعها في النص وتُستبعد من التحليل.

الحدود ومنهجية القياس

لا مخزن جذور: تستطيع الأداة أن تقول إن السلسلة مكتملة وتواقيعها متحققة، لا أن متصفحاً يثق بها. ولا يُفحص الإلغاء (OCSP وCRL) ولا شفافية الشهادات.

يتصل الفحص المباشر من مركز بيانات Cloudflare الذي يخدم طلبك؛ ولا يصل اتصاله المباشر أبداً إلى المضيفات التي تُحَل إلى Cloudflare، وقد يرسل خادم يجيب بحسب المنطقة سلسلة أخرى لزوارك.

لا تُستكشف المسارات المتقاطعة التوقيع: تُتبع السلسلة عبر الشهادات المرسلة فعلاً مع تفضيل التطابق بمعرّف المفتاح، ولا تُؤخذ في الحسبان مسارات بديلة قد يبنيها العميل بشهادات يحملها.

الأمان والخصوصية

تُفكّ الحزمة الملصوقة ويُتحقق منها في متصفحك ولا تغادره. وفي الفحص المباشر يصل المضيف والمنفذ واسم الخادم إلى خادم متقن، فيفتح اتصال TLS واحداً ولا يخزّن شيئاً عن الهدف أو النتيجة. لا تلصق مفتاحاً خاصاً أبداً؛ فالصفحة ترفض أي نص يحتوي عليه.

المراجع