Passer au contenu principal




Comment générer un certificat TLS avec des extensions SXG, installer des outils pour générer des fichiers SXG et configurer nginx pour servir les fichiers SXG.

Échanges HTTP signés (SXG) es una nueva tecnología la toile que facilita a los usuarios diferenciar a los creadores de Contenu de los distribuidores de contenido. Esta guía le muestra cómo configurar SXG.

Compatibilidad con varios navigateurs

Varios navegadores basados ​​en Chromium admiten SXG, incluidos Google Chrome, Samsung Internet y Microsoft Edge. Consulte la sección de consenso y estandarización de
Echanges HTTP signés par origine
pour les informations les plus récentes.

Conditions préalables

Pour implémenter SXG sur votre site Web, vous devez:

  • Tenga control sobre su domaine, incluidas las entradas de DNS.
  • Obtenez des certificats. SXG nécessite l'émission d'un certificat dédié. En particulier, vous ne pouvez pas réutiliser votre clé ou certificat TLS.
  • Tenga un serveur HTTP que pueda generar y servir SXG a través de HTTPS.

Hypothèses

Ce guide suppose que vous:

  • Avoir un environnement OpenSSL 1.1.1. Ce guide a été écrit avec Ubuntu 18.04 LTS sur amd64 ISA.
  • Avoir la capacité de courir sudo pour installer des exécutables.
  • Utiliser nginx en tant que serveur HTTP.
  • Ils utilisent DigiCert pour générer des certificats qui incluent des extensions liées à SXG, car il semble actuellement être le seul fournisseur à prendre en charge ces extensions.

En outre, les exemples de commandes de cet article supposent que votre domaine est website.test, vous devrez donc remplacer website.test avec son domaine royal.

Étape 1: obtenez votre certificat pour SXG

Pour générer SXG, vous avez besoin d'un certificat TLS avec le CanSignHttpExchanges extension, ainsi qu'un type de clé particulier. DigiCert fournit des certificats avec cette extension. Vous avez besoin d'un fichier CSR pour émettre un certificat, alors générez-le avec les commandes suivantes:

openssl ecparam -genkey -name prime256v1 -out mySxg.key
openssl req -new -key mySxg.key -nodes -out mySxg.csr -subj "/O=Test/C=US/CN=website.test"

Vous obtiendrez un fichier CSR qui ressemble à ceci:

-----BEGIN CERTIFICATE REQUEST-----
MIHuMIGVAgEAMDMxDTALBgNVBAoMBFRlc3QxCzAJBgNVBAYTAlVTMRUwEwYDVQQD
DAx3ZWJzaXRlLnRlc3QwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAS7IVaeMvid
S5UO7BspzSe5eqT5Qk6X6dCggUiV/vyqQaFDjA/ALyTofgXpbCaksorPaDhdA+f9
APdHWkTbbdv1oAAwCgYIKoZIzj0EAwIDSAAwRQIhAIb7n7Kcc6Y6pU3vFr8SDNkB
kEadlVKNA24SVZ/hn3fjAiAS2tWXhYdJX6xjf2+DL/smB36MKbXg7VWy0K1tWmFi
Sg==
-----END CERTIFICATE REQUEST-----

Assurez-vous que:

  • La période de validité ne dépasse pas 90 jours.
  • Les Inclure l'extension CanSignHttpExchanges dans le certificat La case à cocher est activée, trouvée sous Options de certificat supplémentaires.
sxg-check-6467115

Les Inclure l'extension CanSignHttpExchanges dans le certificat boîte.

Si votre certificat ne remplit pas ces conditions, les navigateurs et les distributeurs rejetteront votre SXG pour des raisons de sécurité. Ce guide suppose que le nom de fichier du certificat que vous avez obtenu de DigiCert est mySxg.pem.

Étape 2: installer libsxg

Le format SXG est complexe et difficile à générer sans utiliser d'outils. Vous pouvez utiliser l'une des options suivantes pour générer SXG:

