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

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

Katie Hempenius
Katie Hempenius

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

แสดง SXG โดยใช้ใบรับรองที่ลงนามด้วยตนเอง

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

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

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

สร้างใบรับรองที่ลงนามด้วยตนเอง

ส่วนนี้จะอธิบายวิธีสร้างใบรับรองที่ลงชื่อด้วยตนเองที่สามารถ ที่ใช้กับ Signed Exchange

วิธีการ

  1. สร้างคีย์ส่วนตัว

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

    ระบบจะบันทึกคีย์ส่วนตัวเป็นไฟล์ชื่อ priv.key

  2. สร้างการเซ็นใบรับรอง request (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

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

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

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

  • หากไม่มีใบรับรอง คุณสามารถกําหนดค่าเว็บเซิร์ฟเวอร์เป็น เรียกใบรับรองจาก 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 อินสแตนซ์

    มีคำขอ 2 ประเภทหลักที่ 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 =