HPKP रिपोर्टिंग की मदद से, सार्वजनिक कुंजी को पिन करने की सुविधा रोल आउट की जा रही है

एमिली स्टार्क

अपनी साइट पर एसएसएल का इस्तेमाल करना, उपयोगकर्ताओं की सुरक्षा और निजता बनाए रखने का एक अहम तरीका है. हालांकि, एसएसएल को चालू करने का मकसद ही नहीं है: अपनी साइट पर मिलने वाली सुरक्षा को बढ़ाने के लिए, कई तरीके अपनाए जा सकते हैं. जैसे, अपनी कुकी पर सिक्योर एट्रिब्यूट सेट करना या एचटीटीपी स्ट्रिक्ट ट्रांसपोर्ट सिक्योरिटी को चालू करना, कॉन्टेंट की सुरक्षा के बारे में नीति का इस्तेमाल करना, और साइट के खास अधिकारों को लॉक करना. हालांकि, इन दमदार सुविधाओं को लागू करना कभी-कभी मुश्किल हो सकता है. एसएसएल के बेहतर वर्शन को रोल आउट करने में आपकी मदद के लिए, Chrome 46 में HPKP रिपोर्टिंग की सुविधा उपलब्ध है.

इन सभी शॉर्ट फ़ॉर्म का क्या मतलब है?

आज-कल वेब की सुरक्षा एसएसएल सर्टिफ़िकेट पर निर्भर करती है: क्रिप्टोग्राफ़िक हस्ताक्षर से यह पता चलता है कि वेबसाइट वही है जो वह है. जब आपका ब्राउज़र https://developers.google.com जैसे यूआरएल पर कोई अनुरोध भेजता है, तो सर्वर एक एसएसएल सर्टिफ़िकेट देता है. अगर सर्टिफ़िकेट मान्य है, तो ब्राउज़र आगे बढ़ने के अनुरोध को अनुमति देता है और वेबसाइट के यूआरएल को पता बार में हरे रंग के पैडलॉक से दिखाता है.

हालांकि, मान्य सर्टिफ़िकेट क्या होता है? किसी सर्टिफ़िकेट को मान्य माना जाए, इसके लिए उस पर किसी सर्टिफ़िकेट देने वाली संस्था (सीए) या किसी ऐसे दूसरे सर्टिफ़िकेट से हस्ताक्षर किया जाना चाहिए जिसे किसी सीए (जिसे इंटरमीडिएट सीए के नाम से जाना जाता है) से हस्ताक्षर किया गया हो. ब्राउज़र और ऑपरेटिंग सिस्टम कई सौ CA की सूची के साथ शिप किए जाते हैं, जो प्रमाणपत्र जारी करने के लिए भरोसेमंद होते हैं. हालांकि, समस्या यह है कि इनमें से कोई भी सीए डिफ़ॉल्ट रूप से, किसी भी वेबसाइट के लिए सर्टिफ़िकेट जारी कर सकता है. अगर उनमें से किसी के साथ भी छेड़छाड़ की जाती है या वह गलत व्यवहार करता है, तो पूरे वेब को नुकसान पहुंच सकता है.

एचटीटीपी सार्वजनिक पासकोड पिन करने की सुविधा या HPKP डालें. इस मानक से वेबसाइटों को एक एचटीटीपी हेडर भेजने की अनुमति मिलती है. यह हेडर, ब्राउज़र को अपने एसएसएल सर्टिफ़िकेट की चेन के हिस्सों को याद रखने (या "पिन करने") का निर्देश देता है. इसके बाद ब्राउज़र, उन सभी कनेक्शन को अस्वीकार कर देगा जो पहले मिले पिन से मैच नहीं करते. यहां HPKP हेडर का एक उदाहरण दिया गया है:

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

यह हेडर दो सर्टिफ़िकेट हैश को पिन के तौर पर तय करता है. एक हैश, साइट के सर्टिफ़िकेट की चेन में मौजूद सर्टिफ़िकेट का हैश होता है. साथ ही, दूसरा एक बैकअप पिन या सर्टिफ़िकेट का हैश होता है. साइट का इस्तेमाल तब किया जा सकता है, जब साइट को अपने सर्टिफ़िकेट को घुमाने की ज़रूरत होती है. हेडर में एक max-age वैल्यू भी शामिल होती है. इतने सेकंड बीत जाने के बाद, ब्राउज़र पिन के बारे में भूल जाएगा.

