كيفية إعداد Signed Exchange باستخدام Web Packager

تعرَّف على كيفية عرض عمليات التبادل الموقَّعة (SXG) باستخدام Web Packager.

Katie Hempenius
Katie Hempenius

التبادل الموقَّع (SXG) هو آلية تسليم تجعل من الممكن مصادقة مصدر أحد الموارد بغض النظر عن كيفية تسليمه. توضِّح التعليمات التالية كيفية إعداد عمليات Signed Exchange باستخدام Web Packager. تتوفّر تعليمات بشأن كل من الشهادات الموقَّعة ذاتيًا وCanSignHttpExchanges.

عرض ملفات SXG باستخدام شهادة موقَّعة ذاتيًا

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

المتطلبات الأساسية

اتّباع هذه التعليمات يتطلّب تثبيت openssl و Go في بيئة التطوير.

إنشاء شهادة موقَّعة ذاتيًا

يوضّح هذا القسم كيفية إنشاء شهادة موقَّعة ذاتيًا يمكن استخدامها مع عمليات التبادل الموقَّعة.

التعليمات

  1. أنشئ مفتاحًا خاصًا.

    openssl ecparam -out priv.key -name prime256v1 -genkey
    

    سيتم حفظ المفتاح الخاص كملف باسم priv.key.

  2. أنشئ طلب توقيع شهادة (CSR).

    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 للنشر، سيكون هذا الموقع الإلكتروني مملوكًا لك. ومع ذلك، في بيئة اختبار مثل تلك الموضّحة في هذه التعليمات، يمكن أن يكون أي موقع إلكتروني.

  3. أنشئ شهادة تتضمّن إضافة 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")
    

    يستخدم هذا الأمر المفتاح الخاص وطلب توقيع الشهادة الذي تم إنشاؤه في الخطوتَين 1 و2 لإنشاءملف الشهادة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 في القسم التالي.

إعداد خادم Web Packager للاختبار

المتطلبات الأساسية

  1. ثبِّت Web Packager.

    git clone https://github.com/google/webpackager.git
    
  2. الإصدار webpkgserver

    cd webpackager/cmd/webpkgserver
    go build .
    

    webpkgserver هو ملف ثنائي محدّد ضمن مشروع Web Packager.

  3. تأكَّد من أنّه تم تثبيت webpkgserver بشكل صحيح.

    ./webpkgserver --help
    

    من المفترض أن يعرِض هذا الأمر معلومات عن استخدام webpkgserver. إذا لم تنجح هذه الطريقة، يمكنك التحقّق من ضبط GOPATH بشكلٍ صحيح كخطوة أولى جيدة لتحديد المشاكل وحلّها.

