ウェブ パッケージャを使用して Signed Exchange を設定する方法

Web Packager を使用して Signed Exchange(SXG)を提供する方法について説明します。

Katie Hempenius
Katie Hempenius

Signed Exchange(SXG)は、SXG によって送受信される リソースの配信方法に関係なく、リソースの出所を認証できます。 次の手順は、Cloud KMS 鍵を使用して Signed Exchange を設定する Web パッケージャ。手順が記載されている 自己署名証明書と CanSignHttpExchanges 証明書の両方。

自己署名証明書を使用して SXG を提供する

自己署名証明書を使用した SXG の提供は、主に以下の目的で使用されます。 デモとテストを目的としています。自己署名証明書で署名された SXG テスト外で使用すると、ブラウザでエラー メッセージが生成される クローラーには配信しないでください。

前提条件

以下の手順を行うには、次が必要です。 openssl と 開発環境に Go がインストールされている。

自己署名証明書を生成する

このセクションでは、可能な自己署名証明書を生成する方法について説明します。 いくつかあります。

手順

  1. 秘密鍵を生成します。

    openssl ecparam -out priv.key -name prime256v1 -genkey
    

    秘密鍵は、priv.key という名前のファイルとして保存されます。

  2. 証明書署名を作成する リクエストします(CSR)。

    openssl req -new -sha256 -key priv.key -out cert.csr -subj '/O=Web Packager Demo/CN=example.com'
    

    証明書署名リクエストは、証明書署名リクエストに関する情報を伝えるエンコード テキストのブロックです。 認証局(CA)に証明書をリクエストするために必要な情報証明書は Google Cloud からリクエストするわけではなく、 CA を使用するには、引き続き証明書署名リクエストを作成する必要があります。

    上記のコマンドは、組織の証明書署名リクエストを作成します。 名前付きの Web Packager Demo共通 name example.com。「 「Common name」には、含まれるサイトの完全修飾ドメイン名を指定する必要があります。 SXG としてパッケージ化するコンテンツを指定します。

    本番環境の SXG 設定では、これはユーザーが所有するサイトになります。ただし、 環境をテストする場合は、任意の環境、 サイトをご覧ください。

  3. 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 フラグは、証明書を 証明書拡張 CanSignHttpExchanges1.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 サーバーを設定する

前提条件

  1. Web Packager をインストールします。

    git clone https://github.com/google/webpackager.git
    
  2. webpkgserver をビルドします。

    cd webpackager/cmd/webpkgserver
    go build .
    

    webpkgserver は、Web Packager プロジェクト内の特定のバイナリです。

  3. webpkgserver が正しくインストールされていることを確認します。

    ./webpkgserver --help
    

    このコマンドは、webpkgserver の使用状況に関する情報を返します。条件 それでもうまくいきません。まず、 GOPATH が構成されている 確認します。

手順

  1. webpkgserver ディレクトリに移動します(すでにこの ディレクトリにあります)。

    cd /path/to/cmd/webpkgserver
    
  2. サンプルをコピーして webpkgsever.toml ファイルを作成します。

    cp ./webpkgserver.example.toml ./webpkgserver.toml
    

    このファイルには、webpkgserver の構成オプションが含まれています。

  3. 任意のエディタで 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 ヘッダーがあります。本番環境では、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"> タグを 確認します。

    • デフォルトでは、webpkgserver は既存の <link rel="preload"> タグを置き換えます。 <link> タグ(このコンテンツを SXG、その際、webpkgserverallowed-alt-sxg および header-integrity ディレクティブを追加できます。HTML 作成者がこれらを手動で追加する必要はありません。宛先 この動作をオーバーライドし、SXG 以外の既存のプリロードを保持するには、 #KeepNonSXGPreloads (default = false) から KeepNonSXGPreloads = true に変更。 このオプションを有効にすると、SXG が Google SXG キャッシュは 要件

  4. 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 を再起動する必要があります。

  5. 次のコマンドを使用して 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 で。これにより、TEST モードの SXG テスト機能を使用して あります。このコマンドなしで Chrome を起動した場合は、SXG を検査します。 DevTools でエラー 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 証明書の場所を示します。

  6. DevTools の [ネットワーク] タブを開き、次の URL にアクセスします。 http://localhost:8080/priv/doc/https://example.com

    これにより、次の URL で実行されている webpackager インスタンスにリクエストが送信されます。 http://localhost:8080(次の内容を含む SXG の場合) https://example.com/priv/doc/ は、使用されるデフォルトの API エンドポイントです。 webpackager

    SXG とその証明書が表示されている DevTools の [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 の詳細を確認します。 その署名です。

    SXG が表示されている [プレビュー] タブのスクリーンショット

CanSignHttpExchanges 証明書を使用して Signed Exchange を提供する

このセクションでは、 CanSignHttpExchanges 証明書。本番環境で SXG を使用するには、 CanSignHttpExchanges 証明書。

わかりやすくするため、これらの命令は 「Signed Exchange を設定する」で説明されている概念を理解していること 自己署名 API を使用して、 証明書

前提条件

  • CanSignHttpExchanges の証明書があります。この ページ に、このタイプの証明書を提供する CA の一覧を示します。

  • 証明書がない場合は、webpkgserver を次のように構成できます。 CA から証明書を自動的に取得します。詳細については、 この地域の「webpkgserver.toml」に向かうルート ページをご覧ください。

  • 必須ではありませんが、Deployment の エッジサーバーの背後にある webpkgserver。エッジサーバーを使用しない場合は TLS.PEMFile オプションと TLS.KeyFile オプションを webpkgserver.toml。デフォルトでは、webpkgserver は HTTP 経由で実行されます。ただし、SXG 証明書は、ブラウザで有効と見なされるには HTTPS 経由で提供する必要があります。 TLS.PEMFileTLS.KeyFile を設定すると、webpkgserver が以下を使用できるようになります SXG 証明書を直接ブラウザに提供します。

手順

  1. サイトの SXG 証明書と サイトの CA 証明書を使用できます。詳しい手順については、このモジュールの こちらをご覧ください。

    PEM は 「コンテナ」として一般的に使用されるファイル形式複数のストレージクラスを 提供します。

  2. サンプルをコピーして新しい webpkgsever.toml ファイルを作成します。

    cp ./webpkgserver.example.toml ./webpkgserver.toml
    
  3. 任意のエディタで 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 のアカウント設定です。
  4. トラフィックを webpkgserver に転送するようにエッジサーバーを構成する 構成されます

    webpkgserver が処理するリクエストには、主に次の 2 つのタイプがあります。 (/priv/doc/ エンドポイントによって提供される)SXG と 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 =