Pelajari cara memberikan Signed HTTP Exchange (SXG) menggunakan Web Packager.
Signed HTTP Exchange (SXG)
adalah mekanisme pengiriman yang membuatnya
dapat mengotentikasi asal resource secara
terpisah dari cara pengirimannya.
Petunjuk berikut menjelaskan cara menyiapkan Signed HTTP Exchange menggunakan
Web Packager. Petunjuk disertakan untuk
ditandatangani sendiri dan sertifikat CanSignHttpExchanges
.
Menyajikan SXG menggunakan sertifikat yang ditandatangani sendiri
Menggunakan sertifikat yang ditandatangani sendiri untuk melayani 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 pengujian lingkungan dan tidak boleh ditayangkan ke crawler.
Prasyarat
Untuk mengikuti petunjuk ini, Anda harus memiliki openssl dan Go yang diinstal di lingkungan pengembangan Anda.
Membuat sertifikat yang ditandatangani sendiri
Bagian ini menjelaskan cara membuat sertifikat yang ditandatangani sendiri yang dapat yang digunakan dengan Signed HTTP Exchange.
Petunjuk
Membuat kunci pribadi.
openssl ecparam -out priv.key -name prime256v1 -genkey
Kunci pribadi akan disimpan sebagai file bernama
priv.key
.Membuat penandatanganan sertifikat request (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 atribut namaexample.com
. Tujuan nama umum harus merupakan nama domain yang sepenuhnya memenuhi syarat dari situs yang berisi konten yang ingin Anda kemas sebagai SXG.Dalam penyiapan SXG produksi, ini akan menjadi situs yang Anda miliki. Namun, dalam lingkungan pengujian seperti yang dijelaskan dalam petunjuk ini, bisa berupa situs Anda.
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 di 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 objek ID untuk ekstensiCanSignHttpExchanges
). Selain itu, flag-extfile
juga mendefinisikanexample.com
sebagai Alternatif Subjek Nama.Jika ingin mengetahui konten
cert.pem
, Anda dapat melihatnya menggunakan perintah berikut:openssl x509 -in cert.pem -noout -text
Anda telah selesai membuat sertifikat dan kunci pribadi. Anda 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
Bangun
webpkgserver
.cd webpackager/cmd/webpkgserver go build .
webpkgserver
adalah biner khusus dalam project Web Packager.Pastikan
webpkgserver
telah diinstal dengan benar../webpkgserver --help
Perintah ini akan menampilkan informasi tentang penggunaan
webpkgserver
. Jika ini tidak berhasil, langkah pemecahan masalah pertama yang baik adalah dengan memverifikasi bahwa GOPATH dikonfigurasi dengan benar.
Petunjuk
Buka direktori
webpkgserver
(Anda mungkin sudah berada di direktori).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 lakukan hal berikut perubahan:- Ubah baris
#AllowTestCert = false
menjadiAllowTestCert = true
. - Ubah baris
PEMFile = 'path/to/your.pem'
untuk mencerminkan 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 garisnya menyebutkanTLS.KeyFile
—ini adalah opsi konfigurasi yang berbeda. - Ubah baris
#CertURLBase = '/webpkg/cert'
menjadiCertURLBase = 'data:'
.CertURLBase
menunjukkan lokasi penayangan SXG CA {i>root<i}. Informasi ini digunakan untuk menetapkan parametercert-url
di tindakanSignature
header SXG. Di lingkungan produksi,CertURLBase
digunakan seperti ini:CertURLBase = 'https://mysite.com/'
. Namun, untuk laporan pengujian,CertURLBase = 'data:'
dapat digunakan untuk menginstruksikanwebpkgserver
menggunakan data URL untuk membuat sertifikat menjadi inline di kolomcert-url
. Untuk pengujian lokal, ini adalah cara yang paling nyaman untuk memberikan sertifikat SXG. - Ubah baris
Domain = 'example.org'
untuk mencerminkan domain yang Anda sertifikat yang dibuat untuknya. Jika Anda telah mengikuti petunjuk dalam kata demi kata, ini harus diubah menjadiexample.com
.webpkgserver
hanya akan mengambil konten dari domain yang ditunjukkan olehwebpkgserver.toml
. Jika Anda mencoba mengambil halaman dari domain yang berbeda tanpa memperbaruiwebpkgserver.toml
, logwebpkgserver
akan menampilkan pesan {i>error <i}URL doesn't match the fetch targets
.
Opsional
Jika ingin mengaktifkan atau menonaktifkan subresource melakukan pramuat, opsi konfigurasi
webpkgserver.toml
berikut relevan:Agar
webpkgserver
dapat menyisipkan perintah untuk melakukan pramuat stylesheet dan skrip subresource sebagai SXG, ubah baris#PreloadCSS = false
kePreloadCSS = true
. Selain itu, ubah baris#PreloadJS = false
menjadiPreloadJS = true
.Sebagai alternatif penggunaan opsi konfigurasi ini, Anda dapat menambahkan header
Link: rel="preload"
dan tag<link rel="preload">
ke HTML halaman.Secara default,
webpkgserver
menggantikan tag<link rel="preload">
yang sudah ada dengan tag<link>
setara yang diperlukan untuk mengambil konten ini sebagai SXG. Dengan demikian,webpkgserver
akan menyetelallowed-alt-sxg
danheader-integrity
sesuai kebutuhan—penulis HTML tidak perlu menambahkannya secara manual. Kepada mengabaikan perilaku ini dan mempertahankan pramuat non-SXG yang ada, ubah#KeepNonSXGPreloads (default = false)
hinggaKeepNonSXGPreloads = true
. Perhatikan bahwa mengaktifkan opsi ini dapat membuat SXG tidak memenuhi syarat untuk cache SXG Google sesuai persyaratan.
- 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 menyimpan sertifikat dalam cache bervariasi menurut sistem operasi.Jika Anda tidak melihat pesan ini, sebaiknya lakukan pemecahan masalah terlebih dahulu adalah memeriksa ulang
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 memerintahkan Chrome untuk mengabaikan error sertifikat yang terkait dengan
cert.pem
. Hal ini memungkinkan untuk menguji SXG menggunakan tes CA {i>root<i}. 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 Anda, serta lokasi
cert.pem
. Jika Anda sudah melakukannya dengan benar, Anda akan melihat peringatan yang ditampilkan di bawah kolom URL. Tujuan peringatan akan serupa dengan yang berikut:You are using an unsupported command-line flag: --ignore-certificate-errors-spki-list=9uxADcgc6/ho0mJLRMBcOjfBaN21k0sOInoMchr9CMY=.
Jika peringatan tidak menyertakan string hash, berarti Anda belum melakukannya dengan benar menunjukkan lokasi sertifikat SXG.
Buka tab Jaringan DevTools, lalu kunjungi URL berikut:
http://localhost:8080/priv/doc/https://example.com
.Fungsi ini membuat permintaan ke instance
webpackager
yang berjalan padahttp://localhost:8080
untuk SXG yang berisi kontenhttps://example.com
./priv/doc/
adalah endpoint API default yang digunakan olehwebpackager
.Resource berikut tercantum pada 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 dikirim melalui SXG.
Jika Anda tidak melihat sumber daya ini, coba hapus {i>cache browser<i}, lalu memuat 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
Melayani Signed HTTP Exchange menggunakan sertifikat CanSignHttpExchanges
Petunjuk di bagian ini menjelaskan cara menayangkan SXG menggunakan
Sertifikat CanSignHttpExchanges
. Penggunaan produksi SXG memerlukan
Sertifikat CanSignHttpExchanges
.
Agar lebih singkat, petunjuk ini ditulis dengan asumsi Anda telah memahami konsep yang dibahas dalam artikel Menyiapkan Pertukaran Bertanda Tangan menggunakan tanda tangan elektronik sertifikat bagian.
Prasyarat
Anda memiliki sertifikat
CanSignHttpExchanges
. Ini halaman mencantumkan CA yang menawarkan jenis sertifikat ini.Jika Anda tidak memiliki sertifikat, maka Anda dapat mengkonfigurasi webpkgserver Anda untuk secara otomatis mengambil sertifikat dari CA Anda. Anda dapat mengikuti rute untuk konten yang ada di
webpkgserver.toml
halaman.Meskipun bukan persyaratan, sangat disarankan agar Anda menjalankan
webpkgserver
di belakang server edge. Jika Anda tidak menggunakan server edge, Anda harus mengonfigurasi opsiTLS.PEMFile
danTLS.KeyFile
diwebpkgserver.toml
. Secara default,webpkgserver
berjalan melalui HTTP. Namun, SXG sertifikat harus disajikan melalui HTTPS agar dianggap valid oleh browser. Dengan mengonfigurasiTLS.PEMFile
danTLS.KeyFile
,webpkgserver
dapat menggunakan HTTPS dan kemudian menayangkan sertifikat SXG langsung ke browser.
Petunjuk
Buat file PEM dengan menyambungkan sertifikat SXG situs Anda yang diikuti dengan sertifikat CA situs Anda. Petunjuk lebih lanjut tentang hal ini dapat ditemukan di sini.
PEM adalah format file yang biasa digunakan sebagai "penampung" untuk menyimpan banyak CA {i>root<i}.
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:- Mengubah baris
PEMFile = cert.pem
untuk mencerminkan lokasi 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
dapat memperpanjang sertifikat SXG secara otomatis setiap 90 hari (45 hari untuk Google), konfigurasi opsi di bagian[SXG.ACME]
webpkgserver.toml
. Opsi ini hanya berlaku untuk situs yang memiliki sertifikasi DigiCert atau pembuatan akun ACME Google.
- Mengubah baris
Konfigurasi server edge untuk meneruskan traffic ke
webpkgserver
di instance Compute Engine.Ada dua jenis permintaan utama yang ditangani oleh
webpkgserver
: permintaan untuk SXG (yang dilayani oleh endpoint/priv/doc/
) dan permintaan untuk sertifikat SXG (yang ditayangkan oleh endpoint/webpkg/cert/
). Tujuan Aturan penulisan ulang URL untuk setiap jenis permintaan ini sedikit berbeda. Sebagai informasi selengkapnya, lihat Berjalan di belakang frontend server.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 =