ดูวิธีแสดง Signed Exchange (SXG) โดยใช้ Web Packager
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 ได้
วิธีการ
สร้างคีย์ส่วนตัว
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) แม้ว่าคุณจะไม่ได้ขอใบรับรองจาก 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
บิลด์
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'
เพื่อแสดงเส้นทางไปยังใบรับรอง PEMcert.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 ตามข้อกำหนดเหล่านี้
- เปลี่ยนบรรทัด
เริ่ม
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 ในเครื่องมือสำหรับนักพัฒนาเว็บจะแสดงข้อผิดพลาด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 อย่างถูกต้อง
เปิดแท็บเครือข่ายเครื่องมือสำหรับนักพัฒนาเว็บ จากนั้นไปที่ URL ต่อไปนี้
http://localhost:8080/priv/doc/https://example.com
การดำเนินการนี้จะส่งคำขอไปยังอินสแตนซ์
webpackager
ที่ทำงานที่http://localhost:8080
สำหรับ SXG ที่มีเนื้อหาของhttps://example.com
/priv/doc/
คือปลายทาง API เริ่มต้นที่webpackager
ใช้ทรัพยากรต่อไปนี้แสดงอยู่ในแท็บเครือข่าย
- ทรัพยากรประเภท
signed-exchange
นี่คือ SXG - ทรัพยากรประเภท
cert-chain+cbor
นี่คือใบรับรอง SXG ใบรับรอง SXG ต้องใช้รูปแบบapplication/cert-chain+cbor
- ทรัพยากรประเภท
document
นี่คือเนื้อหาที่ส่งผ่าน SXG
หากไม่เห็นทรัพยากรเหล่านี้ ให้ลองล้างแคชของเบราว์เซอร์ แล้วโหลด
http://localhost:8080/priv/doc/https://example.com
อีกครั้งคลิกแท็บแสดงตัวอย่างเพื่อดูข้อมูลเพิ่มเติมเกี่ยวกับ Signed Exchange และลายเซ็น
- ทรัพยากรประเภท
แสดง 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 ไปยังเบราว์เซอร์โดยตรง
วิธีการ
สร้างไฟล์ 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 หรือ Google ACME เท่านั้น
- เปลี่ยนบรรทัด
กำหนดค่า 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 =