Aprenda a veicular trocas assinadas (SXGs) usando o Web Packager.
Uma troca assinada (SXG, na sigla em inglês) é um mecanismo de entrega que permite
autentica a origem de um recurso independente de como ele foi entregue.
As instruções a seguir explicam como configurar as trocas assinadas usando o
Web Packager. As instruções estão incluídas para
certificados autoassinados e CanSignHttpExchanges.
Servir SXGs usando um certificado autoassinado
O uso de um certificado autoassinado para fornecer SXGs é usado principalmente para demonstração e testes. Os SXGs assinados com um certificado autoassinado geram mensagens de erro no navegador quando usados fora de ambientes de teste e não podem ser veiculados para rastreadores.
Pré-requisitos
Para seguir estas instruções, você precisa ter o openssl e o Go instalados no seu ambiente de desenvolvimento.
Gerar um certificado autoassinado
Esta seção explica como gerar um certificado autoassinado que pode ser usado com trocas assinadas.
Instruções
Gere uma chave privada.
openssl ecparam -out priv.key -name prime256v1 -genkeyA chave privada será salva como um arquivo chamado
priv.key.Crie uma solicitação de assinatura de certificado (CSR).
openssl req -new -sha256 -key priv.key -out cert.csr -subj '/O=Web Packager Demo/CN=example.com'Uma solicitação de assinatura de certificado é um bloco de texto codificado que transmite as informações necessárias para solicitar um certificado de uma autoridade certificadora(AC). Embora você não solicite um certificado de uma AC, ainda é necessário criar uma solicitação de assinatura de certificado.
O comando acima cria uma solicitação de assinatura de certificado para uma organização chamada
Web Packager Demo, que tem o nome comumexample.com. O nome comum precisa ser o nome de domínio totalmente qualificado do site que contém o conteúdo que você quer empacotar como SXG.Em uma configuração de SXG de produção, esse seria um site seu. No entanto, em um ambiente de teste como o descrito nestas instruções, pode ser qualquer site.
Crie um certificado com a extensão
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")Esse comando usa a chave privada e a CSR criadas nas etapas 1 e 2 para criar o arquivo de certificado
cert.pem. A flag-extfileassocia o certificado à extensão de certificadoCanSignHttpExchanges(1.3.6.1.4.1.11129.2.1.22é o identificador de objeto da extensãoCanSignHttpExchanges). Além disso, a flag-extfiletambém defineexample.comcomo um nome alternativo do assunto.Se você quiser saber o conteúdo de
cert.pem, use o seguinte comando:openssl x509 -in cert.pem -noout -textA criação de chaves e certificados privados foi concluída. Você vai precisar dos arquivos
priv.keyecert.pemna próxima seção.
Configurar o servidor do Web Packager para testes
Pré-requisitos
Instale o Web Packager.
git clone https://github.com/google/webpackager.gitCrie o
webpkgserver.cd webpackager/cmd/webpkgserver go build .webpkgserveré um binário específico no projeto do Web Packager.Verifique se o
webpkgserverfoi instalado corretamente../webpkgserver --helpEsse comando deve retornar informações sobre o uso de
webpkgserver. Se isso não funcionar, uma boa primeira etapa de solução de problemas é verificar se o GOPATH está configurado corretamente.
Instruções
Navegue até o diretório
webpkgserver. Talvez você já esteja nesse diretório.cd /path/to/cmd/webpkgserverCrie um arquivo
webpkgsever.tomlcopiando o exemplo.cp ./webpkgserver.example.toml ./webpkgserver.tomlEsse arquivo contém as opções de configuração para
webpkgserver.Abra
webpkgserver.tomlcom o editor de sua escolha e faça as seguintes alterações:- Mude a linha
#AllowTestCert = falseparaAllowTestCert = true. - Mude a linha
PEMFile = 'path/to/your.pem'para refletir o caminho para o certificado PEM,cert.pem, que você criou. Não mude a linha que mencionaTLS.PEMFile. Essa é uma opção de configuração diferente. - Mude a linha
KeyFile = 'priv.key'para refletir o caminho da chave privadapriv.keyque você criou. Não mude a linha que mencionaTLS.KeyFile. Essa é uma opção de configuração diferente. - Mude a linha
#CertURLBase = '/webpkg/cert'paraCertURLBase = 'data:'.CertURLBaseindica o local de veiculação do certificado SXG. Essas informações são usadas para definir o parâmetrocert-urlno cabeçalhoSignatureda SXG. Em ambientes de produção,CertURLBaseé usado desta forma:CertURLBase = 'https://mysite.com/'. No entanto, para testes locais,CertURLBase = 'data:'pode ser usado para instruirwebpkgservera usar um URL de dados para inserir o certificado no campocert-url. Para testes locais, essa é a maneira mais conveniente de exibir o certificado SXG. - Mude a linha
Domain = 'example.org'para refletir o domínio para o qual você criou um certificado. Se você seguiu as instruções deste artigo literalmente, ele precisa ser alterado paraexample.com. Owebpkgserversó vai buscar conteúdo do domínio indicado porwebpkgserver.toml. Se você tentar buscar páginas de um domínio diferente sem atualizarwebpkgserver.toml, os registroswebpkgservervão mostrar a mensagem de erroURL doesn't match the fetch targets.
Opcional
Se você quiser ativar ou desativar o pré-carregamento de subrecursos, as seguintes opções de configuração
webpkgserver.tomlsão relevantes:Para que
webpkgserverinsira diretivas para pré-carregar a folha de estilo e os subrecursos de script como SXGs, mude a linha#PreloadCSS = falseparaPreloadCSS = true. Além disso, mude a linha#PreloadJS = falseparaPreloadJS = true.Como alternativa a essa opção de configuração, é possível adicionar manualmente cabeçalhos
Link: rel="preload"e tags<link rel="preload">ao HTML de uma página.Por padrão,
webpkgserversubstitui as tags<link rel="preload">existentes pelas tags<link>equivalentes necessárias para buscar esse conteúdo como SXG. Ao fazer isso, owebpkgserverdefine as diretivasallowed-alt-sxgeheader-integrityconforme necessário. Os autores de HTML não precisam adicioná-las manualmente. Para modificar esse comportamento e manter os carregamentos prévios não SXG, mude#KeepNonSXGPreloads (default = false)paraKeepNonSXGPreloads = true. Ativar essa opção pode fazer com que a SXG não se qualifique para o cache das SXG do Google de acordo com estes requisitos.
- Mude a linha
Inicie
webpkgserver../webpkgserverSe o servidor tiver sido iniciado, você verá as seguintes mensagens de registro:
shell Listening at 127.0.0.1:8080 Successfully retrieved valid OCSP. Writing to cache in /private/tmp/webpkgAs mensagens de registro podem ser um pouco diferentes. Especificamente, o diretório usado por
webpkgserverpara armazenar certificados em cache varia de acordo com o sistema operacional.Se você não encontrar essas mensagens, uma boa primeira etapa de solução de problemas é verificar
webpkgserver.toml.Se você atualizar
webpkgserver.toml, reiniciewebpkgserver.Inicie o Chrome usando o seguinte comando:
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`Esse comando instrui o Chrome a ignorar os erros de certificado associados a
cert.pem. Isso permite testar SXGs usando um certificado de teste. Se o Chrome for iniciado sem esse comando, a inspeção do SXG no DevTools vai mostrar o erroCertificate verification error: ERR_CERT_INVALID.Observação:
Talvez seja necessário ajustar esse comando para refletir o local do Chrome na máquina, bem como o local de
cert.pem. Se você fez isso corretamente, um aviso será exibido abaixo da barra de endereço. O aviso será semelhante a este:You are using an unsupported command-line flag: --ignore-certificate-errors-spki-list=9uxADcgc6/ho0mJLRMBcOjfBaN21k0sOInoMchr9CMY=.Se o aviso não incluir uma string de hash, você não indicou corretamente o local do certificado SXG.
Abra a guia Network do DevTools e acesse o seguinte URL:
http://localhost:8080/priv/doc/https://example.com.Isso faz uma solicitação à instância
webpackagerem execução emhttp://localhost:8080para uma SXG que contém o conteúdo dehttps://example.com./priv/doc/é o endpoint de API padrão usado porwebpackager.
Os seguintes recursos estão listados na guia Rede:
- Um recurso com o tipo
signed-exchange. Este é o SXG. - Um recurso com o tipo
cert-chain+cbor. Este é o certificado da SXG. Os certificados SXG precisam usar o formatoapplication/cert-chain+cbor. - Um recurso com o tipo
document. Este é o conteúdo que foi veiculado pelo SXG.
Se você não encontrar esses recursos, tente limpar o cache do navegador e recarregar
http://localhost:8080/priv/doc/https://example.com.Clique na guia Visualizar para conferir mais informações sobre a troca assinada e a assinatura.

- Um recurso com o tipo
Oferecer trocas assinadas usando um certificado CanSignHttpExchanges
As instruções desta seção explicam como veicular SXGs usando um
certificado CanSignHttpExchanges. O uso de SXGs em produção requer um
certificado CanSignHttpExchanges.
Para simplificar, estas instruções foram escritas com a suposição de que você entende os conceitos discutidos na seção Configurar trocas assinadas usando um certificado autoassinado.
Pré-requisitos
Você tem um certificado
CanSignHttpExchanges. Esta página lista as ACs que oferecem esse tipo de certificado.Se você não tiver um certificado, configure o webpkgserver para extrair automaticamente certificados da AC. Siga as instruções sobre o que vai em
webpkgserver.tomlnesta página.Embora não seja um requisito, é altamente recomendável executar
webpkgserverpor trás de um servidor de borda. Se você não usar um servidor de borda, vai precisar configurar as opçõesTLS.PEMFileeTLS.KeyFileemwebpkgserver.toml. Por padrão, owebpkgserveré executado por HTTP. No entanto, os certificados SXG precisam ser veiculados por HTTPS para serem considerados válidos pelo navegador. A configuração deTLS.PEMFileeTLS.KeyFilepermite quewebpkgserveruse HTTPS e, portanto, forneça o certificado SXG diretamente ao navegador.
Instruções
Crie um arquivo PEM concatenando o certificado SXG do seu site seguido pelo certificado de CA do seu site. Confira mais instruções aqui.
PEM é um formato de arquivo usado geralmente como um "contêiner" para armazenar vários certificados.
Crie um novo arquivo
webpkgsever.tomlcopiando o exemplo.cp ./webpkgserver.example.toml ./webpkgserver.tomlAbra
webpkgserver.tomlcom o editor de sua escolha e faça as seguintes alterações:- Mude a linha
PEMFile = cert.pempara refletir o local do arquivo PEM que contém a cadeia de certificados completa. - Mude a linha
KeyFile = 'priv.key'para refletir o local da chave privada correspondente ao arquivo PEM. - Mude a linha
Domain = 'example.org'para refletir seu site. - (Opcional) Para que o
webpkgserverrenove automaticamente o certificado do SXG a cada 90 dias (45 dias para o Google), configure as opções na seção[SXG.ACME]dowebpkgserver.toml. Essa opção só se aplica a sites com uma conta DigiCert ou Google ACME configurada.
- Mude a linha
Configure o servidor de borda para encaminhar o tráfego para a instância
webpkgserver.Há dois tipos principais de solicitações processadas por
webpkgserver: solicitações para SXGs (que são atendidas pelo endpoint/priv/doc/) e solicitações para o certificado SXG (que são atendidas pelo endpoint/webpkg/cert/). As regras de reescrita de URL para cada um desses tipos de solicitação variam um pouco. Para mais informações, consulte Como executar por trás do servidor de borda do front-end.Observação:
Por padrão, o
webpkgserverserve o certificado SXG em/webpkg/cert/$CERT_HASH, por exemplo,/webpkg/cert/-0QmE0gvoedn92gtwI3s7On9zPevJGm5pn2RYhpZxgY. Para gerar$CERT_HASH, execute o seguinte comando:shell openssl base64 -in cert.pem -d | openssl dgst -sha256 -binary | base64 | tr /+ _- | tr -d =