ดูวิธีแสดง Signed Exchange (SXG) โดยใช้ Web Packager
Signed Exchange (SXG) เป็นกลไกการนำส่งที่
ตรวจสอบความถูกต้องของต้นทางของทรัพยากรได้โดยอิสระจากวิธีนำส่งทรัพยากร
วิธีการต่อไปนี้อธิบายวิธีตั้งค่า Signed Exchange โดยใช้
Web Packager รวมวิธีการสำหรับ
ทั้งใบรับรอง Self-Signed และ CanSignHttpExchanges
แสดง SXG โดยใช้ใบรับรองที่ลงนามด้วยตนเอง
การใช้ใบรับรองที่ลงนามด้วยตนเองเพื่อให้บริการ SXG จะใช้สำหรับ การสาธิตและการทดสอบ SXG ลงนามด้วยใบรับรองที่ลงนามด้วยตนเอง จะสร้างข้อความแสดงข้อผิดพลาดในเบราว์เซอร์เมื่อใช้นอกการทดสอบ และไม่ควรแสดงผลต่อโปรแกรมรวบรวมข้อมูล
ข้อกำหนดเบื้องต้น
หากต้องการปฏิบัติตามคำแนะนำเหล่านี้ คุณจะต้อง openssl และ Go ที่ติดตั้งในสภาพแวดล้อมในการพัฒนาซอฟต์แวร์ของคุณ
สร้างใบรับรองที่ลงนามด้วยตนเอง
ส่วนนี้จะอธิบายวิธีสร้างใบรับรองที่ลงชื่อด้วยตนเองที่สามารถ ที่ใช้กับ Signed Exchange
วิธีการ
สร้างคีย์ส่วนตัว
openssl ecparam -out priv.key -name prime256v1 -genkey
ระบบจะบันทึกคีย์ส่วนตัวเป็นไฟล์ชื่อ
priv.key
สร้างการเซ็นใบรับรอง 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 เวอร์ชันที่ใช้งานจริง อย่างไรก็ตาม ใน สภาพแวดล้อมการทดสอบแบบเดียวกับที่อธิบายในคำแนะนำเหล่านี้ ของคุณ
สร้างใบรับรองที่มีส่วนขยาย
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
เพื่อความกระชับ คำแนะนำเหล่านี้จึงเขียนขึ้นโดยมีสมมติฐาน คุณเข้าใจแนวคิดที่กล่าวถึงในหัวข้อการตั้งค่า 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 ไปยังเบราว์เซอร์โดยตรง
วิธีการ
สร้างไฟล์ 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
อินสแตนซ์มีคำขอ 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 =