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.

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
, openssl
y 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 decert.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!