वेब पैकेजर का इस्तेमाल करके, साइन किए गए एक्सचेंज (एसएक्सजी) दिखाने का तरीका जानें.
साइन किया गया एक्सचेंज (एसएक्सजी) एक डिलीवरी का तरीका है. इसकी मदद से, संसाधन के ऑरिजिन की अलग से पुष्टि की जा सकती है. इससे यह पता नहीं चलता कि रिसॉर्स कैसे डिलीवर किया गया.
यहां दिए गए निर्देशों में, वेब पैकेजर का इस्तेमाल करके, साइन किए गए एक्सचेंज सेट अप करने का तरीका बताया गया है. खुद हस्ताक्षर किए गए और CanSignHttpExchanges
सर्टिफ़िकेट, दोनों के लिए निर्देश शामिल हैं.
खुद हस्ताक्षर किए गए सर्टिफ़िकेट का इस्तेमाल करके, एसएक्सजी उपलब्ध कराएं
एसएक्सजी दिखाने के लिए, खुद के हस्ताक्षर वाले सर्टिफ़िकेट का इस्तेमाल मुख्य रूप से, प्रज़ेंटेशन और जांच के लिए किया जाता है. खुद हस्ताक्षर किए हुए सर्टिफ़िकेट से साइन किए गए एसएक्सजी, टेस्टिंग एनवायरमेंट के बाहर इस्तेमाल किए जाने पर ब्राउज़र में गड़बड़ी के मैसेज जनरेट करेंगे. इन्हें क्रॉलर को नहीं दिखाना चाहिए.
ज़रूरी शर्तें
इन निर्देशों का पालन करने के लिए, आपको अपने डेवलपमेंट एनवायरमेंट में openssl और Go इंस्टॉल करना होगा.
खुद हस्ताक्षर किया हुआ सर्टिफ़िकेट जनरेट करना
इस सेक्शन में, अपने-आप हस्ताक्षर वाला सर्टिफ़िकेट जनरेट करने का तरीका बताया गया है. इसका इस्तेमाल, हस्ताक्षर किए गए एक्सचेंज के साथ किया जा सकता है.
निर्देश
निजी पासकोड जनरेट करें.
openssl ecparam -out priv.key -name prime256v1 -genkey
निजी कुंजी को
priv.key
नाम की फ़ाइल के तौर पर सेव किया जाएगा.सर्टिफ़िकेट पर हस्ताक्षर करने का अनुरोध (सीएसआर) बनाएं.
openssl req -new -sha256 -key priv.key -out cert.csr -subj '/O=Web Packager Demo/CN=example.com'
सर्टिफ़िकेट पर हस्ताक्षर करने का अनुरोध, कोड में बदले गए टेक्स्ट का एक ब्लॉक होता है. इसमें सर्टिफ़िकेट देने वाली संस्था (सीए) से सर्टिफ़िकेट का अनुरोध करने के लिए ज़रूरी जानकारी होती है. हालांकि, आपको सीए से सर्टिफ़िकेट का अनुरोध नहीं करना है, फिर भी सर्टिफ़िकेट पर हस्ताक्षर करने का अनुरोध करना ज़रूरी है.
ऊपर दिया गया कमांड,
Web Packager Demo
नाम के ऐसे संगठन के लिए सर्टिफ़िकेट पर हस्ताक्षर करने का अनुरोध बनाता है जिसका सामान्य नामexample.com
है. सामान्य नाम, उस साइट का पूरा डोमेन नेम होना चाहिए जिसमें वह कॉन्टेंट मौजूद है जिसे आपको SXG के तौर पर पैकेज करना है.प्रोडक्शन SXG सेटअप में, यह ऐसी साइट होगी जिसका मालिकाना हक आपके पास होगा. हालांकि, इन निर्देशों में बताए गए टेस्ट एनवायरमेंट में, यह कोई भी साइट हो सकती है.
ऐसा सर्टिफ़िकेट बनाएं जिसमें
CanSignHttpExchanges
एक्सटेंशन हो.openssl x509 -req -days 90 -in cert.csr -signkey priv.key -out cert.pem -extfile <(echo -e "1.3.6.1.4.1.11129.2.1.22 = ASN1:NULL\nsubjectAltName=DNS:example.com")
यह निर्देश निजी पासकोड और पहले और दूसरे चरण में बनाए गए CSR का इस्तेमाल करके, सर्टिफ़िकेट फ़ाइल
cert.pem
बनाता है.-extfile
फ़्लैग, सर्टिफ़िकेट कोCanSignHttpExchanges
सर्टिफ़िकेट एक्सटेंशन से जोड़ता है.1.3.6.1.4.1.11129.2.1.22
,CanSignHttpExchanges
एक्सटेंशन के लिए ऑब्जेक्ट आइडेंटिफ़ायर है. इसके अलावा,-extfile
फ़्लैग,example.com
को विषय के लिए वैकल्पिक नाम के तौर पर भी तय करता है.अगर आपको
cert.pem
के कॉन्टेंट के बारे में जानना है, तो इन कमांड का इस्तेमाल करके उन्हें देखा जा सकता है:openssl x509 -in cert.pem -noout -text
आपने निजी कुंजियां और प्रमाणपत्र बना लिए हैं. अगले सेक्शन में, आपको
priv.key
औरcert.pem
फ़ाइलों की ज़रूरत पड़ेगी.
टेस्टिंग के लिए वेब पैकेज़र सर्वर सेट अप करना
ज़रूरी शर्तें
वेब पैकेजर इंस्टॉल करें.
git clone https://github.com/google/webpackager.git
बिल्ड
webpkgserver
.cd webpackager/cmd/webpkgserver go build .
webpkgserver
, वेब पैकेजर प्रोजेक्ट में मौजूद एक खास बाइनरी है.पुष्टि करें कि
webpkgserver
सही तरीके से इंस्टॉल किया गया हो../webpkgserver --help
इस निर्देश से,
webpkgserver
के इस्तेमाल के बारे में जानकारी मिलनी चाहिए. अगर इससे काम नहीं बनता है, तो समस्या हल करने का सबसे अच्छा तरीका यह है कि आप इस बात की पुष्टि कर लें कि आपका GOPATH सही तरीके से कॉन्फ़िगर किया गया है.
निर्देश
webpkgserver
डायरेक्ट्री पर जाएं (हो सकता है कि आप पहले से इस डायरेक्ट्री में हों).cd /path/to/cmd/webpkgserver
उदाहरण को कॉपी करके,
webpkgsever.toml
फ़ाइल बनाएं.cp ./webpkgserver.example.toml ./webpkgserver.toml
इस फ़ाइल में
webpkgserver
के लिए कॉन्फ़िगरेशन के विकल्प मौजूद हैं.अपनी पसंद के एडिटर में
webpkgserver.toml
खोलें और ये बदलाव करें:- लाइन
#AllowTestCert = false
कोAllowTestCert = true
में बदलें. - आपने जो PEM सर्टिफ़िकेट
cert.pem
बनाया है उसका पाथ दिखाने के लिए, लाइनPEMFile = 'path/to/your.pem'
में बदलाव करें.TLS.PEMFile
के बारे में बताने वाली लाइन में बदलाव न करें—यह कॉन्फ़िगरेशन का एक अलग विकल्प है. - आपने जो निजी पासकोड
priv.key
बनाया है उसका पाथ दिखाने के लिए,KeyFile = 'priv.key'
लाइन को बदलें.TLS.KeyFile
के बारे में बताने वाली लाइन को न बदलें—यह कॉन्फ़िगरेशन का एक अलग विकल्प है. - लाइन
#CertURLBase = '/webpkg/cert'
कोCertURLBase = 'data:'
में बदलें.CertURLBase
, SXG सर्टिफ़िकेट की सेवा देने की जगह की जानकारी देता है. इस जानकारी का इस्तेमाल, SXG केSignature
हेडर मेंcert-url
पैरामीटर सेट करने के लिए किया जाता है. प्रोडक्शन एनवायरमेंट में,CertURLBase
को इस तरह इस्तेमाल किया जाता है:CertURLBase = 'https://mysite.com/'
. हालांकि, स्थानीय जांच के लिए,CertURLBase = 'data:'
का इस्तेमाल करकेwebpkgserver
को निर्देश दिया जा सकता है कि वहcert-url
फ़ील्ड में सर्टिफ़िकेट को इनलाइन करने के लिए, डेटा यूआरएल का इस्तेमाल करे. स्थानीय टेस्टिंग के लिए, एसएक्सजी सर्टिफ़िकेट दिखाने का यह सबसे आसान तरीका है. Domain = 'example.org'
लाइन में बदलाव करके, उस डोमेन को दिखाएं जिसके लिए आपने सर्टिफ़िकेट बनाया है. अगर आपने इस लेख में दिए गए निर्देशों का पूरी तरह से पालन किया है, तो यह स्टेटसexample.com
में बदल जाना चाहिए.webpkgserver
सिर्फ़ उस डोमेन से कॉन्टेंट फ़ेच करेगा जिसेwebpkgserver.toml
से दिखाया गया है. अगरwebpkgserver.toml
को अपडेट किए बिना किसी दूसरे डोमेन से पेज फ़ेच करने की कोशिश की जाती है, तोwebpkgserver
लॉग में गड़बड़ी का मैसेजURL doesn't match the fetch targets
दिखेगा.
ज़रूरी नहीं
अगर आपको सब-रिसॉर्स को पहले से लोड करने की सुविधा चालू या बंद करनी है, तो
webpkgserver.toml
कॉन्फ़िगरेशन के ये विकल्प काम के हैं:webpkgserver
को स्प्रेडशीट और स्क्रिप्ट सब-रिसॉर्स को एसएक्सजी के तौर पर प्रीलोड करने के लिए निर्देश डालने के लिए,#PreloadCSS = false
पंक्ति कोPreloadCSS = true
में बदलें. इसके अलावा, लाइन#PreloadJS = false
कोPreloadJS = true
में बदलें.इस कॉन्फ़िगरेशन विकल्प का इस्तेमाल करने के बजाय, किसी पेज के एचटीएमएल में मैन्युअल रूप से
Link: rel="preload"
हेडर और<link rel="preload">
टैग जोड़े जा सकते हैं.डिफ़ॉल्ट रूप से,
webpkgserver
मौजूदा<link rel="preload">
टैग को, उसी तरह के<link>
टैग से बदल देता है जो इस कॉन्टेंट को SXG के तौर पर फ़ेच करने के लिए ज़रूरी हैं. ऐसा करने पर,webpkgserver
ज़रूरत के हिसाब सेallowed-alt-sxg
औरheader-integrity
डायरेक्टिव सेट करेगा—एचटीएमएल लेखकों को इन्हें मैन्युअल तरीके से जोड़ने की ज़रूरत नहीं है. इस व्यवहार को बदलने और मौजूदा ऐसे प्रीलोड को बनाए रखने के लिए जो एसएक्सजी नहीं हैं,#KeepNonSXGPreloads (default = false)
कोKeepNonSXGPreloads = true
में बदलें. ध्यान रखें कि इस विकल्प को चालू करने पर, एसएक्सजी इन ज़रूरी शर्तों के मुताबिक, Google एसएक्सजी कैश मेमोरी का इस्तेमाल नहीं कर पाएगा.
- लाइन
webpkgserver
शुरू करें../webpkgserver
अगर सर्वर सही तरीके से शुरू हो गया है, तो आपको लॉग में ये मैसेज दिखेंगे:
shell Listening at 127.0.0.1:8080 Successfully retrieved valid OCSP. Writing to cache in /private/tmp/webpkg
आपके लॉग मैसेज थोड़े अलग दिख सकते हैं. खास तौर पर,
webpkgserver
सर्टिफ़िकेट को कैश मेमोरी में सेव करने के लिए जिस डायरेक्ट्री का इस्तेमाल करता है वह ऑपरेटिंग सिस्टम के हिसाब से अलग-अलग होती है.अगर आपको ये मैसेज नहीं दिखते हैं, तो समस्या हल करने का पहला चरण यह है कि
webpkgserver.toml
की दोबारा जांच करें.webpkgserver.toml
को अपडेट करने के बाद, आपकोwebpkgserver
को रीस्टार्ट करना होगा.इस निर्देश का इस्तेमाल करके Chrome लॉन्च करें:
shell /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome \ --user-data-dir=/tmp/udd \ --ignore-certificate-errors-spki-list=`openssl x509 -noout -pubkey -in cert.pem | openssl pkey -pubin -outform der | openssl dgst -sha256 -binary | base64`
यह निर्देश, Chrome को
cert.pem
से जुड़े सर्टिफ़िकेट की गड़बड़ियों को अनदेखा करने का आदेश देता है. इससे टेस्ट सर्टिफ़िकेट का इस्तेमाल करके, एसएक्सजी की जांच की जा सकती है. अगर Chrome को इस कमांड के बिना लॉन्च किया जाता है, तो DevTools में एसएक्सजी की जांच करने पर, गड़बड़ीCertificate verification error: ERR_CERT_INVALID
दिखेगी.ध्यान दें:
आपको इस कमांड को अडजस्ट करना पड़ सकता है, ताकि आपकी मशीन पर Chrome की जगह के साथ-साथ
cert.pem
की जगह की जानकारी भी दिखाई जा सके. अगर आपने यह तरीका सही तरीके से अपनाया है, तो आपको पता बार के नीचे एक चेतावनी दिखेगी. चेतावनी कुछ ऐसी होनी चाहिए:You are using an unsupported command-line flag: --ignore-certificate-errors-spki-list=9uxADcgc6/ho0mJLRMBcOjfBaN21k0sOInoMchr9CMY=.
अगर चेतावनी में हैश स्ट्रिंग शामिल नहीं है, तो आपने एसएक्सजी सर्टिफ़िकेट की जगह की जानकारी सही तरीके से नहीं दी है.
DevTools का नेटवर्क टैब खोलें. इसके बाद, यह यूआरएल खोलें:
http://localhost:8080/priv/doc/https://example.com
.इससे
http://localhost:8080
पर चल रहेwebpackager
इंस्टेंस को,https://example.com
के कॉन्टेंट वाले एसएक्सजी के लिए अनुरोध मिलता है./priv/doc/
, डिफ़ॉल्ट एपीआई एंडपॉइंट है. इसका इस्तेमालwebpackager
करता है.ये संसाधन, नेटवर्क टैब में मौजूद हैं:
signed-exchange
टाइप का रिसॉर्स. यह एसएक्सजी है.cert-chain+cbor
टाइप वाला संसाधन. यह SXG सर्टिफ़िकेट है. एसएक्सजी सर्टिफ़िकेट,application/cert-chain+cbor
फ़ॉर्मैट का इस्तेमाल करना चाहिए.document
टाइप का रिसॉर्स. यह कॉन्टेंट एसएक्सजी के ज़रिए डिलीवर किया गया है.
अगर आपको ये संसाधन नहीं दिखते हैं, तो ब्राउज़र की कैश मेमोरी मिटाएं और
http://localhost:8080/priv/doc/https://example.com
को फिर से लोड करके देखें.हस्ताक्षर किए गए एक्सचेंज और उसके हस्ताक्षर के बारे में ज़्यादा जानकारी देखने के लिए, झलक टैब पर क्लिक करें.
CanSignHttpExchanges
सर्टिफ़िकेट का इस्तेमाल करके, साइन किए गए एक्सचेंज दिखाना
इस सेक्शन में दिए गए निर्देशों में, CanSignHttpExchanges
सर्टिफ़िकेट का इस्तेमाल करके SXG दिखाने का तरीका बताया गया है. SXGs को प्रोडक्शन में इस्तेमाल करने के लिए,
CanSignHttpExchanges
सर्टिफ़िकेट की ज़रूरत होती है.
कम शब्दों में बताने के लिए, ये निर्देश इस आधार पर लिखे गए हैं कि आपने साइन किए गए एक्सचेंज को सेट अप करने के लिए, खुद से हस्ताक्षर किए गए सर्टिफ़िकेट का इस्तेमाल करना सेक्शन में बताए गए कॉन्सेप्ट को समझ लिया है.
ज़रूरी शर्तें
आपके पास
CanSignHttpExchanges
सर्टिफ़िकेट है. इस पेज पर, ऐसे सीए की सूची दी गई है जो इस तरह का सर्टिफ़िकेट देते हैं.अगर आपके पास सर्टिफ़िकेट नहीं है, तो अपने सीए से सर्टिफ़िकेट अपने-आप पाने के लिए, अपने webpkgserver को कॉन्फ़िगर किया जा सकता है. आप इस पेज पर जाकर,
webpkgserver.toml
में बताए गए निर्देशों का पालन कर सकते हैं.हालांकि, यह ज़रूरी नहीं है, लेकिन हमारा सुझाव है कि आप
webpkgserver
को किसी एज सर्वर के पीछे चलाएं. अगर किसी एज सर्वर का इस्तेमाल नहीं किया जाता है, तो आपकोwebpkgserver.toml
मेंTLS.PEMFile
औरTLS.KeyFile
विकल्पों को कॉन्फ़िगर करना होगा. डिफ़ॉल्ट रूप से,webpkgserver
एचटीटीपी पर चलता है. हालांकि, एसएक्सजी सर्टिफ़िकेट को एचटीटीपीएस पर दिखाना ज़रूरी है, ताकि ब्राउज़र इसे मान्य मान सके.TLS.PEMFile
औरTLS.KeyFile
को कॉन्फ़िगर करने से,webpkgserver
को एचटीटीपीएस का इस्तेमाल करने की अनुमति मिलती है. इसलिए, सीधे ब्राउज़र पर एसएक्सजी सर्टिफ़िकेट दिखाया जा सकता है.
निर्देश
अपनी साइट के SXG सर्टिफ़िकेट के बाद, अपनी साइट के सीए सर्टिफ़िकेट को जोड़कर, एक PEM फ़ाइल बनाएं. इस बारे में ज़्यादा निर्देश यहां देखे जा सकते हैं.
PEM एक ऐसा फ़ाइल फ़ॉर्मैट है जिसका इस्तेमाल, आम तौर पर एक से ज़्यादा सर्टिफ़िकेट सेव करने के लिए "कंटेनर" के तौर पर किया जाता है.
उदाहरण को कॉपी करके, एक नई
webpkgsever.toml
फ़ाइल बनाएं.cp ./webpkgserver.example.toml ./webpkgserver.toml
अपनी पसंद के एडिटर की मदद से
webpkgserver.toml
खोलें और ये बदलाव करें:PEMFile = cert.pem
लाइन में बदलाव करके, उस पीईएम फ़ाइल की जगह दिखाएं जिसमें आपकी पूरी सर्टिफ़िकेट चेन शामिल है.- अपनी PEM फ़ाइल से जुड़ी निजी कुंजी की जगह दिखाने के लिए,
KeyFile = 'priv.key'
लाइन बदलें. - अपनी साइट को दिखाने के लिए, लाइन
Domain = 'example.org'
बदलें. - (ज़रूरी नहीं)
webpkgserver
के SXG सर्टिफ़िकेट को हर 90 दिन (Google के लिए 45 दिन) में अपने-आप रिन्यू होने की सुविधा चालू करने के लिए,webpkgserver.toml
के[SXG.ACME]
सेक्शन में जाकर विकल्पों को कॉन्फ़िगर करें. यह विकल्प सिर्फ़ उन साइटों पर लागू होता है जिनके पास DigiCert या Google ACME खाता सेट अप है.
ट्रैफ़िक को
webpkgserver
इंस्टेंस पर फ़ॉरवर्ड करने के लिए, अपने एज सर्वर को कॉन्फ़िगर करें.webpkgserver
दो तरह के मुख्य अनुरोधों को मैनेज करता है: एसएक्सजी के लिए अनुरोध (/priv/doc/
एंडपॉइंट से दिखाए जाते हैं) और एसएक्सजी सर्टिफ़िकेट के लिए अनुरोध (/webpkg/cert/
एंडपॉइंट से दिखाए जाते हैं). इनमें से हर तरह के अनुरोध के लिए, यूआरएल को फिर से लिखने के नियम थोड़े अलग होते हैं. ज़्यादा जानकारी के लिए, फ़्रंट-एंड एज सर्वर के पीछे चलना लेख पढ़ें.ध्यान दें:
डिफ़ॉल्ट रूप से,
webpkgserver
,/webpkg/cert/$CERT_HASH
पर एसएक्सजी सर्टिफ़िकेट दिखाता है. उदाहरण के लिए,/webpkg/cert/-0QmE0gvoedn92gtwI3s7On9zPevJGm5pn2RYhpZxgY
.$CERT_HASH
को जनरेट करने के लिए, यह कमांड चलाएं:shell openssl base64 -in cert.pem -d | openssl dgst -sha256 -binary | base64 | tr /+ _- | tr -d =