التعليمات

  1. انتقِل إلى الدليل webpkgserver (قد تكون في هذا الدليل حاليًا).

    cd /path/to/cmd/webpkgserver
    
  2. أنشئ ملف webpkgsever.toml من خلال نسخ المثال.

    cp ./webpkgserver.example.toml ./webpkgserver.toml
    

    يحتوي هذا الملف على خيارات الضبط لـ webpkgserver.

  3. افتح webpkgserver.toml باستخدام محرِّر من اختيارك وأدخِل التعديلات التالية:

    • غيِّر السطر #AllowTestCert = false إلى AllowTestCert = true.
    • غيِّر السطر PEMFile = 'path/to/your.pem' ليعكس مسار شهادة PEM، cert.pem، التي أنشأتها. لا تغيِّر السطر الذي يشير إلى TLS.PEMFile، لأنّه خيار إعدادات مختلف.
    • غيِّر السطر KeyFile = 'priv.key' ليعكس مسار المفتاح الخاص، priv.key، الذي أنشأته. لا تغيِّر السطر الذي يشير إلى TLS.KeyFile، لأنّه خيار ضبط مختلف.
    • غيِّر السطر #CertURLBase = '/webpkg/cert' إلى CertURLBase = 'data:'. يشير الرمز CertURLBase إلى موقع عرض شهادة SXG. تُستخدَم هذه المعلومات لضبط المَعلمة cert-url في Signature عنوان SXG. في بيئات الإنتاج، يتم استخدام CertURLBase على النحو التالي: CertURLBase = 'https://mysite.com/'. ومع ذلك، في ما يتعلّق بالاختبار على الجهاز، يمكن استخدام CertURLBase = 'data:' لتوجيه webpkgserver باستخدام عنوان URL لبيانات لدمج الشهادة في الحقل cert-url. بالنسبة إلى الاختبار على الجهاز، هذه هي الطريقة الأكثر ملاءمةً لعرض شهادة SXG.
    • غيِّر السطر Domain = 'example.org' ليعكس النطاق الذي أنشأت شهادة له. إذا اتّبعت التعليمات الواردة في هذه المقالة حرفيًا، من المفترض أن يتغيّر هذا الرمز إلى example.com. لن تُحضر webpkgserver المحتوى إلا من النطاق الذي يشير إليه webpkgserver.toml. إذا حاولت جلب صفحات من نطاق مختلف بدون تعديل webpkgserver.toml، ستعرض سجلّات webpkgserver رسالة الخطأ URL doesn't match the fetch targets.

    اختياريّ

    إذا كنت تريد تفعيل تحميل موارد فرعية مسبَقًا أو إيقافه، يمكنك استخدام خيارات الضبط webpkgserver.toml التالية:

    • لكي تُدرِج webpkgserver توجيهات لتحميل ملفات stylesheet والموارد الفرعية للنص البرمجي مسبقًا كملفّات SXG، غيِّر السطر #PreloadCSS = false إلى PreloadCSS = true. بالإضافة إلى ذلك، غيِّر السطر #PreloadJS = false إلى PreloadJS = true.

      كبديل لاستخدام خيار الضبط هذا، يمكنك يدوياً إضافة رؤوس Link: rel="preload" وعلامات <link rel="preload"> إلى ملف HTML الخاص بالصفحة.

    • تستبدِل علامة webpkgserver تلقائيًا علامات <link rel="preload"> الحالية بعلامات <link> المكافئة اللازمة لجلب هذا المحتوى بتنسيق SXG. عند إجراء ذلك، سيضبط webpkgserver توجيهَي allowed-alt-sxg و header-integrity حسب الحاجة، ولن يحتاج مؤلفو HTML إلى إضافتهما يدويًا. لتجاوز هذا السلوك والاحتفاظ بالعمليات الحالية لتحميل المحتوى مسبقًا غير المستندة إلى SXG، غيِّر القيمة #KeepNonSXGPreloads (default = false) إلى KeepNonSXGPreloads = true. يُرجى العِلم أنّ تفعيل هذا الخيار قد يجعل خدمة SXG غير مؤهَّلة للاستفادة من ذاكرة التخزين المؤقت لخدمة SXG من Google وفقًا لهذه المتطلبات.

  4. ابدأ 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.

  5. شغِّل 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. يتيح ذلك اختبار ملفات SXG باستخدام ملف شهادة اختبار. في حال تشغيل Chrome بدون هذا الأمر، سيؤدي فحص SXG في أدوات مطوّري البرامج إلى عرض الخطأ Certificate verification error: ERR_CERT_INVALID.

    ملاحظة:

    قد تحتاج إلى تعديل هذا الأمر ليعكس الموقع الجغرافي لمتصفّح Chrome على جهازك، بالإضافة إلى الموقع الجغرافي لـ cert.pem. إذا أجريت ذلك بشكل صحيح، من المفترض أن يظهر لك تحذير أسفل شريط العناوين. من المفترض أن يكون التحذير مشابهًا لما يلي: You are using an unsupported command-line flag: --ignore-certificate-errors-spki-list=9uxADcgc6/ho0mJLRMBcOjfBaN21k0sOInoMchr9CMY=.

    إذا لم يتضمّن التحذير سلسلة تجزئة، يعني ذلك أنّك لم تُشير بشكلٍ صحيح إلى موقع شهادة SXG.

  6. افتح علامة التبويب الشبكة في "أدوات مطوّري البرامج"، ثم انتقِل إلى عنوان URL التالي: http://localhost:8080/priv/doc/https://example.com.

    يؤدي ذلك إلى إرسال طلب إلى مثيل webpackager الذي يعمل على ‎ http://localhost:8080 للحصول على SXG يحتوي على محتوى ‎ https://example.com. /priv/doc/ هي نقطة نهاية واجهة برمجة التطبيقات التلقائية التي يستخدمها webpackager.

    لقطة شاشة لعلامة التبويب &quot;الشبكة&quot; في &quot;أدوات مطوّري البرامج&quot; تعرض ملف SXG وشهادته

    يتم إدراج المراجع التالية في علامة التبويب الشبكة:

    • مورد من النوع signed-exchange هذا هو SXG.
    • مورد من النوع cert-chain+cbor هذه هي شهادة SXG. يجب أن تستخدم شهادات SXG تنسيق application/cert-chain+cbor.
    • مورد من النوع document هذا هو المحتوى الذي تم إرساله من خلال SXG.

    إذا لم تظهر لك هذه المراجع، جرِّب محو ذاكرة التخزين المؤقت للمتصفّح، ثم إعادة التحميل http://localhost:8080/priv/doc/https://example.com.

    انقر على علامة التبويب معاينة للاطّلاع على مزيد من المعلومات عن ملف Signed Exchange وتوقيعه.

    لقطة شاشة لعلامة التبويب &quot;المعاينة&quot; تعرِض ملف SXG

