איך מציגים חילופי מודעות חתומות (SXG) באמצעות Web Packager
החלפה חתומה (SXG) היא מנגנון העברה שמאפשר לאמת את המקור של משאב ללא קשר לאופן שבו הוא הועבר.
בהוראות הבאות מוסבר איך להגדיר Signed Exchanges באמצעות Web Packager. ההוראות כוללות גם אישורים בחתימה עצמית וגם אישורי CanSignHttpExchanges
.
הצגת קובצי SXG באמצעות אישור עם חתימה עצמית
השימוש באישור עם חתימה עצמית להצגת קובצי SXG משמש בעיקר למטרות הדגמה ובדיקה. קובצי SXG שנחתמו באמצעות אישור בחתימה עצמית יגרמו להצגת הודעות שגיאה בדפדפן אם משתמשים בהם מחוץ לסביבות הבדיקה, ואין להציג אותם לסורקרים.
דרישות מוקדמות
כדי לבצע את ההוראות האלה, צריך להתקין את openssl ו-Go בסביבת הפיתוח.
יצירת אישור בחתימה עצמית
בקטע הזה מוסבר איך ליצור אישור עם חתימה עצמית שאפשר להשתמש בו עם החלפות חתומות.
הוראות
יצירת מפתח פרטי.
openssl ecparam -out priv.key -name prime256v1 -genkey
המפתח הפרטי יישמר כקובץ בשם
priv.key
.יוצרים בקשת חתימה על אישור (CSR).
openssl req -new -sha256 -key priv.key -out cert.csr -subj '/O=Web Packager Demo/CN=example.com'
בקשת חתימה על אישור היא בלוק של טקסט מקודד שמכיל את המידע הנדרש לבקשת אישור מרשות אישורים (CA). לא תצטרכו לבקש אישור מרשות אישורים, אבל עדיין תצטרכו ליצור בקשת חתימה על אישור.
הפקודה שלמעלה יוצרת בקשת חתימה על אישור לארגון בשם
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 שנוצרו בשלבים 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 לבדיקה
דרישות מוקדמות
מתקינים את Web Packager.
git clone https://github.com/google/webpackager.git
גרסת build
webpkgserver
.cd webpackager/cmd/webpkgserver go build .
webpkgserver
הוא קובץ בינארי ספציפי בפרויקט Web Packager.מוודאים ש-
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
. - משנים את השורה
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
, תופיע הודעת השגיאהURL doesn't match the fetch targets
ביומניwebpkgserver
.
אופציונלי
אם רוצים להפעיל או להשבית טעינה מראש של משאבי משנה, אפשרויות ההגדרה הבאות של
webpkgserver.toml
רלוונטיות:כדי ש-
webpkgserver
יתווספו הנחיות לטעינת משאבי משנה של סגנונות וסקריפטים מראש כ-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, כפי שמפורט בדרישות האלה.
- משנים את השורה
הפעלה של
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
. כך אפשר לבדוק את ה-SXG באמצעות אישור בדיקה. אם מפעילים את Chrome בלי הפקודה הזו, כשבודקים את ה-SXG ב-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=.
אם האזהרה לא כוללת מחרוזת גיבוב, סימן שלא ציינתם בצורה נכונה את המיקום של אישור ה-SXG.
פותחים את הכרטיסייה Network (רשת) בכלי הפיתוח, ולאחר מכן נכנסים לכתובת ה-URL הבאה:
http://localhost:8080/priv/doc/https://example.com
.הפעולה הזו יוצרת בקשה למכונה
webpackager
שפועלת ב-http://localhost:8080
ל-SXG שמכיל את התוכן שלhttps://example.com
./priv/doc/
הוא נקודת הקצה ב-API שמוגדרת כברירת מחדל, שבה משתמשwebpackager
.המשאבים הבאים מפורטים בכרטיסייה Network:
- משאב מסוג
signed-exchange
. זהו ה-SXG. - משאב מסוג
cert-chain+cbor
. זהו אישור ה-SXG. אישורי SXG חייבים להיות בפורמטapplication/cert-chain+cbor
. - משאב מסוג
document
. זהו התוכן שנשלח באמצעות SXG.
אם המשאבים האלה לא מופיעים, נסו לנקות את המטמון של הדפדפן ואז לטעון מחדש את
http://localhost:8080/priv/doc/https://example.com
.לוחצים על הכרטיסייה Preview כדי לראות מידע נוסף על Signature Exchange והחתימה שלו.
- משאב מסוג
הצגת חילופי נתונים חתומות באמצעות אישור CanSignHttpExchanges
ההוראות שבקטע הזה מוסבר איך להציג קובצי SXG באמצעות אישור CanSignHttpExchanges
. לשימוש בסביבת הייצור של SXG נדרש
אישור CanSignHttpExchanges
.
כדי לקצר את ההוראות, הנחנו שאתם מבינים את המושגים שמפורטים בקטע הגדרת Signed Exchanges באמצעות אישור בחתימה עצמית.
דרישות מוקדמות
יש לכם אישור
CanSignHttpExchanges
. בדף הזה מפורטות רשויות האישורים שמציעות את סוג האישור הזה.אם אין לכם אישור, תוכלו להגדיר את webpkgserver לאחזר אישורים באופן אוטומטי מרשות האישורים. בדף הזה מוסבר מה צריך להיכנס לשדה
webpkgserver.toml
.למרות שזו אינה דרישה, מומלץ מאוד להריץ את
webpkgserver
מאחורי שרת קצה. אם אתם לא משתמשים בשרת קצה, צריך להגדיר את האפשרויותTLS.PEMFile
ו-TLS.KeyFile
ב-webpkgserver.toml
. כברירת מחדל,webpkgserver
פועל באמצעות HTTP. עם זאת, כדי שהדפדפן יכיר בתוקף של אישורי SXG, הם צריכים להישלח באמצעות HTTPS. הגדרתTLS.PEMFile
ו-TLS.KeyFile
מאפשרת ל-webpkgserver
להשתמש ב-HTTPS, ולכן להציג את אישור ה-SXG ישירות בדפדפן.
הוראות
יוצרים קובץ PEM על ידי שרשור של אישור ה-SXG של האתר ואחריו אישור ה-CA של האתר. הוראות נוספות זמינות כאן.
PEM הוא פורמט קובץ שמשמש בדרך כלל כ'קונטיינר' לאחסון כמה אישורים.
יוצרים קובץ
webpkgsever.toml
חדש על ידי העתקת הדוגמה.cp ./webpkgserver.example.toml ./webpkgserver.toml
פותחים את הקובץ
webpkgserver.toml
בכלי העריכה שבחרתם ומבצעים את השינויים הבאים:- משנים את השורה
PEMFile = cert.pem
כך שתשקף את המיקום של קובץ ה-PEM שמכיל את שרשרת האישורים המלאה. - משנים את השורה
KeyFile = 'priv.key'
כך שתשקף את המיקום של המפתח הפרטי התואם לקובץ ה-PEM. - משנים את השורה
Domain = 'example.org'
כדי לשקף את האתר. - (אופציונלי) כדי ש-
webpkgserver
יחדש באופן אוטומטי את אישור ה-SXG כל 90 יום (45 יום ל-Google), מגדירים את האפשרויות בקטע[SXG.ACME]
ב-webpkgserver.toml
. האפשרות הזו רלוונטית רק לאתרים שהוגדרו בהם חשבון DigiCert או חשבון ACME של Google.
- משנים את השורה
מגדירים את שרת הקצה להעברת תנועה למכונה
webpkgserver
.יש שני סוגים עיקריים של בקשות שמטופלות על ידי
webpkgserver
: בקשות ל-SXG (שמוגשות על ידי נקודת הקצה/priv/doc/
) ובקשות לאישור SXG (שמוצגות על ידי נקודת הקצה/webpkg/cert/
). כללי הכתיבה מחדש של כתובות ה-URL משתנים מעט בהתאם לכל אחד מסוגי הבקשות האלה. למידע נוסף, ראו הפעלה מאחורי שרת קצה של קצה חזית.הערה:
כברירת מחדל,
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 =