Pelajari cara menayangkan Signed HTTP Exchange (SXG) menggunakan Web Packager.
Signed HTTP Exchange (SXG) adalah mekanisme pengiriman yang memungkinkan
autentikasi asal resource secara independen dari cara pengirimannya.
Petunjuk berikut menjelaskan cara menyiapkan Signed Exchange menggunakan
Web Packager. Petunjuk disertakan untuk
sertifikat yang ditandatangani sendiri dan CanSignHttpExchanges
.
Menayangkan SXG menggunakan sertifikat yang ditandatangani sendiri
Penggunaan sertifikat yang ditandatangani sendiri untuk menayangkan SXG terutama digunakan untuk tujuan demonstrasi dan pengujian. SXG yang ditandatangani dengan sertifikat yang ditandatangani sendiri akan menghasilkan pesan error di browser saat digunakan di luar lingkungan pengujian dan tidak boleh ditayangkan ke crawler.
Prasyarat
Untuk mengikuti petunjuk ini, Anda harus menginstal openssl dan Go di lingkungan pengembangan.
Membuat sertifikat yang ditandatangani sendiri
Bagian ini menjelaskan cara membuat sertifikat dengan tanda tangan sendiri yang dapat digunakan dengan pertukaran yang ditandatangani.
Petunjuk
Buat kunci pribadi.
openssl ecparam -out priv.key -name prime256v1 -genkey
Kunci pribadi akan disimpan sebagai file bernama
priv.key
.Buat permintaan penandatanganan sertifikat (CSR).
openssl req -new -sha256 -key priv.key -out cert.csr -subj '/O=Web Packager Demo/CN=example.com'
Permintaan penandatanganan sertifikat adalah blok teks yang dienkode yang menyampaikan informasi yang diperlukan untuk meminta sertifikat dari certificate authority(CA). Meskipun Anda tidak akan meminta sertifikat dari CA, Anda tetap perlu membuat permintaan penandatanganan sertifikat.
Perintah di atas membuat permintaan penandatanganan sertifikat untuk organisasi bernama
Web Packager Demo
yang memiliki nama umumexample.com
. Nama umum harus berupa nama domain situs yang sepenuhnya memenuhi syarat yang berisi konten yang ingin Anda paketkan sebagai SXG.Dalam penyiapan SXG produksi, ini akan menjadi situs yang Anda miliki. Namun, di lingkungan pengujian seperti yang dijelaskan dalam petunjuk ini, situs tersebut dapat berupa situs mana pun.
Buat sertifikat yang memiliki ekstensi
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")
Perintah ini menggunakan kunci pribadi dan CSR yang dibuat pada langkah 1 dan 2 untuk membuat file sertifikat
cert.pem
. Flag-extfile
mengaitkan sertifikat dengan ekstensi sertifikatCanSignHttpExchanges
(1.3.6.1.4.1.11129.2.1.22
adalah ID objek untuk ekstensiCanSignHttpExchanges
). Selain itu, tanda-extfile
juga menentukanexample.com
sebagai Nama Alternatif Subjek.Jika penasaran dengan konten
cert.pem
, Anda dapat melihatnya menggunakan perintah berikut:openssl x509 -in cert.pem -noout -text
Anda telah selesai membuat kunci pribadi dan sertifikat. Anda akan memerlukan file
priv.key
dancert.pem
di bagian berikutnya.
Menyiapkan server Web Packager untuk pengujian
Prasyarat
Instal Web Packager.
git clone https://github.com/google/webpackager.git
Build
webpkgserver
.cd webpackager/cmd/webpkgserver go build .
webpkgserver
adalah biner tertentu dalam project Web Packager.Pastikan
webpkgserver
telah diinstal dengan benar../webpkgserver --help
Perintah ini akan menampilkan informasi tentang penggunaan
webpkgserver
. Jika tidak berhasil, langkah pemecahan masalah pertama yang baik adalah memverifikasi bahwa GOPATH Anda dikonfigurasi dengan benar.
Petunjuk
Buka direktori
webpkgserver
(Anda mungkin sudah berada di direktori ini).cd /path/to/cmd/webpkgserver
Buat file
webpkgsever.toml
dengan menyalin contoh.cp ./webpkgserver.example.toml ./webpkgserver.toml
File ini berisi opsi konfigurasi untuk
webpkgserver
.Buka
webpkgserver.toml
dengan editor pilihan Anda dan buat perubahan berikut:- Ubah baris
#AllowTestCert = false
menjadiAllowTestCert = true
. - Ubah baris
PEMFile = 'path/to/your.pem'
agar sesuai dengan jalur ke sertifikat PEM,cert.pem
, yang Anda buat. Jangan ubah baris yang menyebutkanTLS.PEMFile
—ini adalah opsi konfigurasi yang berbeda. - Ubah baris
KeyFile = 'priv.key'
untuk mencerminkan jalur kunci pribadi,priv.key
, yang Anda buat. Jangan ubah baris yang menyebutkanTLS.KeyFile
—ini adalah opsi konfigurasi yang berbeda. - Ubah baris
#CertURLBase = '/webpkg/cert'
menjadiCertURLBase = 'data:'
.CertURLBase
menunjukkan lokasi penayangan sertifikat SXG. Informasi ini digunakan untuk menetapkan parametercert-url
di headerSignature
SXG. Di lingkungan produksi,CertURLBase
digunakan seperti ini:CertURLBase = 'https://mysite.com/'
. Namun, untuk pengujian lokal,CertURLBase = 'data:'
dapat digunakan untuk menginstruksikanwebpkgserver
menggunakan URL data untuk menyisipkan sertifikat di kolomcert-url
. Untuk pengujian lokal, ini adalah cara paling praktis untuk menayangkan sertifikat SXG. - Ubah baris
Domain = 'example.org'
untuk mencerminkan domain yang sertifikatnya Anda buat. Jika Anda telah mengikuti petunjuk dalam artikel ini secara verbatim, nilai ini akan diubah menjadiexample.com
.webpkgserver
hanya akan mengambil konten dari domain yang ditunjukkan olehwebpkgserver.toml
. Jika Anda mencoba mengambil halaman dari domain lain tanpa memperbaruiwebpkgserver.toml
, logwebpkgserver
akan menampilkan pesan errorURL doesn't match the fetch targets
.
Opsional
Jika Anda ingin mengaktifkan atau menonaktifkan pramuat sub-resource, opsi konfigurasi
webpkgserver.toml
berikut relevan:Agar
webpkgserver
menyisipkan perintah untuk memuat ulang sub-resource stylesheet dan skrip sebagai SXG, ubah baris#PreloadCSS = false
menjadiPreloadCSS = true
. Selain itu, ubah baris#PreloadJS = false
menjadiPreloadJS = true
.Sebagai alternatif untuk menggunakan opsi konfigurasi ini, Anda dapat menambahkan header
Link: rel="preload"
dan tag<link rel="preload">
secara manual ke HTML halaman.Secara default,
webpkgserver
mengganti tag<link rel="preload">
yang ada dengan tag<link>
yang setara yang diperlukan untuk mengambil konten ini sebagai SXG. Dengan demikian,webpkgserver
akan menetapkan perintahallowed-alt-sxg
danheader-integrity
sesuai kebutuhan—penulis HTML tidak perlu menambahkannya secara manual. Untuk mengganti perilaku ini dan mempertahankan pramuat non-SXG yang ada, ubah#KeepNonSXGPreloads (default = false)
menjadiKeepNonSXGPreloads = true
. Perhatikan bahwa mengaktifkan opsi ini dapat membuat SXG tidak memenuhi syarat untuk cache SXG Google sesuai dengan persyaratan ini.
- Ubah baris
Mulai
webpkgserver
../webpkgserver
Jika server berhasil dimulai, Anda akan melihat pesan log berikut:
shell Listening at 127.0.0.1:8080 Successfully retrieved valid OCSP. Writing to cache in /private/tmp/webpkg
Pesan log Anda mungkin terlihat sedikit berbeda. Secara khusus, direktori yang digunakan
webpkgserver
untuk meng-cache sertifikat bervariasi menurut sistem operasi.Jika Anda tidak melihat pesan ini, langkah pemecahan masalah pertama yang baik adalah memeriksa kembali
webpkgserver.toml
.Jika mengupdate
webpkgserver.toml
, Anda harus memulai ulangwebpkgserver
.Luncurkan Chrome menggunakan perintah berikut:
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`
Perintah ini menginstruksikan Chrome untuk mengabaikan error sertifikat yang terkait dengan
cert.pem
. Hal ini memungkinkan pengujian SXG menggunakan sertifikat pengujian. Jika Chrome diluncurkan tanpa perintah ini, memeriksa SXG di DevTools akan menampilkan errorCertificate verification error: ERR_CERT_INVALID
.Catatan:
Anda mungkin perlu menyesuaikan perintah ini untuk mencerminkan lokasi Chrome di komputer, serta lokasi
cert.pem
. Jika Anda telah melakukannya dengan benar, Anda akan melihat peringatan yang ditampilkan di bawah kolom URL. Peringatan akan terlihat seperti ini:You are using an unsupported command-line flag: --ignore-certificate-errors-spki-list=9uxADcgc6/ho0mJLRMBcOjfBaN21k0sOInoMchr9CMY=.
Jika peringatan tidak menyertakan string hash, Anda belum menunjukkan lokasi sertifikat SXG dengan benar.
Buka tab Jaringan DevTools, lalu buka URL berikut:
http://localhost:8080/priv/doc/https://example.com
.Tindakan ini akan membuat permintaan ke instance
webpackager
yang berjalan dihttp://localhost:8080
untuk SXG yang berisi kontenhttps://example.com
./priv/doc/
adalah endpoint API default yang digunakan olehwebpackager
.Resource berikut tercantum di tab Jaringan:
- Resource dengan jenis
signed-exchange
. Ini adalah SXG. - Resource dengan jenis
cert-chain+cbor
. Ini adalah sertifikat SXG. Sertifikat SXG harus menggunakan formatapplication/cert-chain+cbor
. - Resource dengan jenis
document
. Ini adalah konten yang telah dikirimkan melalui SXG.
Jika Anda tidak melihat resource ini, coba hapus cache browser, lalu muat ulang
http://localhost:8080/priv/doc/https://example.com
.Klik tab Preview untuk melihat informasi selengkapnya tentang Signed Exchange dan tanda tangannya.
- Resource dengan jenis
Menayangkan Signed HTTP Exchange menggunakan sertifikat CanSignHttpExchanges
Petunjuk di bagian ini menjelaskan cara menayangkan SXG menggunakan
sertifikat CanSignHttpExchanges
. Penggunaan SXG dalam produksi memerlukan
sertifikat CanSignHttpExchanges
.
Agar lebih ringkas, petunjuk ini ditulis dengan asumsi bahwa Anda memahami konsep yang dibahas di bagian Menyiapkan Signed Exchanges menggunakan sertifikat yang ditandatangani sendiri.
Prasyarat
Anda memiliki sertifikat
CanSignHttpExchanges
. Halaman ini mencantumkan CA yang menawarkan jenis sertifikat ini.Jika tidak memiliki sertifikat, Anda dapat mengonfigurasi webpkgserver untuk mengambil sertifikat secara otomatis dari CA. Anda dapat mengikuti petunjuk untuk apa yang dimasukkan ke dalam
webpkgserver.toml
di halaman ini.Meskipun bukan persyaratan, sebaiknya jalankan
webpkgserver
di belakang server edge. Jika tidak menggunakan server edge, Anda harus mengonfigurasi opsiTLS.PEMFile
danTLS.KeyFile
diwebpkgserver.toml
. Secara default,webpkgserver
berjalan melalui HTTP. Namun, sertifikat SXG harus ditayangkan melalui HTTPS agar dianggap valid oleh browser. MengonfigurasiTLS.PEMFile
danTLS.KeyFile
memungkinkanwebpkgserver
menggunakan HTTPS, sehingga menayangkan sertifikat SXG langsung ke browser.
Petunjuk
Buat file PEM dengan menggabungkan sertifikat SXG situs Anda, diikuti dengan sertifikat CA situs Anda. Petunjuk selengkapnya tentang hal ini dapat ditemukan di sini.
PEM adalah format file yang biasa digunakan sebagai "penampung" untuk menyimpan beberapa sertifikat.
Buat file
webpkgsever.toml
baru dengan menyalin contoh.cp ./webpkgserver.example.toml ./webpkgserver.toml
Buka
webpkgserver.toml
dengan editor pilihan Anda dan lakukan perubahan berikut:- Ubah baris
PEMFile = cert.pem
untuk mencerminkan lokasi file PEM yang berisi rantai sertifikat lengkap Anda. - Ubah baris
KeyFile = 'priv.key'
untuk mencerminkan lokasi kunci pribadi yang sesuai dengan File PEM Anda. - Ubah baris
Domain = 'example.org'
untuk mencerminkan situs Anda. - (Opsional) Agar
webpkgserver
memperpanjang sertifikat SXG secara otomatis setiap 90 hari (45 hari untuk Google), konfigurasikan opsi di bagian[SXG.ACME]
diwebpkgserver.toml
. Opsi ini hanya berlaku untuk situs dengan penyiapan akun ACME DigiCert atau Google.
- Ubah baris
Konfigurasikan server edge Anda untuk meneruskan traffic ke instance
webpkgserver
.Ada dua jenis utama permintaan yang ditangani oleh
webpkgserver
: permintaan untuk SXG (yang ditayangkan oleh endpoint/priv/doc/
) dan permintaan untuk sertifikat SXG (yang ditayangkan oleh endpoint/webpkg/cert/
). Aturan penulisan ulang URL untuk setiap jenis permintaan ini sedikit berbeda. Untuk mengetahui informasi selengkapnya, lihat Berjalan di belakang server edge frontend.Catatan:
Secara default,
webpkgserver
menayangkan sertifikat SXG di/webpkg/cert/$CERT_HASH
—misalnya,/webpkg/cert/-0QmE0gvoedn92gtwI3s7On9zPevJGm5pn2RYhpZxgY
. Untuk membuat$CERT_HASH
, jalankan perintah berikut:shell openssl base64 -in cert.pem -d | openssl dgst -sha256 -binary | base64 | tr /+ _- | tr -d =