طرح تثبيت المفتاح العام مع تقارير HPKP

إميلي ستارك

يُعدّ استخدام طبقة المقابس الآمنة (SSL) على موقعك الإلكتروني طريقة مهمة للحفاظ على الأمان والخصوصية للمستخدمين. ولكن تفعيل طبقة المقابس الآمنة ليس نهاية المطاف، فهناك العديد من الخطوات التي يمكنك اتخاذها لتحسين مستوى الأمان الذي يوفّره موقعك الإلكتروني، بدءًا من ضبط السمة الآمنة على ملفات تعريف الارتباط وتفعيل الأمان المشدَّد لنقل البيانات باستخدام بروتوكول HTTP ووصولاً إلى استخدام سياسة أمان المحتوى لحظر امتيازات موقعك الإلكتروني. ومع ذلك، قد يكون نشر هذه الميزات الفعّالة أمرًا صعبًا في بعض الأحيان. لمساعدتك في طرح شكل أكثر صرامة لطبقة المقابس الآمنة، يأتي Chrome 46 مزوّدًا بميزة إعداد تقارير HPKP.

ماذا تعني كل هذه الاختصارات؟

يعتمد الأمان على الويب اليوم على شهادات طبقة المقابس الآمنة: التوقيعات المشفّرة التي تثبت هوية الموقع الإلكتروني. عندما يرسل المتصفّح طلبًا إلى عنوان URL مثل https://developers.google.com، يقدّم الخادم شهادة طبقة المقابس الآمنة، وإذا كانت الشهادة صالحة، يسمح المتصفّح بمواصلة الطلب ويعرض عنوان URL للموقع الإلكتروني مع قفل أخضر في شريط العناوين.

ومع ذلك، فما الشهادة الصالحة؟ لكي يتم اعتبار الشهادة صالحة، يجب أن تكون موقَّعة بواسطة مرجع تصديق (CA)، أو من خلال شهادة أخرى موقعة من مرجع تصديق (CA) (يُعرف باسم مرجع تصديق وسيط). تأتي المتصفحات وأنظمة التشغيل مع قائمة بالمئات من مراجع التصديق الموثوق بها لإصدار الشهادات. والمشكلة مع ذلك تكمن في أنه بشكل افتراضي، يمكن لأي من مراجع التصديق هذه إصدار شهادات لأي موقع إلكتروني. وإذا تعرض أي منها للاختراق أو بشكل سيئ، فإن ذلك قد يكون مدمرًا لشبكة الويب بأكملها.

أدخِل "تثبيت مفتاح HTTP العام" أو HPKP. يتيح هذا المعيار للمواقع الإلكترونية إرسال عنوان HTTP لإرشاد المتصفح إلى تذكّر (أو "تثبيت") أجزاء من سلسلة شهادات طبقة المقابس الآمنة (SSL). سيرفض المتصفح بعد ذلك الاتصالات اللاحقة التي لا تتطابق مع أرقام التعريف الشخصية التي تلقّاها سابقًا. في ما يلي مثال على عنوان HPKP:

Public-Key-Pins:  
       pin-sha256="d6qzRu9zOECb90Uez27xWltNsj0e1Md7GkYYkVoZWmM=";  
       pin-sha256="LPJNul+wow4m6DsqxbninhsWHlwfp0JecwQzYpOLmCQ=";  
       max-age=259200

يحدِّد هذا العنوان تجزئتَي الشهادة كدبابيس. إحداهما عبارة عن تجزئة لشهادة ضمن سلسلة شهادات الموقع الإلكتروني، والآخر عبارة عن رقم تعريف شخصي احتياطي أو جزء من شهادة يمكن للموقع الإلكتروني استخدامها في حال احتاجه إلى تغيير شهادته. يتضمّن العنوان أيضًا قيمة max-age. بعد انقضاء هذا العدد من الثواني، سينسى المتصفح رقم التعريف الشخصي.

لمزيد من المعلومات حول HPKP بشكل عام، يمكنك الاطلاع على المواصفات أو مشاركة زميل من مطوّر برامج Chrome، كريس بالمر، في مدونة رائعة.

هل عليّ تفعيل HPKP الآن؟