عرض عمليات التبادل الموقَّعة باستخدام شهادة CanSignHttpExchanges

توضّح التعليمات الواردة في هذا القسم كيفية عرض جداول بيانات SXG باستخدام شهادة CanSignHttpExchanges. يتطلب استخدام ملفات SXG في مرحلة الإنتاج شهادة CanSignHttpExchanges.

اختصارًا، تم وضع هذه التعليمات بافتراض أنّك تفهم المفاهيم التي تمت مناقشتها في قسم إعداد عمليات Signed Exchange باستخدام شهادة موقَّعة ذاتيًا.

المتطلبات الأساسية

  • لديك شهادة CanSignHttpExchanges. تسرد هذه الصفحة مصادر التصديق التي تقدّم هذا النوع من الشهادات.

  • إذا لم يكن لديك شهادة، يمكنك ضبط webpkgserver ل retrieving automatically retrieve certificates from your CA. يمكنك اتّباع التعليمات حول ما يجب إدخاله في الحقل webpkgserver.toml في هذه الصفحة.

  • على الرغم من أنّه ليس شرطًا، ننصحك بشدة بتشغيل webpkgserver من خلال خادم سحابي EDGE. إذا كنت لا تستخدم خادمًا طرفيًا، عليك ضبط خيارَي TLS.PEMFile وTLS.KeyFile في webpkgserver.toml. يتم تشغيل webpkgserver تلقائيًا عبر HTTP. ومع ذلك، يجب عرض شهادات SXG عبر HTTPS ليعتبرها المتصفّح صالحة. يتيح ضبط TLS.PEMFile وTLS.KeyFile لـ webpkgserver استخدام بروتوكول HTTPS وبالتالي عرض شهادة SXG مباشرةً في المتصفّح.

التعليمات

  1. أنشئ ملف PEM من خلال تسلسل شهادة SXG لموقعك الإلكتروني ثم شهادة هيئة إصدار الشهادات لموقعك الإلكتروني. يمكنك الاطّلاع على مزيد من التعليمات حول هذا الموضوع هنا.

    PEM هو تنسيق ملف يُستخدَم عادةً كسِمة "حاوية" لتخزين عدة شهادات.

  2. أنشئ ملف webpkgsever.toml جديدًا عن طريق نسخ المثال.

    cp ./webpkgserver.example.toml ./webpkgserver.toml
    
  3. افتح webpkgserver.toml باستخدام المحرِّر الذي تختاره وأدخِل التغييرات التالية:

    • غيِّر السطر PEMFile = cert.pem ليعكس موقع ملف PEM الذي يحتوي على سلسلة الشهادة الكاملة.
    • غيِّر السطر KeyFile = 'priv.key' ليعكس موقع المفتاح الخاص المرتبط بملف PEM.
    • غيِّر السطر Domain = 'example.org' ليعكس موقعك الإلكتروني.
    • (اختياري) لتجديد شهادة SXG تلقائيًا كل 90 يومًا (45 يومًا في Google) من خلال webpkgserver، عليك ضبط الخيارات في قسم [SXG.ACME] من webpkgserver.toml. لا ينطبق هذا الخيار إلا على المواقع الإلكترونية التي تم إعداد حساب DigiCert أو Google ACME لها.
  4. اضبط خادم الحافة لإعادة توجيه الزيارات إلى مثيل webpkgserver.

    هناك نوعان أساسيان من الطلبات التي يعالجها webpkgserver: طلبات لخدمات SXG (التي تقدّمها نقطة النهاية /priv/doc/) وطلبات شهادة SXG (التي تقدّمها نقطة النهاية /webpkg/cert/). تختلف قواعد إعادة كتابة عناوين URL لكل نوع من أنواع الطلبات هذه بشكل طفيف. لمزيد من المعلومات، يُرجى الاطّلاع على مقالة التشغيل من خلال خادم edge للواجهة الأمامية.

    ملاحظة:

    يعرض webpkgserver تلقائيًا شهادة SXG على العنوان /webpkg/cert/$CERT_HASH، على سبيل المثال، /webpkg/cert/-0QmE0gvoedn92gtwI3s7On9zPevJGm5pn2RYhpZxgY. لإنشاء $CERT_HASH، شغِّل الأمر التالي: shell openssl base64 -in cert.pem -d | openssl dgst -sha256 -binary | base64 | tr /+ _- | tr -d =