瞭解如何使用 Web Packager 提供 Signed Exchange (SXG)。
Signed Exchange (SXG) 是一種傳送機制,可讓
驗證資源來源,獨立驗證資源傳送方式。
下列操作說明會說明如何設定「Signed Exchange」
Web Packager。以下為
自行簽署和 CanSignHttpExchanges
憑證
使用自行簽署的憑證提供 SXG
使用自行簽署的憑證提供 SXG 時,主要用於 示範和測試用途使用自行簽署的憑證簽署的 SXG 如果在測試以外的地方使用瀏覽器,系統會在瀏覽器中產生錯誤訊息 且不應提供給檢索器。
必要條件
如要按照說明操作,您需要 openssl 和 在開發環境中安裝 Go。
產生自行簽署的憑證
本節說明如何產生自行簽署的憑證 與 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")
這個指令會使用在步驟 1 和 2 中建立的 CSR 建立 憑證檔案
cert.pem
。-extfile
旗標會將憑證與CanSignHttpExchanges
憑證擴充功能 (1.3.6.1.4.1.11129.2.1.22
為 物件 IDCanSignHttpExchanges
擴充功能)。此外,-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'
這行程式碼,以反映前往 您建立的 PEM 憑證cert.pem
。請勿變更 提及TLS.PEMFile
的行—這是不同的設定選項。 - 變更
KeyFile = 'priv.key'
這行程式碼,以反映 您所建立的私密金鑰priv.key
。請勿變更行 提及TLS.KeyFile
:這是不同的設定選項。 - 將
#CertURLBase = '/webpkg/cert'
行變更為CertURLBase = 'data:'
。CertURLBase
表示 SXG 的供應位置 憑證這項資訊可用來設定cert-url
參數。 這個Signature
SXG 標頭。在實際工作環境中,CertURLBase
會使用CertURLBase
如下所示:CertURLBase = 'https://mysite.com/'
。不過,就本機檔案而言 測試,CertURLBase = 'data:'
可用來指示webpkgserver
使用 網址 以內嵌方式在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 無法在 各個元件所需的 requirements。
- 將
啟動
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 憑證的位置。
開啟開發人員工具「Network」分頁,然後造訪下列網址:
http://localhost:8080/priv/doc/https://example.com
。這會向在下列位置執行的
webpackager
執行個體發出要求:http://localhost:8080
代表 SXG,其中包含https://example.com
。/priv/doc/
是 Cloud Shell 中所用的預設 API 端點webpackager
。「Network」分頁會列出下列資源:
- 類型為
signed-exchange
的資源。也就是 SXG。 - 類型為
cert-chain+cbor
的資源。這是 SXG 憑證。SXG 憑證必須採用application/cert-chain+cbor
格式。 - 類型為
document
的資源。透過 SXG 提交的內容。
如果您沒有看到這些資源,請嘗試清除瀏覽器快取 正在重新載入「
http://localhost:8080/priv/doc/https://example.com
」。按一下「預覽」分頁標籤,進一步瞭解 Signed Exchange 與其簽章
- 類型為
使用 CanSignHttpExchanges
憑證提供 Signed Exchange
本節將說明如何使用
CanSignHttpExchanges
憑證。實作 SXG 需要有
CanSignHttpExchanges
憑證。
為求簡潔,這些指示是以假設 熟悉設定 Signed Exchanges 機制中 使用自行簽署的 認證 專區。
必要條件
您有
CanSignHttpExchanges
憑證。這個 頁面 列出提供這類憑證的 CA。如果您沒有憑證,可以將 webpkgserver 設定為 自動從 CA 擷取憑證。您可以按照 顯示
webpkgserver.toml
前方的路程 頁面。雖然這並非硬性規定
webpkgserver
。如果您不使用邊緣伺服器, 您必須在TLS.PEMFile
TLS.KeyFile
webpkgserver.toml
。根據預設,webpkgserver
會透過 HTTP 執行。不過,SXG 憑證必須透過 HTTPS 提供,瀏覽器才能認定為有效憑證。 設定TLS.PEMFile
和TLS.KeyFile
後,webpkgserver
就能使用 HTTPS,因此直接提供 SXG 憑證給瀏覽器。
操作說明
串連網站的 SXG 憑證,然後建立 PEM 檔案,並在後面加上 網站的 CA 憑證如需更多有關這種情況的指示,請參閱 請按這裡。
PEM 是 檔案格式通常做為「容器」儲存多個 憑證
複製範例,建立新的
webpkgsever.toml
檔案。cp ./webpkgserver.example.toml ./webpkgserver.toml
使用您選擇的編輯器開啟
webpkgserver.toml
,然後 進行的變更:- 根據 PEM 的位置變更
PEMFile = cert.pem
行 檔案。 - 將
KeyFile = 'priv.key'
這一行變更為反映地點的位置 PEM 檔案對應的私密金鑰。 - 請根據網站內容變更
Domain = 'example.org'
行。 - (選用) 如要讓
webpkgserver
每隔一段時間自動續購 SXG 憑證 90 天 (Google 為 45 天),設定以下項目的[SXG.ACME]
部分:webpkgserver.toml
。這個選項僅適用於含有 DigiCert 的網站 或 Google ACME 帳戶設定
- 根據 PEM 的位置變更
設定邊緣伺服器,將流量轉送至
webpkgserver
執行個體。由
webpkgserver
處理的要求主要分為兩種:要求 ,針對 SXG (由/priv/doc/
端點提供) 和針對以下項目的要求: SXG 憑證 (由/webpkg/cert/
端點提供)。 這些要求類型的網址重新寫入規則可能略有不同。適用對象 詳情請參閱在前端邊緣執行 伺服器。注意:
根據預設,
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 =