Saiba como veicular trocas assinadas (SXGs) usando o Web Packager.
Uma troca assinada (SXG) é um mecanismo de entrega que facilita
possível autenticar a origem de um recurso independentemente de como ele foi entregue.
As instruções a seguir explicam como configurar as trocas assinadas usando
Web Packager. As instruções estão incluídas para
os certificados autoassinados e os certificados CanSignHttpExchanges
.
Disponibilizar SXGs usando um certificado autoassinado
O uso de um certificado autoassinado para exibir SXGs é usado principalmente para para fins de demonstração e teste. SXGs assinadas com um certificado autoassinado gera mensagens de erro no navegador quando usado fora do teste ambientes e não deve ser exibido para rastreadores.
Pré-requisitos
Para seguir estas instruções, você precisará ter openssl e Go instalado no ambiente de desenvolvimento.
Gerar um certificado autoassinado
Esta seção explica como gerar um certificado autoassinado que pode ser usados com trocas assinadas.
Instruções
Gere uma chave privada.
openssl ecparam -out priv.key -name prime256v1 -genkey
A chave privada será salva como um arquivo chamado
priv.key
.Crie uma assinatura de certificado request (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 a informações necessárias para solicitar um certificado de uma autoridade de certificação(CA). Embora você não solicite um certificado de um CA, 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 a chave nomeexample.com
. A nome real deve 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, isso seria um site de sua propriedade. No entanto, em uma ambiente de teste como o descrito nestas instruções, pode ser qualquer site.
Crie um certificado que tenha 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 criada nas etapas 1 e 2 para criar a arquivo de certificado
cert.pem
. A sinalização-extfile
associa o certificado a a extensão do certificadoCanSignHttpExchanges
(1.3.6.1.4.1.11129.2.1.22
é o objeto identificador para a extensãoCanSignHttpExchanges
). Além disso, a sinalização-extfile
também defineexample.com
como uma alternativa de assunto Nome.Se você quiser conferir o conteúdo de
cert.pem
, use o seguinte comando:openssl x509 -in cert.pem -noout -text
Você concluiu a criação das chaves privadas e dos certificados. Você vai precisar do Arquivos
priv.key
ecert.pem
na próxima seção.
Configurar o servidor Web Packager para testes
Pré-requisitos
Instale o Web Packager.
git clone https://github.com/google/webpackager.git
Crie o
webpkgserver
.cd webpackager/cmd/webpkgserver go build .
webpkgserver
é um binário específico no projeto Web Packager.Verifique se o
webpkgserver
foi instalado corretamente../webpkgserver --help
Esse comando retornará informações sobre o uso de
webpkgserver
. Se isso não funcionar, uma boa primeira etapa da solução de problemas é verificar se o GOPATH está configurado corretamente.
Instruções
Navegue até o diretório
webpkgserver
(talvez você já esteja nesse ).cd /path/to/cmd/webpkgserver
Crie um arquivo
webpkgsever.toml
copiando o exemplo.cp ./webpkgserver.example.toml ./webpkgserver.toml
Este arquivo contém as opções de configuração para
webpkgserver
.Abra
webpkgserver.toml
com um editor de sua escolha e faça o seguinte muda:- Mude a linha
#AllowTestCert = false
paraAllowTestCert = true
. - Mude a linha
PEMFile = 'path/to/your.pem'
para refletir o caminho o certificado PEM,cert.pem
, que você criou. Não altere o mencionandoTLS.PEMFile
. Essa é uma opção de configuração diferente. - Mude a linha
KeyFile = 'priv.key'
para refletir o caminho do chave privada,priv.key
, que você criou. Não altere a linha mencionandoTLS.KeyFile
. Essa é uma opção de configuração diferente. - Mude a linha
#CertURLBase = '/webpkg/cert'
paraCertURLBase = 'data:'
.CertURLBase
indica o local de veiculação das SXG. certificado. Essa informação é usada para definir o parâmetrocert-url
na asSignature
cabeçalho das SXG. Em ambientes de produção,CertURLBase
é usado assim:CertURLBase = 'https://mysite.com/'
. No entanto, para aplicativos teste,CertURLBase = 'data:'
pode ser usado para instruirwebpkgserver
para usar uma configuração URL para colocar o certificado inline no campocert-url
. Para testes locais, essa é a maneira mais conveniente de disponibilizar o certificado SXG. - Altere a linha
Domain = 'example.org'
para refletir o domínio que você criou um certificado. Se você tiver seguido as instruções artigo literal, ele precisa ser alterado paraexample.com
.webpkgserver
buscará somente conteúdo do domínio indicado porwebpkgserver.toml
. Se você tentar buscar páginas de um domínio diferente sem atualizar owebpkgserver.toml
, os registros dewebpkgserver
vão mostrar a mensagem de erroURL doesn't match the fetch targets
.
Opcional
Se você quiser ativar ou desativar o sub-recurso pré-carregamento, as seguintes opções de configuração de
webpkgserver.toml
são relevantes:Para que
webpkgserver
insira diretivas para o pré-carregamento da folha de estilo e sub-recursos de script como SXGs, altere a linha#PreloadCSS = false
paraPreloadCSS = true
. Além disso, altere a linha#PreloadJS = false
paraPreloadJS = true
.Como alternativa ao uso dessa opção de configuração, é possível adicione cabeçalhos
Link: rel="preload"
e tags<link rel="preload">
a um HTML da página.Por padrão,
webpkgserver
substitui as tags<link rel="preload">
atuais. com as tags<link>
equivalentes, necessárias para buscar esse conteúdo como SXG. Ao fazer isso,webpkgserver
definirá oallowed-alt-sxg
eheader-integrity
conforme necessário. Os autores de HTML não precisam adicioná-las manualmente. Para substituir esse comportamento e manter pré-carregamentos não SXG existentes, alterar#KeepNonSXGPreloads (default = false)
paraKeepNonSXGPreloads = true
. Lembre-se de que ativar essa opção pode tornar as SXGs não qualificadas para cache das SXG do Google de acordo com requisitos.
- Mude a linha
Inicie
webpkgserver
../webpkgserver
Se o servidor tiver sido iniciado com êxito, 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/webpkg
Suas mensagens de registro podem ser um pouco diferentes. Especificamente, o diretório que o
webpkgserver
usa para armazenar em cache os certificados varia de acordo com o sistema operacional.Caso não veja essas mensagens, uma boa primeira solução etapa é verificar
webpkgserver.toml
.Se você atualizar o
webpkgserver.toml
, reinicie owebpkgserver
.Inicie o Chrome com 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 com
cert.pem
. Isso possibilita testar as SXGs usando um certificado. Se o Chrome for iniciado sem esse comando, a inspeção das SXG no DevTools, vai mostrar o erroCertificate verification error: ERR_CERT_INVALID
.Observação:
Talvez seja necessário ajustar esse comando para refletir a localização do Chrome na da máquina e a localização do
cert.pem
. Se você já fez isso corretamente, você verá um aviso abaixo da barra de endereço. A 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, isso significa que você não fez indicou a localização do certificado SXG.
Abra a guia Rede do DevTools e acesse o seguinte URL:
http://localhost:8080/priv/doc/https://example.com
Isso faz uma solicitação à instância
webpackager
em execução emhttp://localhost:8080
para uma SXG com o conteúdo dehttps://example.com
/priv/doc/
é o endpoint de API padrão usado pelowebpackager
.Os recursos a seguir estão listados na guia Rede:
- Um recurso com o tipo
signed-exchange
Esta é a SXG. - Um recurso com o tipo
cert-chain+cbor
Este é o certificado das SXG. Os certificados SXG precisam usar o formatoapplication/cert-chain+cbor
. - Um recurso com o tipo
document
Este é o conteúdo enviado pelas SXG.
Se você não encontrar esses recursos, tente limpar o cache do navegador e recarregando
http://localhost:8080/priv/doc/https://example.com
.Clique na guia Visualização para exibir mais informações sobre a troca assinada e sua assinatura.
- Um recurso com o tipo
Exibir trocas assinadas usando um certificado CanSignHttpExchanges
As instruções nesta seção explicam como exibir SXGs usando um
CanSignHttpExchanges
certificado. O uso na produção de SXGs requer uma
CanSignHttpExchanges
certificado.
Por uma questão de brevidade, estas instruções foram escritas com o pressuposto que você entenda os conceitos discutidos no curso Configurar trocas assinadas usando um modelo autoassinado certificação nesta seção.
Pré-requisitos
Você tem um certificado
CanSignHttpExchanges
. Isso página lista as ACs que oferecem esse tipo de certificado.Se você não tiver um certificado, poderá configurar seu webpkgserver para recuperem automaticamente certificados da CA. Você pode seguir rotas para o que acontece em
webpkgserver.toml
neste .Embora não seja um requisito, é altamente recomendável executar
webpkgserver
atrás de um servidor de borda. Se você não usa um servidor de borda, você precisa configurar as opçõesTLS.PEMFile
eTLS.KeyFile
webpkgserver.toml
Por padrão, owebpkgserver
é executado em HTTP. No entanto, as SXG os certificados precisam ser veiculados por HTTPS para serem considerados válidos pelo navegador. ConfigurarTLS.PEMFile
eTLS.KeyFile
permite quewebpkgserver
use e, portanto, disponibilizar o certificado SXG diretamente para o navegador.
Instruções
Crie um arquivo PEM concatenando o certificado SXG do site seguido por certificado de CA do seu site. Mais instruções sobre isso podem ser encontradas aqui.
PEM é formato de arquivo comumente usado como um "contêiner" para armazenar vários certificados.
Crie um novo arquivo
webpkgsever.toml
copiando o exemplo.cp ./webpkgserver.example.toml ./webpkgserver.toml
Abra
webpkgserver.toml
com o editor de sua preferência e faça a as seguintes mudanças:- Mude a linha
PEMFile = cert.pem
para refletir a localização do PEM. que contém a cadeia completa de certificados. - Mude a linha
KeyFile = 'priv.key'
para refletir a localização do chave privada correspondente ao seu arquivo PEM. - Altere a linha
Domain = 'example.org'
para refletir seu site. - (Opcional) Para que
webpkgserver
renove automaticamente o certificado das SXG a cada 90 dias (45 dias para o Google), configure as opções na seção[SXG.ACME]
dowebpkgserver.toml
Esta opção só é aplicável a sites com um certificado DigiCert ou do Google ACME.
- Mude a linha
Configure seu servidor de borda para encaminhar tráfego para o
webpkgserver
instância.Há dois tipos principais de solicitações processadas pelo
webpkgserver
: solicitações para SXGs (que são atendidas pelo endpoint/priv/doc/
) e solicitações de o certificado SXG (exibidos pelo endpoint/webpkg/cert/
). A As regras de regravação de URL para cada um desses tipos de solicitação variam um pouco. Para mais informações, consulte Executar atrás do front-end servidor.Observação:
Por padrão,
webpkgserver
exibe o certificado das 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 =