متوفر أيضًا بلغات أخرى: English · Español · Português · Français
فاكّ شهادات SSL
اقرأ شهادة X.509 في متصفحك أنت، وانظر أين توافق RFC 5280 وأين تخالفه.
ما الذي يعرضه فاكّ الشهادات؟
شهادة SSL بنيةٌ من نوع X.509 مرمَّزة بـDER، تُلَفّ عادةً في غلاف base64 الذي يصنع ملف PEM. وفيها اسم الموضوع واسم المُصدِر، ورقم تسلسلي، والتاريخان اللذان تصح الشهادة بينهما، ومفتاح عام، وقائمة امتدادات، أهمها لموقع الويب الاسمُ البديل للموضوع، إذ كفّت المتصفحات منذ سنين عن قبول الاسم الشائع اسمَ مضيف.
وفكّ ذلك كله لا يحتاج خادمًا، فهو قراءة على مستوى البايتات لملمح ضيّق من ترميز واحد، ولهذا تفعله هذه الصفحة في اللسان المفتوح عندك أصلًا بدل أن تطلب منك رفع شيء. وذلك أقل أهميةً في شهادة خادم عامة منه في مفتاح خاص، لكن عادة لصق مادة تعمية في نموذج غيرك ليست عادةً تُقتنى، وموقفُ هذا الموقع نفسه في فاكّ JWT.
وما لا يخبرك به أكثر الفاكّات هو أتلتزم الشهادة القواعد فعلًا أم لا. وRFC 5280 محدَّد في أمور عدة يسهل فحصها ويسهل الإخلال بها، وفي مخزن الثقة عندك أنت شهاداتٌ حقيقية تخالفها.
كيفية الاستخدام
- الصق الشهادة. كتلة PEM كاملة، أو ما بين سطري الغلاف من base64 وحده، أو ست عشريًا خامًا. الثلاثة تعمل، والمسافات تُهمَل.
- اقرأ الحقول. الأسماء والرقم التسلسلي والصلاحية والمفتاح والامتدادات. ويظهر مع التاريخين أي نوع زمني في ASN.1 يرمّزهما، وهو الجزء الذي يتبيّن أنه المهم.
- انظر قائمة المطابقة. كل ما تفعله الشهادة مما يمنعه RFC 5280 أو ينهى عنه مشروحٌ مع سببه. وإن كانت مطابقةً قيل ذلك أيضًا.
القاعدة التي لا يكاد أحد يفحصها، والجذور التي تخالفها
القسم 4.1.2.5 من RFC 5280 غريب. فهو لا يبيح طريقتين لكتابة التاريخ فحسب، بل يفرض أيهما بحسب السنة: التواريخ حتى 2049 لا بد أن تكون UTCTime، ومن 2050 فصاعدًا لا بد أن تكون GeneralizedTime. والسبب أن UTCTime يحمل سنةً من رقمين، تُقرأ 00 إلى 49 على أنها 20xx و50 إلى 99 على أنها 19xx، فالترميز ببساطة لا يستطيع التعبير عن 2050.
وهذا يعطي القاعدة شكلًا عجيبًا. فنصفها يفرضه الترميز ولا سبيل إلى خرقه، إذ لا تستطيع شهادةٌ أن تضع 2050 في UTCTime لأنه لا موضع لها. أما النصف الآخر فلا يفرضه شيء، وهو مخروق. فمن بين 150 شهادة جذر في مخزن ثقة قياسي، يرمّز 149 تواريخه بـUTCTime، وواحد يستعمل GeneralizedTime وينتهي في 2046، أي قبل أربع سنين من السماح بالتبديل. وCertum Trusted Network CA 2 موجود في مخزن الثقة الافتراضي لكل متصفح ونظام تشغيل تقريبًا، ويمكنك تحميله في الصندوق أعلاه لترى التنبيه.
ويكشف المخزن نفسه مخالفةً ثانية أكثر شيوعًا. فالقسم 4.1.2.2 يقول إن الرقم التسلسلي للشهادة لا بد أن يكون عددًا صحيحًا موجبًا. وثمانٍ من الجذور الـ150 رقمها التسلسلي صفر، منها جذران لـGo Daddy واثنان لهيئة Hellenic Academic and Research Institutions. والصفر ليس موجبًا، وسيطبع OpenSSL serial=00 لكلها إن آثرت الفحص بغير هذه الصفحة.
ولا يجعل أيٌّ من هذين الشهادةَ خطرة، بل هما مما أباحه ما صنع الشهادة قبل عقد أو يزيد ثم توارثه الناس بلا ضجيج. ويستحقان العرض لأن فاكًّا يخبرك بالحقول وحدها إنما يقول لك ما تقوله الشهادة، لا أهي سليمة البنية.
حدود صريحة، وكيف جرى التحقق
هذا يقرأ الشهادة ولا يتحقق منها. فلا فحص للتوقيع، ولا بناء لسلسلة، ولا استعلام عن الإبطال، ولا حكم بالثقة، لأن ذلك كله يحتاج شهادة المُصدِر ومصدرًا محدَّثًا للإبطال، ولا يسع صفحةً أن تدّعي بصدق امتلاك أيٍّ منهما. وإن قالت الأداة إن الشهادة موقّعة ذاتيًا فذاك قولٌ في تساوي اسمين، لا في صحة التوقيع.
وهي كذلك لا تفكّ إلا الامتدادات التي يستحق تلخيصها، وتعرض ما سواها برمزه ومحتواه الخام. فسياسات الشهادات وطوابع شفافية الشهادات بنى قائمة بذاتها، وفكّها نصفَ فكّ أسوأ من عرضها كما هي.
والمحلِّل مقابَل بـOpenSSL على الشهادات الجذرية الـ150 في مخزن حقيقي: تتوافق كل الأرقام التسلسلية وكل الإصدارات ولحظتا الصلاحية وكل سمات الموضوع، في 326 تحققًا و15 ضابطًا سالبًا. وظهرت في أثناء ذلك ثلاث خلافات، وكانت الثلاث أخطاءً في المقارنة لا في المحلِّل، منها واحدة لم تظهر إلا لأن OpenSSL يهرّب النص غير الآسكي في مخرجاته بينما يفكّه المحلِّل. أما الحالات التي لا يوفّرها مخزن الثقة — رقم تسلسلي يجاوز عشرين ثمانية، وشهادة غير موقّعة ذاتيًا، واسم بـBMPString — فتُبنى من الصفر في طقم الاختبارات، لأن قاعدةً لا يخالفها شيء في المدوّنة ليست مفحوصةً حقًا.
لماذا هي مجانية؟
لا خادم في الأمر. ففكّ DER حسابٌ على بايتات يجري في متصفحك، فلا شيء يُتقاضى ولا تسجيل يُطلب.
وما تلصقه لا يُرفع ولا يُخزَّن ولا يُسجَّل. والشهادة العامة ليست سرًّا، لكن الصندوق أعلاه يقبل طائعًا أشياء هي سرّ، والتصميم الآمن الوحيد هو الذي لا يمكن أن يهمّ فيه ذلك.