ดูวิธีแสดง Signed Exchange (SXG) โดยใช้ Web Packager
Signed Exchange (SXG) คือกลไกการนำส่งที่ช่วยให้ตรวจสอบสิทธิ์แหล่งที่มาของทรัพยากรได้โดยไม่ขึ้นอยู่กับวิธีการนำส่ง
วิธีการต่อไปนี้อธิบายวิธีตั้งค่า Signed Exchange โดยใช้ Web Packager วิธีการมีให้สำหรับทั้งใบรับรองแบบ Self-signed และCanSignHttpExchanges
แสดง SXG โดยใช้ใบรับรองที่ลงนามด้วยตนเอง
การใช้ใบรับรองที่ลงนามด้วยตนเองเพื่อแสดง SXG นั้นใช้เพื่อสาธิตและทดสอบเป็นหลัก SXG ที่ลงนามด้วยใบรับรองที่ลงนามด้วยตนเองจะสร้างข้อความแสดงข้อผิดพลาดในเบราว์เซอร์เมื่อใช้นอกสภาพแวดล้อมการทดสอบ และไม่ควรแสดงต่อ Crawler
ข้อกำหนดเบื้องต้น
หากต้องการทําตามวิธีการเหล่านี้ คุณจะต้องติดตั้ง 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) แม้ว่าคุณจะไม่ได้ขอใบรับรองจาก CA แต่ก็ยังจำเป็นต้องสร้างคำขอลงนามใบรับรอง
คำสั่งข้างต้นจะสร้างคำขอลงนามใบรับรองสำหรับองค์กรที่มีชื่อว่า
Web Packager Demoซึ่งมีชื่อทั่วไปexample.comชื่อทั่วไปควรเป็นชื่อโดเมนที่สมบูรณ์ในตัวเองของเว็บไซต์ที่มีเนื้อหาที่คุณต้องการแพ็กเกจเป็น SXGในการตั้งค่า SXG เวอร์ชันที่ใช้งานจริง เว็บไซต์นี้จะเป็นเว็บไซต์ที่คุณเป็นเจ้าของ อย่างไรก็ตาม ในสภาพแวดล้อมการทดสอบเช่นเดียวกับที่อธิบายไว้ในวิธีการเหล่านี้ อาจเป็นเว็บไซต์ใดก็ได้
สร้างใบรับรองที่มีนามสกุล
CanSignHttpExchangesopenssl 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.pemFlag-extfileจะเชื่อมโยงใบรับรองกับส่วนขยายใบรับรองCanSignHttpExchanges(1.3.6.1.4.1.11129.2.1.22คือตัวระบุออบเจ็กต์สำหรับส่วนขยายCanSignHttpExchanges) นอกจากนี้ Flag-extfileยังกำหนดexample.comเป็น Subject Alternative Name ด้วยหากสงสัยเกี่ยวกับเนื้อหาของ
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สร้าง
webpkgservercd 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ในหัวของ SXGSignatureในสภาพแวดล้อมที่ใช้งานจริง ระบบจะใช้CertURLBaseดังนี้CertURLBase = 'https://mysite.com/'อย่างไรก็ตาม สําหรับการทดสอบในเครื่อง คุณสามารถใช้CertURLBase = 'data:'เพื่อสั่งให้webpkgserverใช้ data URL เพื่อแทรกใบรับรองในช่องcert-urlสําหรับการทดสอบในเครื่อง วิธีนี้เป็นวิธีที่สะดวกที่สุดในการแสดงใบรับรอง SXG - เปลี่ยนบรรทัด
Domain = 'example.org'ให้ตรงกับโดเมนที่คุณสร้างใบรับรอง หากคุณทําตามวิธีการในบทความนี้อย่างตรงไปตรงมา ค่านี้ควรเปลี่ยนเป็นexample.comwebpkgserverจะดึงข้อมูลเฉพาะจากโดเมนที่ระบุโดย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
วิธีการเหล่านี้เขียนขึ้นโดยสมมติว่าคุณเข้าใจแนวคิดที่กล่าวถึงในส่วนตั้งค่า Signed Exchange โดยใช้ใบรับรองที่ลงนามด้วยตนเองเพื่อให้สั้นกระชับ
ข้อกำหนดเบื้องต้น
คุณมีใบรับรอง
CanSignHttpExchangesหน้านี้แสดงรายชื่อ CA ที่เสนอใบรับรองประเภทนี้หากไม่มีใบรับรอง คุณสามารถกําหนดค่า webpkgserver ให้ดึงใบรับรองจาก CA โดยอัตโนมัติ คุณสามารถทำตามวิธีการสำหรับสิ่งที่ควรใส่ใน
webpkgserver.tomlในหน้านี้แม้ว่าจะไม่บังคับ แต่เราขอแนะนําอย่างยิ่งให้คุณเรียกใช้
webpkgserverหลังเซิร์ฟเวอร์ Edge หากไม่ได้ใช้เซิร์ฟเวอร์ Edge คุณจะต้องกำหนดค่าตัวเลือก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 ให้ส่งต่อการรับส่งข้อมูลไปยังอินสแตนซ์
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 =