Ce guide utilise libsxg.

Option 1: installer libsxg à partir d'un paquet Debian

Vous pouvez installer le paquet de la manière habituelle Debian, à condition qu'OpenSSL (libssl-dev) correspond à la version.

sudo apt installer -y libssl-dev
wget https://github.com/google/libsxg/releases/download/v0.2/libsxg0_0.2-1_amd64.deb
wget https://github.com/google/libsxg/releases/download/v0.2/libsxg-dev_0.2-1_amd64.deb
sudo dpkg -i libsxg0_0.2-1_amd64.deb
sudo dpkg -i libsxg-dev_0.2-1_amd64.deb

Option 2: construire libsxg à la main

Si vous n'utilisez pas un environnement compatible avec .deb fichiers, vous pouvez créer libsxg vous-même. Comme condition préalable, vous devez installer git, cmake, openssly gcc.

git clone https://github.com/google/libsxg
mkdir libsxg/build
CD libsxg/build
cmake .. -DRUN_TEST=false -DCMAKE_BUILD_TYPE=Release
make
sudo make installer

Étape 3: installer nginx prise de courant

Les nginx Le plugin vous permet de générer des SXG dynamiquement au lieu de les générer statiquement avant de les servir.

Option 1: installer le plugin à partir d'un paquet Debian

Les Module SXG pour nginx est distribué sur GitHub. Sur les systèmes basés sur Debian, vous pouvez l'installer sous forme de paquet binaire:

sudo apt installer -y nginx
wget https://github.com/google/nginx-sxg-module/releases/download/v0.1/libnginx-mod-http-sxg-filter_1.15.9-0ubuntu1.1_amd64.deb
sudo dpkg -i libnginx-mod-http-sxg-filter_1.15.9-0ubuntu1.1_amd64.deb

Option 2: compilez le plugin manuellement

Construire le nginx module nécessite le nginx code source. Puede obtener el tarball y construirlo junto con el módulo dinámico SXG usando los siguientes comandos:

git clone https://github.com/google/nginx-sxg-module
wget https://nginx.org/download/nginx-1.17.5.tar.gz
tar xvf nginx-1.17.5.tar.gz
CD nginx-1.17.5
./configure --prefix=/opt/nginx --add-dynamic-module=../nginx-sxg-module --without-http_rewrite_module --with-http_ssl_module
make
sudo make installer

Les nginx La configuration a une grande flexibilité. Installer sur PC nginx n'importe où sur votre système, puis spécifiez un chemin respectif de module / config / log / pidfile. Ce guide suppose que vous l'installez sur / opt / nginx.

Étape 4: configurer le nginx plugin pour travailler avec SXG

Option 1: configurer une installation depuis Debian nginx module

Suivez ces instructions si vous avez utilisé l'étape 3, option 1 ci-dessus.

La entrega de contenido SXG requiere HTTPS. Puede obtener un certificado SSL / TLS de DigiCert, Let’s Encrypt y otros servicios. Tenga en cuenta que NO PUEDE utilizar un certificado SXG para SSL o viceversa, por lo tanto, necesitará dos certificados. El archivo de configuración en /etc/nginx/nginx.conf cela devrait ressembler à ce qui suit, en supposant que vous ayez placé le certificat SSL / la paire de clés / chemin / vers / ssl / et la paire clé / certificat SXG dans / chemin / vers / sxg /:

