So generieren Sie ein TLS-Zertifikat mit SXG-Erweiterungen, installieren Tools zum Generieren von SXG-Dateien und konfigurieren nginx für die Bereitstellung von SXG-Dateien.
Signierte HTTP-Börsen (SXG) es una nueva tecnología Netz que facilita a los usuarios diferenciar a los creadores de Inhalt de los distribuidores de contenido. Esta guía le muestra cómo configurar SXG.
Compatibilidad con varios Browser
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
Vom Ursprung signierter HTTP-Austausch
für die aktuellsten Informationen.
Voraussetzungen
Um SXG auf Ihrer Website zu implementieren, müssen Sie:
- Tenga control sobre su Domain, incluidas las entradas de DNS.
- Zertifikate erhalten. SXG erfordert die Ausstellung eines dedizierten Zertifikats. Insbesondere können Sie Ihren TLS-Schlüssel oder Ihr Zertifikat nicht wiederverwenden.
- Tenga un Server HTTP que pueda generar y servir SXG a través de HTTPS.
Annahmen
In diesem Handbuch wird davon ausgegangen, dass Sie:
- Haben Sie eine OpenSSL 1.1.1-Umgebung. Diese Anleitung wurde mit Ubuntu 18.04 LTS auf amd64 ISA geschrieben.
- Haben Sie die Fähigkeit zu rennen
sudo
um ausführbare Dateien zu installieren. - Benutzen
Nginx
als HTTP-Server. - Sie verwenden DigiCert, um Zertifikate zu generieren, die SXG-bezogene Erweiterungen enthalten, da es derzeit der einzige Anbieter zu sein scheint, der diese Erweiterungen unterstützt.
Bei den Beispielbefehlen in diesem Artikel wird außerdem davon ausgegangen, dass es sich bei Ihrer Domain um eine handelt website.test
, müssen Sie also ersetzen website.test
mit seiner königlichen Domäne.
Schritt 1: Holen Sie sich Ihr Zertifikat für SXG
Um SXG zu generieren, benötigen Sie ein TLS-Zertifikat mit dem CanSignHttpExchanges
Erweiterung sowie einen bestimmten Schlüsseltyp. DigiCert stellt Zertifikate mit dieser Erweiterung zur Verfügung. Sie benötigen eine CSR-Datei, um ein Zertifikat auszustellen. Generieren Sie es daher mit den folgenden Befehlen:
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"
Sie erhalten eine CSR-Datei, die folgendermaßen aussieht:
-----BEGIN CERTIFICATE REQUEST-----
MIHuMIGVAgEAMDMxDTALBgNVBAoMBFRlc3QxCzAJBgNVBAYTAlVTMRUwEwYDVQQD
DAx3ZWJzaXRlLnRlc3QwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAS7IVaeMvid
S5UO7BspzSe5eqT5Qk6X6dCggUiV/vyqQaFDjA/ALyTofgXpbCaksorPaDhdA+f9
APdHWkTbbdv1oAAwCgYIKoZIzj0EAwIDSAAwRQIhAIb7n7Kcc6Y6pU3vFr8SDNkB
kEadlVKNA24SVZ/hn3fjAiAS2tWXhYdJX6xjf2+DL/smB36MKbXg7VWy0K1tWmFi
Sg==
-----END CERTIFICATE REQUEST-----
Stellen Sie sicher, dass:
- Die Gültigkeitsdauer beträgt höchstens 90 Tage.
- das Fügen Sie die Erweiterung CanSignHttpExchanges in das Zertifikat ein Das Kontrollkästchen ist aktiviert und befindet sich unter Zusätzliche Zertifikatoptionen.

