איך להגדיר Signed Exchanges באמצעות Web Packager

מידע נוסף על הצגה של החלפות חתומות (SXG) באמצעות Web Packager.

Katie Hempenius
Katie Hempenius

החלפה חתומה (SXG) היא מנגנון מסירה שאפשר לאמת את מקור המשאב בנפרד מהאופן שבו הוא נמסר. בהוראות הבאות מוסבר איך להגדיר המרות חתומות באמצעות Web Packager. מצורפות הוראות עבור גם אישורים בחתימה עצמית וגם אישורים של CanSignHttpExchanges.

הגשת בקשות SXG באמצעות אישור עם חתימה עצמית

השימוש באישור בחתימה עצמית להצגת SXG משמש בעיקר למטרות הדגמה ובדיקה. אסימוני SXG חתומים עם אישור בחתימה עצמית יגרמו להצגת הודעות שגיאה בדפדפן כשתשתמשו בו מחוץ לבדיקה סביבות ואין להציג אותן לסורקים.

דרישות מוקדמות

כדי לפעול לפי ההוראות האלה, openssl ו- Go המותקן בסביבת הפיתוח.

יצירת אישור עם חתימה עצמית

בקטע הזה מוסבר איך ליצור אישור עם חתימה עצמית, שיכול להיות שבו נעשה שימוש בהחלפות חתומות.

הוראות

  1. יצירת מפתח פרטי.

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

    המפתח הפרטי יישמר כקובץ בשם priv.key.

  2. יצירה של חתימת אישור request (נציג שירות לקוחות).

    openssl req -new -sha256 -key priv.key -out cert.csr -subj '/O=Web Packager Demo/CN=example.com'
    

    בקשה לחתימה על אישור היא קטע של טקסט מקודד שמעביר את את המידע הנחוץ כדי לבקש אישור מרשות אישורים(CA). למרות שלא תבקש אישור CA, עדיין צריך ליצור בקשה לחתימה על אישור.

    הפקודה שלמעלה יוצרת בקשה לחתימה על אישור עבור ארגון שנקרא 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")
    

    הפקודה הזו משתמשת במפתח הפרטי וב-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 לצורך בדיקה

דרישות מוקדמות

  1. מתקינים את Web Packager.

    git clone https://github.com/google/webpackager.git
    
  2. build 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 להוסיף הוראות לטעינה מראש של גיליון סגנונות וסקריפט משנה בתור 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 לא יהיה כשיר המטמון של Google SXG לכל הדרישות.

  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=.

    אם האזהרה לא כוללת מחרוזת גיבוב (hash), פירוש הדבר הוא שלא הזנת את הנתונים הנכונים מציין את המיקום של אישור ה-SXG.

  6. פותחים את הכרטיסייה רשת של כלי הפיתוח ונכנסים לכתובת ה-URL הבאה: http://localhost:8080/priv/doc/https://example.com.

    הפעולה הזו שולחת בקשה למכונה של webpackager שפועלת ב- http://localhost:8080 עבור SXG שמכיל את התוכן של https://example.com. /priv/doc/ היא נקודת הקצה ב-API שמוגדרת כברירת מחדל, שבה משתמשים webpackager.

    צילום מסך של הכרטיסייה DevTools Network, שבה מוצג SXG והאישור שלו.

    המשאבים הבאים מופיעים בכרטיסייה רשת:

    • משאב מסוג signed-exchange. זהו SXG.
    • משאב מסוג cert-chain+cbor. זהו אישור ה-SXG. אישורי SXG צריכים להיות בפורמט application/cert-chain+cbor.
    • משאב מסוג document. זהו התוכן שהועבר דרך SXG.

    אם אתם לא רואים את המשאבים האלה, נסו לנקות את המטמון של הדפדפן, ואז בטעינה מחדש של http://localhost:8080/priv/doc/https://example.com.

    יש ללחוץ על הכרטיסייה תצוגה מקדימה כדי לראות מידע נוסף על ההחלפה החתומה והחתימה שלו.

    צילום מסך של הכרטיסייה &#39;תצוגה מקדימה&#39; שבו מוצג SXG

הצגה של החלפות חתומות באמצעות אישור CanSignHttpExchanges

בהוראות שבקטע הזה מוסבר איך להציג מודעות SXG באמצעות אישור CanSignHttpExchanges. לשימוש בסביבת הייצור של SXG נדרש אישור CanSignHttpExchanges.

לצורך הקיצור, ההוראות האלה נכתבו מתוך הנחה אם את/ה מבין/ה את המושגים שצוינו בקטע הגדרת המרות חתומות באמצעות חתימה עצמית אישור .

דרישות מוקדמות

  • יש לך אישור של CanSignHttpExchanges. הזה דף מפרט את רשויות ה-CA שמציעות אישור מהסוג הזה.

  • אם אין לך אישור, אפשר להגדיר את שרת האינטרנט כך: לאחזר באופן אוטומטי אישורים מ-CA. אפשר לעקוב אחר מסלול לגבי מה שמופיע בwebpkgserver.toml דף.

  • למרות שאין דרישה, מומלץ מאוד להריץ webpkgserver מאחורי שרת קצה. אם לא משתמשים בשרת קצה, יהיה צורך להגדיר את האפשרויות TLS.PEMFile ו-TLS.KeyFile webpkgserver.toml. כברירת מחדל, webpkgserver רץ ב-HTTP. אבל SXG יש להגיש אישורים ב-HTTPS כדי שהדפדפן יתייחס לתוקף. הגדרה של TLS.PEMFile ושל TLS.KeyFile תאפשר ל-webpkgserver להשתמש HTTPS ולכן מגישים את אישור ה-SXG ישירות לדפדפן.

הוראות

  1. כדי ליצור קובץ PEM, משרשרים את אישור ה-SXG של האתר ואז אישור ה-CA של האתר שלך. הוראות נוספות בנושא הזה זמינות כאן.

    הערך 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 על ידי webpkgserver 90 ימים (45 ימים ב-Google), מגדירים את האפשרויות בקטע [SXG.ACME] של webpkgserver.toml. האפשרות הזו חלה רק על אתרים שיש להם DigiCert או חשבון Google ACME.
  4. צריך להגדיר את שרת הקצה להעברת תעבורת הנתונים אל webpkgserver מכונה.

    יש שני סוגים עיקריים של בקשות שמטופלות על ידי webpkgserver: בקשות עבור SXG (שמוצגים על ידי נקודת הקצה /priv/doc/) ובקשות אישור ה-SXG (שמוצג על ידי נקודת הקצה /webpkg/cert/). כללי השכתוב של כתובות ה-URL בכל אחד מסוגי הבקשות האלה משתנים מעט. עבור מידע נוסף, ראה ריצה מאחורי הקצה הקדמי .

    הערה:

    כברירת מחדל, אישור SXG מוצג על ידי 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 =