एचपीकेपी के बारे में ज़्यादा जानकारी पाने के लिए, खास जानकारी या Chrome डेवलपर क्रिस पामर की शानदार ब्लॉग पोस्ट देखें.

क्या मैं अभी HPKP को चालू करूं?

ऐसा ज़रूरी नहीं है. HPKP को डिप्लॉय करने पर, गलती से बहुत आसान हो जाता है. इससे, गलती से आपकी साइट पर DoS की गड़बड़ी हो जाती है. अगर अपनी साइट को सर्टिफ़िकेट के एक सेट पर पिन किया जाता है और आपको नया सर्टिफ़िकेट डिप्लॉय करना होता है, तो पिन देखने वाले उपयोगकर्ता आपकी साइट को तब तक ऐक्सेस नहीं कर पाएंगे, जब तक पिन की समयसीमा खत्म नहीं हो जाती (हेडर में max-age वैल्यू के आधार पर).

हालांकि, इसे समझना मुश्किल होता है, इसलिए फ़िलहाल HPKP का इस्तेमाल, सुरक्षा के लिहाज़ से संवेदनशील कुछ कुछ हाई-प्रोफ़ाइल साइटों से किया जा रहा है. अगर आपने एचपीकेपी को चालू करने का फ़ैसला किया है, तो आपको सबसे कम वैल्यू से शुरुआत करनी चाहिए. साथ ही, कोई समस्या न होने पर, इसे धीरे-धीरे बढ़ाना चाहिए.

HPKP रिपोर्टिंग क्या है और यह कैसे मदद करती है?

HPKP रिपोर्टिंग, Chrome 46 में शिपिंग एक ऐसी सुविधा है जिसका इस्तेमाल HPKP को रोल आउट करते समय गलत कॉन्फ़िगरेशन का पता लगाने के लिए किया जा सकता है.

सबसे पहले, सार्वजनिक कुंजी-पिन हेडर के बजाय Public-Key-Pins-Report-Only हेडर भेजकर शुरुआत की जा सकती है:

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 यह पुष्टि करता है कि मौजूदा कनेक्शन, पिन से मेल खाता है या नहीं. अगर ऐसा नहीं है, तो Chrome report-uri को रिपोर्ट भेजता है. Chrome कभी भी 'रिपोर्ट-ओनली' हेडर में पिन के आधार पर अनुरोधों को ब्लॉक नहीं करेगा. इसलिए, यह HPKP को आज़माने का एक सुरक्षित तरीका है. इससे यह देखा जा सकता है कि इससे आपके उपयोगकर्ताओं को कोई समस्या तो नहीं है. आपकी साइट पर DoSing का जोखिम भी नहीं है.

ध्यान दें कि 'सिर्फ़ रिपोर्ट' हेडर सिर्फ़ उस अनुरोध पर लागू होता है जिस पर इसे मिला है. ब्राउज़र, 'सिर्फ़ रिपोर्ट' पिन को उतना याद नहीं रखता जितना कि रीयल पिन के लिए करता है. इससे आपको उपयोगकर्ताओं के ब्राउज़र में खराब वैल्यू को कैश मेमोरी में सेव करने की चिंता किए बिना, कॉन्फ़िगरेशन की जांच करने की सुविधा मिलती है. साथ ही, अपने सर्वर को रिपोर्ट से भरने के लिए, धीरे-धीरे (उदाहरण के लिए, सिर्फ़ एक ही संसाधन पर) रोल आउट किया जा सकता है.

अपने पिन लागू करने के लिए, Public-Key-Pins हेडर को रोल आउट करते समय, उस हेडर में Report-uri वैल्यू भी शामिल की जा सकती है. इससे, कोई समस्या होने पर भी आपको रिपोर्ट मिलती रहेगी.

एचपीकेपी की उल्लंघन की रिपोर्ट में क्या शामिल होता है?

एचपीकेपी के उल्लंघन की रिपोर्ट एक JSON मैसेज होता है. यह आपके कॉन्फ़िगर किए गए 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 जैसी सेवा का इस्तेमाल करने का विकल्प है. इसकी मदद से आपको उल्लंघन की रिपोर्ट मिलती हैं.