วิธีตั้งค่า Signed Exchange โดยใช้ Web Packager

ดูวิธีแสดง Signed Exchange (SXG) โดยใช้ Web Packager

Katie Hempenius
Katie Hempenius

Signed Exchange (SXG) เป็นกลไกการนำส่งที่ทำให้ตรวจสอบสิทธิ์ต้นทางของทรัพยากรได้อย่างอิสระโดยไม่ต้องอิงตามวิธีนำส่ง วิธีการต่อไปนี้อธิบายวิธีตั้งค่า Signed Exchange โดยใช้ Web Packager โดยจะมีวิธีการระบุไว้ทั้งสำหรับใบรับรองแบบ Self-signed และ CanSignHttpExchanges

แสดง SXG โดยใช้ใบรับรองแบบ Self-signed

การใช้ใบรับรองแบบ Self-signed เพื่อให้บริการ SXG จะใช้ในการสาธิตและทดสอบเป็นหลัก SXG ที่ลงนามด้วยใบรับรองแบบ Self-signed จะสร้างข้อความแสดงข้อผิดพลาดในเบราว์เซอร์เมื่อใช้นอกสภาพแวดล้อมการทดสอบและไม่ควรแสดงผลให้กับ Crawler

ข้อกำหนดเบื้องต้น

หากต้องการทำตามวิธีการเหล่านี้ คุณจะต้องติดตั้ง openssl และ Go ในสภาพแวดล้อมการพัฒนาของคุณ

สร้างใบรับรองแบบ Self-signed

ส่วนนี้จะอธิบายวิธีสร้างใบรับรองแบบ Self-signed ซึ่งใช้กับ Signed Exchange ได้

วิธีการ

  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'
    

    คำขอเซ็นชื่อใบรับรองคือบล็อกข้อความที่เข้ารหัสซึ่งสื่อถึงข้อมูลที่จำเป็นต่อการขอใบรับรองจากหน่วยงานผู้ออกใบรับรอง(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. บิลด์ 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=.

    หากคำเตือนไม่มีสตริงแฮช แสดงว่าคุณไม่ได้ระบุตำแหน่งของใบรับรอง SXG อย่างถูกต้อง

  6. เปิดแท็บเครือข่ายเครื่องมือสำหรับนักพัฒนาเว็บ จากนั้นไปที่ URL ต่อไปนี้ http://localhost:8080/priv/doc/https://example.com

    การดำเนินการนี้จะส่งคำขอไปยังอินสแตนซ์ webpackager ที่ทำงานที่ http://localhost:8080 สำหรับ SXG ที่มีเนื้อหาของ https://example.com /priv/doc/ คือปลายทาง API เริ่มต้นที่ webpackager ใช้

    ภาพหน้าจอของแท็บเครือข่ายเครื่องมือสำหรับนักพัฒนาเว็บที่แสดง 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 และลายเซ็น

    ภาพหน้าจอของแท็บแสดงตัวอย่างที่แสดง SXG

แสดง Signed Exchange โดยใช้ใบรับรอง CanSignHttpExchanges

วิธีการในส่วนนี้จะอธิบายวิธีแสดง SXG โดยใช้ใบรับรอง CanSignHttpExchanges การใช้ SXG เวอร์ชันที่ใช้งานจริงต้องมีใบรับรอง CanSignHttpExchanges

เพื่อความกระชับ เราจึงเขียนวิธีการเหล่านี้โดยมีสมมติฐานที่ว่าคุณเข้าใจแนวคิดที่กล่าวถึงในส่วน Setup Signed Exchanges โดยใช้ใบรับรอง Self-signed

ข้อกำหนดเบื้องต้น

  • คุณมีใบรับรอง CanSignHttpExchanges หน้านี้แสดงรายการ CA ที่เสนอใบรับรองประเภทนี้

  • หากไม่มีใบรับรอง คุณกำหนดค่า webpkgserver ให้เรียกข้อมูลใบรับรองจาก CA ได้โดยอัตโนมัติ คุณทําตามคําแนะนําเกี่ยวกับสิ่งที่อยู่ใน webpkgserver.toml ในหน้านี้ได้

  • เราขอแนะนำให้คุณเรียกใช้ webpkgserver หลัง Edge Server แม้ว่าจะไม่ใช่ข้อกำหนดก็ตาม หากไม่ได้ใช้ Edge Server คุณจะต้องกำหนดค่าตัวเลือก 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' ให้สอดคล้องกับเว็บไซต์
    • (ไม่บังคับ) หากต้องการให้ webpkgserver ต่ออายุใบรับรอง SXG โดยอัตโนมัติทุกๆ 90 วัน (45 วันสำหรับ Google) ให้กำหนดค่าตัวเลือกในส่วน [SXG.ACME] ของ webpkgserver.toml ตัวเลือกนี้ใช้กับเว็บไซต์ที่มีการตั้งค่าบัญชี DigiCert หรือ Google ACME เท่านั้น
  4. กำหนดค่า Edge Server ให้ส่งต่อการรับส่งข้อมูลไปยังอินสแตนซ์ webpkgserver

    คำขอหลักที่ webpkgserver จัดการมี 2 ประเภท ได้แก่ คำขอสำหรับ 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 =