user www-Les données;
inclure /etc/nginx/modules-enabled/*.conf;

événements {
worker_connections 768;
}

http {
inclure mime.les types;
default_type application/octet-flux;
add_header X-Contenu-Type-Options nosniff;

server {
Ecoutez 443 SSL;
ssl_certificate /path/à/SSL/fullchain.pem;
ssl_certificate_key /path/à/SSL/privkey.pem;
server_name site Internet.test;

sxg on;
sxg_certificate /path/à/sxg/mySxg.pem;
sxg_certificate_key /path/à/sxg/mySxg.clé;
sxg_cert_url https://site Internet.test/certs/cert.cbor;
sxg_validity_url https://site Internet.test/validity/Ressource.msg;
sxg_cert_path /certs/cert.cbor;

racine /var/www/html;
}
}

  • sxg_cert_url Il est essentiel pour les navigateurs de charger correctement SXG car il localise la chaîne de certificats. La chaîne de certificats contient des informations d'agrafage OCSP et de certificat au format cbor. Notez que vous n'avez pas besoin de cert.cbor archivo del mismo origen. Puede servirlo a través de cualquier CDN u otros servicios de servicio de archivos estáticos siempre que être compatible con HTTPS.
  • sxg_validitiy_url está previsto que sirva información relacionada con el encabezado de la firma SXG. Si una página no se ha modificado desde el último SXG, técnicamente no es necesario descargar el archivo SXG completo. Por lo tanto, se espera que la actualización de la información del encabezado de la firma por sí sola reduzca el circulation de red. Pero los detalles aún no están implementados.

Démarrer nginx Et vous êtes prêt à servir SXG!

sudo systemctl start nginx.service
boucle -H"Accept: application/signed-exchange;v=b3" https://website.test/ > indice.html.sxg
cat index.html.sxg
sxg1-b3...https://website.test/...(omit)

Option 2: configurer une police intégrée nginx module

Suivez ces instructions si vous avez utilisé l'étape 3, option 2 ci-dessus.

Configurez votre nginx système installé sous / opt / nginx pour ressembler à l'exemple suivant:

load_module "/opt/nginx/modules/ngx_http_sxg_filter_module.so";

événements {
worker_connections 768;
}

http {
inclure mime.les types;
default_type application/octet-flux;
add_header X-Contenu-Type-Options nosniff;

server {
Ecoutez 443 SSL;
ssl_certificate /path/à/SSL/fullchain.pem;
ssl_certificate_key /path/à/SSL/privkey.pem;
server_name example.com;

sxg on;
sxg_certificate /path/à/sxg/mySxg.pem;
sxg_certificate_key /path/à/sxg/mySxg.clé;
sxg_cert_url https://site Internet.test/certs/cert.cbor;
sxg_validity_url https://site Internet.test/validity/Ressource.msg;
sxg_cert_path /certs/cert.cbor;

racine /opt/nginx/html;
}
}

Puis commencez nginx. Vous pouvez maintenant obtenir votre SXG!

CD /opt/nginx/sbin
sudo ./nginx
boucle -H "Accept: application/signed-exchange;v=b3" https://website.test/ > index.html.sxg
less index.html.sxg
sxg1-b3...https://website.test/...(omit)

Étape 5: livrer le backend de votre application

Dans les exemples ci-dessus, nginx sirve archivos estáticos en el répertoire racine, pero puede usar directivas ascendentes para sus aplicaciones para hacer SXG para backends de aplicaciones web arbitrarias (como Ruby on Rails, Django o Express) siempre que su nginx fonctionne comme un serveur HTTP (S) frontal.

upstream appli {
server 127.0.0.1:8080;
}

server {
location / {
proxy_pass http://appli;
}
}

Étape 6: test

Utilisez le outil d'échange signé par vidage
para probar que los SXG que se sirven sean correctos, asegúrese de que no se notifiquen errores y verifique que los en-têtes y el cuerpo sean los esperados.

go get -u github.com/WICG/webpackage/go/signedexchange/cmd/dump-signedexchange
exportation PATH=$PATH:~/go/bin
dump-signedexchange -verify -uri https://website.test/ | less

Poster des commentaires

Les ingénieurs Chromium travaillant chez SXG sont impatients d'entendre vos commentaires à [email protected]. Vous pouvez également rejoindre le discussion sur les spécificationsou Signaler un bug à l'équipe. Vos commentaires seront d'une grande aide dans le processus de normalisation et aideront également à résoudre les problèmes de mise en œuvre. Merci!