ليس بالضرورة. عند نشر HPKP، من السهل جدًا ارتكاب الخطأ ومنع فقدان البيانات على موقعك عن طريق الخطأ. إذا ثبَّت موقعك الإلكتروني في مجموعة واحدة من الشهادات ثم اضطررت إلى نشر شهادة جديدة، لن يتمكّن المستخدمون الذين رأوا رقم التعريف الشخصي من الدخول إلى موقعك الإلكتروني إلى حين انتهاء صلاحية رقم التعريف الشخصي (استنادًا إلى قيمة max-age في العنوان).

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

ما المقصود بإعداد تقارير HPKP وكيف يمكن الاستفادة منها؟

إنّ ميزة إعداد تقارير HPKP، المتوفرة في الإصدار 46 من Chrome، هي ميزة يمكنك استخدامها لرصد عمليات الضبط الخاطئة أثناء طرح بروتوكول HPKP.

أولاً، يمكنك البدء بإرسال العنوان Public-Key-Pins-Report-Only بدلاً من العنوان Public-Key-Pins:

Public-Key-Pins-Report-Only: 
       max-age=2592000;  
       pin-sha256="E9CZ9INDbd+2eRQozYqqbQ2yXLVKB9+xcprMF+44U1g=";  
       pin-sha256="LPJNul+wow4m6DsqxbninhsWHlwfp0JecwQzYpOLmCQ=";  
report-uri="https://example.net/pkp-report"

عندما يرسل موقعك الإلكتروني مثل هذا العنوان، سيتحقق Chrome مما إذا كان الاتصال الحالي يتطابق مع أرقام التعريف الشخصية، ويرسل تقريرًا إلى report-uri إذا لم يكن كذلك. لن يحظر Chrome مطلقًا الطلبات بناءً على الدبابيس في عنوان "إعداد التقارير فقط"، لذا هذه طريقة آمنة لتجربة بروتوكول HPKP ومعرفة ما إذا كانت تتسبب في مشاكل للمستخدمين بدون التعرض لخطر إيقاف موقعك الإلكتروني.

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

عند طرح عنوان Public-Key-Pins الحقيقي لبدء فرض عمليات التثبيت، يمكنك تضمين قيمة report-uri في هذا العنوان أيضًا كي تتمكّن من مواصلة تلقّي التقارير في حال حدوث أي مشاكل.

ما الذي يتضمّنه تقرير انتهاك HPKP؟

تقرير انتهاكات HPKP هو رسالة JSON يتم إرسالها في طلب HTTP POST إلى report-uri الذي تم إعداده. يمكنك العثور على قائمة الحقول في spec، ولكن سأسلّط الضوء على حقلَين منهما هنا: served-certificate-chain وvalidated-certificate-chain. الشهادة served-certificate-chain هي الشهادة تمامًا كما استلمها Chrome عند إعداد اتصال طبقة المقابس الآمنة للطلب. من ناحية أخرى، فإنّ validated-certificate-chain هي السلسلة التي أعاد Chrome إنشاؤها عند محاولة التحقق من صحة شهادة الخادم، والتي قد تكون مختلفة عن served-certificate-chain. تُجري برامج مختلفة عملية التحقق من صحة الشهادة بطرق مختلفة، وقد يكون هذا سببًا شائعًا لأخطاء تهيئة HPKP. احرص على مراجعة هذا الحقل إذا كنت تتلقّى تقارير غير متوقعة.

"لقد واجهت صعوبة" واحدة أخيرة

في حال نشر تقارير HPKP، تذكّر أنّ Chrome يُجري عملية التحقق من رقم التعريف الشخصي لجميع الطلبات، بما في ذلك طلبات إرسال التقارير. لذلك، إذا نشرت HPKP لموقعك الإلكتروني، قد تحتاج إلى إرسال تقارير HPKP إلى نطاق آخر لم يتم تثبيته. وإلا سيتم إرسال تقرير إلى النطاق نفسه بشأن مخالفة رقم التعريف الشخصي بسبب انتهاكٍ للسياسات، ما يؤدي إلى عدم مخالفة الموقع الإلكتروني، وبالتالي لن تتلقّى التقرير.

إذا لم يكن لديك نطاق آخر متوفر، يمكنك بدلاً من ذلك تجربة خدمة مثل report-uri.io، التي تعالج تقارير المخالفات نيابةً عنك.