das Fügen Sie die Erweiterung CanSignHttpExchanges in das Zertifikat ein Box.
Wenn Ihr Zertifikat diese Bedingungen nicht erfüllt, lehnen Browser und Distributoren Ihr SXG aus Sicherheitsgründen ab. In diesem Handbuch wird davon ausgegangen, dass der Dateiname des von DigiCert erhaltenen Zertifikats lautet mySxg.pem
.
Schritt 2: Installieren libsxg
Das SXG-Format ist komplex und ohne Verwendung von Tools schwer zu generieren. Sie können eine der folgenden Optionen verwenden, um SXG zu generieren:
Dieser Leitfaden verwendet libsxg
.
Option 1: installieren libsxg
aus einem Debian-Paket
Sie können das Paket auf die übliche Debian-Weise installieren, solange OpenSSL (libssl-dev
) entspricht der Version.
sudo apt Installieren -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: bauen libsxg
von Hand
Wenn Sie keine Umgebung verwenden, die mit kompatibel ist .deb
Dateien können Sie erstellen libsxg
dich selber. Voraussetzung ist eine Installation 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 Installieren
Schritt 3: Installieren Nginx
Stecker
das Nginx
Mit dem Plugin können Sie SXG dynamisch generieren, anstatt es vor dem Serving statisch zu generieren.
Option 1: Installieren Sie das Plugin aus einem Debian-Paket
das SXG-Modul für Nginx
wird auf GitHub verteilt. Auf Debian-basierten Systemen können Sie es als Binärpaket installieren:
sudo apt Installieren -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: Kompilieren Sie das Plugin manuell
Aufbau der Nginx
Modul benötigt die Nginx
Quellcode. 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 Installieren
das Nginx
Die Konfiguration ist sehr flexibel. Auf dem PC installieren Nginx
Geben Sie dann an einer beliebigen Stelle auf Ihrem System einen entsprechenden Pfad von an Modul / config / log / pidfile
. In diesem Handbuch wird davon ausgegangen, dass Sie es installieren / opt / nginx
.
Schritt 4: Konfigurieren Sie die Nginx
Plugin für die Arbeit mit SXG
Option 1: Konfigurieren Sie eine Installation über Debian Nginx
Modul
Befolgen Sie diese Anweisungen, wenn Sie Schritt 3, Option 1 oben verwendet haben.
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
Es sollte wie folgt aussehen, vorausgesetzt, Sie geben das SSL-Zertifikat / Schlüssel-Paar ein / path / to / ssl /
und das SXG-Schlüssel / Zertifikat-Paar in / path / to / sxg /
:
user www-Daten;
einschließen /usw/Nginx/modules-enabled/*.conf;Veranstaltungen {
worker_connections 768;
}
http {
einschließen Mime.Typen;
default_type application/octet-Strom;
add_header X.-Inhalt-Type-Options nosniff;
server {
Hör mal zu 443 ssl;
ssl_certificate /path/zu/ssl/fullchain.pem;
ssl_certificate_key /path/zu/ssl/privkey.pem;
server_name Webseite.test;
sxg on;
sxg_certificate /path/zu/sxg/mySxg.pem;
sxg_certificate_key /path/zu/sxg/mySxg.Schlüssel;
sxg_cert_url https://Webseite.test/certs/cert.cbor;
sxg_validity_url https://Webseite.test/validity/Ressource.msg;
sxg_cert_path /certs/cert.cbor;
Wurzel /var/www/html;
}
}
sxg_cert_url
Für Browser ist es wichtig, SXG korrekt zu laden, da es die Zertifikatkette findet. Die Zertifikatkette enthält OCSP-Heft- und Zertifikatinformationen im cbor-Format. Beachten Sie, dass Sie nicht müssencert.cbor
archivo del mismo origen. Puede servirlo a través de cualquier CDN u otros servicios de servicio de archivos estáticos siempre que Sein 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 der Verkehr de red. Pero los detalles aún no están implementados.
Start Nginx
Und Sie sind bereit, SXG zu bedienen!
sudo systemctl start nginx.service
curl -H"Accept: application/signed-exchange;v=b3" https://website.test/ > Index.html.sxg
cat index.html.sxg
sxg1-b3...https://website.test/...(omit)
Option 2: Konfigurieren Sie eine eingebettete Schriftart Nginx
Modul
Befolgen Sie diese Anweisungen, wenn Sie Schritt 3, Option 2 oben verwendet haben.
Konfigurieren Sie Ihre Nginx
System installiert unter / opt / nginx
ähnlich wie im folgenden Beispiel aussehen:
load_module "/opt/nginx/modules/ngx_http_sxg_filter_module.so";Veranstaltungen {
worker_connections 768;
}
http {
einschließen Mime.Typen;
default_type application/octet-Strom;
add_header X.-Inhalt-Type-Options nosniff;
server {
Hör mal zu 443 ssl;
ssl_certificate /path/zu/ssl/fullchain.pem;
ssl_certificate_key /path/zu/ssl/privkey.pem;
server_name example.com;
sxg on;
sxg_certificate /path/zu/sxg/mySxg.pem;
sxg_certificate_key /path/zu/sxg/mySxg.Schlüssel;
sxg_cert_url https://Webseite.test/certs/cert.cbor;
sxg_validity_url https://Webseite.test/validity/Ressource.msg;
sxg_cert_path /certs/cert.cbor;
Wurzel /opt/Nginx/html;
}
}
Dann fang an Nginx
. Jetzt können Sie Ihre SXG bekommen!
CD /opt/nginx/sbin
sudo ./nginx
curl -H "Accept: application/signed-exchange;v=b3" https://website.test/ > index.html.sxg
less index.html.sxg
sxg1-b3...https://website.test/...(omit)
Schritt 5: Stellen Sie Ihr Anwendungs-Backend bereit
In den obigen Beispielen Nginx
sirve archivos estáticos en el Wurzelverzeichnis, 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
arbeitet als Front-End-HTTP (S) -Server.
upstream App {
server 127.0.0.1:8080;
}server {
location / {
proxy_pass http://App;
}
}
Schritt 6: Testen
Verwenden Sie die Dump-Signedexchange-Tool
para probar que los SXG que se sirven sean correctos, asegúrese de que no se notifiquen errores y verifique que los Überschriften y el cuerpo sean los esperados.
go get -u github.com/WICG/webpackage/go/signedexchange/cmd/dump-signedexchange
Export PATH=$PATH:~/go/bin
dump-signedexchange -verify -uri https://website.test/ | less
Kommentar schreiben
Chromium-Ingenieure, die bei SXG arbeiten, freuen sich über Ihr Feedback unter [email protected]. Sie können sich auch dem anschließen Spezifikationsdiskussionoder Melde einen technischen Fehler an das Team. Ihr Feedback ist eine große Hilfe im Standardisierungsprozess und hilft auch bei der Lösung von Implementierungsproblemen. Vielen Dank!