इस दस्तावेज़ में, आइसोलेटेड वेब ऐप्लिकेशन (आईडब्ल्यूए) के लिए कुंजी रोटेशन की प्रोसेस के बारे में ज़रूरी जानकारी दी गई है. इसमें यह भी बताया गया है कि कुंजी रोटेशन कब ज़रूरी है. साथ ही, अगर कोई कुंजी खो जाती है या उसके साथ समझौता किया जाता है, तो डेवलपर को कौनसे चरण पूरे करने होंगे.
आईडब्ल्यूए के लिए डेटा सुरक्षित करने वाली कुंजी का नया वर्शन बनाना
की रोटेशन एक ऐसा तरीका है जिसकी मदद से, आपके आईडब्ल्यूए पर साइन करने के लिए इस्तेमाल की गई निजी कुंजियों को बदला जा सकता है. ऐसा तब किया जाता है, जब निजी कुंजियों के लीक होने या खो जाने का खतरा हो. इस प्रोसेस से, ऐप्लिकेशन काम करता रहता है. साथ ही, बंडल आईडी और ऑरिजिन स्थिर रहता है. इससे यह पक्का होता है कि आपके ऐप्लिकेशन का डिस्ट्रिब्यूशन और अपडेट जारी रहें.
कुंजी बदलने की प्रोसेस के लिए, एडमिन या उपयोगकर्ता के स्तर पर कोई बदलाव करने की ज़रूरत नहीं होती. अगर इस प्रोसेस को सही तरीके से पूरा किया जाता है, तो उन्हें इसकी जानकारी भी नहीं मिलेगी. शुरुआती तौर पर अनुमति देने की प्रोसेस के दौरान सेट किए गए भरोसेमंद संपर्क चैनल, कुंजी रोटेशन की सुविधा चालू करने के लिए ज़रूरी हैं.
डेटा सुरक्षित करने वाली कुंजी का नया वर्शन बनाने की ज़रूरत
'की' बदलने की सुविधा, इन दो मुख्य स्थितियों में इस्तेमाल करना ज़रूरी है:
- कुंजी के साथ छेड़छाड़ या उसके लीक होने का खतरा: अगर आपकी निजी साइनिंग कुंजी के साथ छेड़छाड़ की गई है या उसके लीक होने का खतरा है, तो आपको अपने ऐप्लिकेशन को सुरक्षित रखने के लिए, कुंजी बदलने की प्रोसेस तुरंत शुरू करनी होगी. लीक हुई कुंजी का इस्तेमाल करके, कोई व्यक्ति आपकी पहचान चुरा सकता है. इससे आपके ऐप्लिकेशन के उपयोगकर्ताओं को नुकसान पहुंच सकता है और आपकी कंपनी की प्रतिष्ठा को खतरा हो सकता है.
- कुंजी खो जाना: अगर आपके पास निजी साइनिंग कुंजी का ऐक्सेस नहीं है और नए अपडेट पर हस्ताक्षर नहीं किया जा सकता, तो कुंजी रोटेशन की ज़रूरत होती है. इससे आपको अपने ऐप्लिकेशन को फिर से डिस्ट्रिब्यूट करने की सुविधा मिलती है.
डेवलपर के लिए ज़रूरी शर्तें
कुंजी रोटेशन शुरू करने से पहले, आपको ये ज़रूरी शर्तें पूरी करनी होंगी:
- अनुमति वाली सूची में शामिल ऐप्लिकेशन: सिर्फ़ अनुमति वाली सूची में शामिल ऐप्लिकेशन के लिए, कुंजी बदली जा सकती है.
- भरोसेमंद ईमेल पता: आपको कुंजी रोटेशन का अनुरोध करने के लिए, अनुमति वाली सूची में शामिल होने की प्रोसेस के दौरान दिया गया भरोसेमंद ईमेल पता इस्तेमाल करना होगा.
होस्ट किए गए ऐप्लिकेशन को बंद करना और नए वर्शन रिलीज़ करना
की बदलने के बाद, इंस्टॉल किए गए ऐप्लिकेशन के उन सभी इंस्टेंस को ब्लॉक कर दिया जाता है जिन्हें मान्य की से साइन नहीं किया गया है. अपने उपयोगकर्ताओं को होने वाली रुकावटों को रोकने के लिए, आपको नई कुंजी (या दोनों कुंजियों) से साइन किया गया ऐप्लिकेशन डिलीवर करना होगा. बंडलों को फिर से साइन करने की तकनीकी जानकारी, एक बंडल को कई कुंजियों से साइन करने का तरीका सेक्शन में देखी जा सकती है. आपकी स्थिति के हिसाब से, अलग-अलग स्थितियां हो सकती हैं:
पहला उदाहरण: कुंजी खोई नहीं है (उदाहरण के लिए, सक्रिय रोटेशन या लीक)
आपको ऐप्लिकेशन को दोनों कुंजियों (पुरानी और नई) से साइन करना होगा. इसके बाद, उपयोगकर्ताओं को ये कुंजियां देनी होंगी. इसके लिए, इनमें से कोई एक तरीका अपनाएं:
- ऐप्लिकेशन का नया वर्शन रिलीज़ करना (अपने अपडेट मेनिफ़ेस्ट में नया वर्शन जोड़ना) या
- होस्ट की गई
.swbnफ़ाइलों को अपडेट करना. ये फ़ाइलें, अपडेट मेनिफ़ेस्ट में लिंक की गई हैं. इन्हें दोनों कुंजियों से साइन किया जाना चाहिए. सीएलआई टूल की मदद से, मौजूदाswbnबंडल में एक और हस्ताक्षर जोड़ा जा सकता है.
Google के पास पासकोड रोटेशन की प्रोसेस शुरू करने से पहले, आपको यह काम करना होगा. इससे यह पक्का किया जा सकेगा कि आपके उपयोगकर्ताओं को इस बदलाव के बारे में पता न चले.
दूसरी स्थिति: डिजिटल बटन खो गया है
खोई हुई कुंजी से ऐप्लिकेशन को साइन नहीं किया जा सकता. इसलिए, यह मामला ज़्यादा जटिल है. 'की' बदलने का अनुरोध करें और आगे की कार्रवाई के लिए, Google से संपर्क करें. आपको इन निर्देशों का पालन करके, होस्ट किए गए बंडलों में नए हस्ताक्षर जोड़ने के लिए कहा जा सकता है.
डेटा सुरक्षित करने वाली कुंजी का नया वर्शन बनाने की प्रोसेस
'की' बदलने की प्रोसेस में ये चरण शामिल होते हैं:
| चरण | कार्रवाई | विवरण | Responsible |
|---|---|---|---|
| 1 | डेटा सुरक्षित करने वाली कुंजी का नया वर्शन बनाने का अनुरोध करना | डेवलपर/पार्टनर, अनुमति वाली सूची में शामिल होने की प्रोसेस में दिए गए भरोसेमंद ईमेल के ज़रिए, Google से संपर्क करता है. जैसे, पार्टनर इंजीनियरिंग या संपर्क का कोई अन्य तरीका. इसके बाद, वह कुंजी रोटेशन के निर्देशों के बारे में पूछता है और इसकी वजह बताता है. अगर कुंजी से समझौता किया गया है, तो हमारा सुझाव है कि अपडेट मेनिफ़ेस्ट को उन बंडलों के साथ अटैच करें जिन्हें पुरानी और नई कुंजियों से साइन किया गया है. इससे प्रोसेस को तेज़ी से पूरा किया जा सकेगा. | डेवलपर / पार्टनर |
| 2 | अनुरोध करने वाले व्यक्ति को जवाब देना | Google का प्रतिनिधि, अनुरोध करने वाले व्यक्ति को आगे के निर्देश देता है और उससे सवाल पूछता है. इस चरण में, कुछ बार आगे-पीछे की कार्रवाई करनी पड़ सकती है. | Google संपर्क |
| 3 | डेटा उपलब्ध कराना | डेवलपर/पार्टनर निर्देशों का पालन करता है. इनमें ये शामिल हो सकते हैं:
|
डेवलपर / पार्टनर |
| 4 | अनुरोध प्रोसेस करना और सुझाव देना |
Google, कुंजी रोटेशन के अनुरोध की समीक्षा करता है. इसके बाद, एक कामकाजी हफ़्ते के अंदर जवाब देता है. इसमें अनुरोध को स्वीकार या अस्वीकार किया जा सकता है. इसके अलावा, डेवलपर से ज़्यादा जानकारी के लिए संपर्क भी किया जा सकता है. मंज़ूरी मिलने के बाद, Google कुंजी को रोटेट करता है और सुझाव/राय देता है या शिकायत करता है. | Google संपर्क |
चैनल और वर्शन पिन करने की सुविधा से जुड़ा अपडेट
एडमिन कभी-कभी कस्टम अपडेट चैनल या वर्शन पिन करने की सुविधा का इस्तेमाल करते हैं. इससे वे अपने क्लाइंट डिवाइसों पर ऐप्लिकेशन के वर्शन मैनेज कर पाते हैं. 'की' बदलने के बाद, अमान्य कुंजियों से इंस्टॉल किए गए सभी ऐप्लिकेशन अमान्य हो जाते हैं और उन्हें ब्लॉक कर दिया जाता है. ऐसा होने से रोकने के लिए, update_manifest.json में दिए गए लिंक पर होस्ट किए गए ऐप्लिकेशन के पुराने वर्शन को भी अपडेट किया जाना चाहिए. साथ ही, पासकोड बदलने से पहले, उन पर दो हस्ताक्षर होने चाहिए. अगर आपकी पुरानी कुंजी खो गई है और ऐप्लिकेशन को दो कुंजियों से साइन नहीं किया जा सकता, तो तुरंत अपने Google संपर्क को इसकी सूचना दें. हम इस समस्या को ठीक करने के लिए आपके साथ मिलकर काम करेंगे, ताकि ऐप्लिकेशन को अपडेट किया जा सके. इससे आपके उपयोगकर्ताओं के वर्कफ़्लो में कोई रुकावट नहीं आएगी.
एक बंडल को कई कुंजियों से साइन करने का तरीका
इस सेक्शन में, सीएलआई टूल या Webpack/Rollup/Vite प्लगिन के कॉन्फ़िगरेशन की मदद से, एक या दो कुंजियों से अपने वेब बंडल पर हस्ताक्षर करने का तरीका बताया गया है. सीएलआई टूल की मदद से, मौजूदा swbn बंडल में एक और हस्ताक्षर जोड़ा जा सकता है. यह सुविधा, पासकोड खो जाने या होस्ट किए गए पिछले बंडलों को अपडेट करने के मामलों में काम आ सकती है.
सीएलआई टूल
सबसे पहले, पक्का करें कि आपने npm का इस्तेमाल करके wbn-sign पैकेज इंस्टॉल किया हो:
$ npm i wbn-sign
सिर्फ़ मौजूदा फ़ोल्डर में पैकेज इंस्टॉल करने के बजाय, इसे ग्लोबल लेवल पर इंस्टॉल करने के लिए -g जोड़ें.
एक कुंजी से साइन करना
$ wbn-sign -i unsigned.wbn -o signed.swbn -k private.pem
दो कुंजियों से साइन करना
$ wbn-sign sign webbundle.wbn old_key.pem new_key.pem -o signed.swbn --web-bundle-id <your-id-from-old-private>
अगर old_key वह पहली कुंजी है जिससे ऐप्लिकेशन के शुरुआती वर्शन को साइन किया गया था, तो --web-bundle-id <id> आर्ग्युमेंट को छोड़ा जा सकता है. इसके बाद, बंडल आईडी को कुंजी से लिया जाएगा. wbn-sign info signed.swbn कमांड का इस्तेमाल करके, बंडल आईडी की पुष्टि की जा सकती है.
मौजूदा बंडल में हस्ताक्षर जोड़ना
$ wbn-sign add-signature signed.swbn key3.pem --in-place
अगर आपको बंडल को नहीं बदलना है, लेकिन दो बार हस्ताक्षर किया गया नया बंडल बनाना है, तो -o का इस्तेमाल करें.
सीएलआई टूल के बारे में ज़्यादा जानकारी
सीएलआई टूल इस्तेमाल करने के बारे में ज़्यादा जानने के लिए, npm wbn-sign
page देखें. इसके अलावा, wnb-sign
help. का इस्तेमाल करें
Webpack प्लगिन
एक कुंजी से साइन करना
एक निजी पासकोड का इस्तेमाल करके, अपने आईडब्ल्यूए पर हस्ताक्षर करने के लिए Webpack प्लगिन को कॉन्फ़िगर करने का तरीका:
WebBundlePluginको सेट अप करें, ताकि ज़रूरी बेस यूआरएल सीधे इस कुंजी से अपने-आप मिल जाए.- हस्ताक्षर की गई
.swbnफ़ाइल बनाने के लिए, एकNodeCryptoSigningStrategyका इस्तेमाल करें.
// key is parsePemKey(private.pem)
plugins.push(
new WebBundlePlugin({
baseURL: new WebBundleId(key).serializeWithIsolatedWebAppOrigin(),
static: { dir: 'public' },
output: 'signed.swbn',
integrityBlockSign: {
strategy: new NodeCryptoSigningStrategy(key)
}
})
)
दो कुंजियों से साइन करना
जब आपको कुंजी बदलने के दौरान, अपने ऐप्लिकेशन पर दो बार साइन करना हो, तब:
- अपने ओरिजनल (
old_key) के आधार परwebBundleIdऔर बेस यूआरएल तय करें, ताकि यह पक्का किया जा सके कि आपके उपयोगकर्ताओं के लिए ऐप्लिकेशन की पहचान स्थिर रहे. - पुरानी और नई, दोनों निजी कुंजियों को लागू करने के लिए, साइन करने की कई रणनीतियों का इस्तेमाल करें.
// old_key is parsePemKey(old_private.pem)
// new_key is parsePemKey(new_private.pem)
plugins.push(
new WebBundlePlugin({
baseURL: new WebBundleId(old_key).serializeWithIsolatedWebAppOrigin(),
static: { dir: 'public') },
output: 'signed.swbn',
integrityBlockSign: {
strategies: [
new NodeCryptoSigningStrategy(old_key),
new NodeCryptoSigningStrategy(new_key)
],
webBundleId: new WebBundleId(old_key).serialize()
}
})
)
Rollup या Vite प्लगिन
एक कुंजी से साइन करना
Webpack सेटअप की तरह, एक निजी पासकोड से अपने ऐप्लिकेशन पर साइन करने के लिए, Rollup या Vite प्लगिन का इस्तेमाल किया जा सकता है. इसके लिए, प्लगिन एक ही साइनिंग रणनीति का इस्तेमाल करता है. साथ ही, दिए गए पासकोड से बेस यूआरएल को डिराइव करता है, ताकि साइन किया गया आउटपुट जनरेट किया जा सके.
// key is parsePemKey(private.pem)
plugins.push({
...wbn({
baseURL: new WebBundleId(key).serializeWithIsolatedWebAppOrigin(),
static: { dir: 'public' },
output: 'signed.swbn',
integrityBlockSign: {
strategy: new NodeCryptoSigningStrategy(key)
}
}),
enforce: 'post'
})
दो कुंजियों से साइन करना
Rollup या Vite का इस्तेमाल करके अपने ऐप्लिकेशन को दो बार साइन करने के लिए, आपको प्लगिन को कॉन्फ़िगर करना होगा, ताकि वह एक से ज़्यादा कुंजियां स्वीकार कर सके. यह स्निपेट, strategies array का इस्तेमाल करके पुरानी और नई, दोनों निजी कुंजियां लागू करता है. यह सुविधा, बेस यूआरएल और आपकी ओरिजनल, मौजूदा कुंजी से webBundleId को साफ़ तौर पर बनाए रखती है. इससे, ट्रांज़िशन आसानी से हो पाता है.
// old_key is parsePemKey(old_private.pem)
// new_key is parsePemKey(new_private.pem)
plugins.push({
...wbn({
baseURL: new WebBundleId(old_key).serializeWithIsolatedWebAppOrigin(),
static: { dir: 'public' },
output: 'signed.swbn',
integrityBlockSign: {
strategies: [
new NodeCryptoSigningStrategy(old_key),
new NodeCryptoSigningStrategy(new_key)
],
webBundleId: new WebBundleId(old_key).serialize()
}
}),
enforce: 'post'
})
नतीजा
अपने आईडब्ल्यूए के लिए, कुंजी बदलने की प्रोसेस को सही तरीके से मैनेज करना ज़रूरी है. इससे आपके ऐप्लिकेशन को सुरक्षित रखने और उसे लगातार उपलब्ध कराने में मदद मिलती है. आपकी खास स्थिति (उदाहरण के लिए, कुंजी खो गई है या नहीं) के बावजूद, बताए गए चरणों को पूरा करने से यह पक्का होता है कि आपके उपयोगकर्ताओं को कम से कम रुकावट का सामना करना पड़े. सीएलआई टूल या Webpack, Rollup या Vite के लिए दिए गए प्लगिन कॉन्फ़िगरेशन का इस्तेमाल करके, अपने ऐप्लिकेशन के सिग्नेचर को आसानी से मैनेज किया जा सकता है. साथ ही, मुख्य रोटेशन की प्रोसेस को आसानी से पूरा किया जा सकता है. आपातकालीन स्थितियों में, अपने Google संपर्क से तुरंत संपर्क करें. इसके लिए, भरोसेमंद के तौर पर सेट किए गए ईमेल पते का इस्तेमाल करें.