Saltar al contenido principal




Cómo generar un certificado TLS con extensiones SXG, instalar herramientas para generar archivos SXG y configurar nginx para servir archivos SXG.

Intercambios HTTP firmados (SXG) es una nueva tecnología web que facilita a los usuarios diferenciar a los creadores de contenido de los distribuidores de contenido. Esta guía le muestra cómo configurar SXG.

Compatibilidad con varios navegadores

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
Intercambios HTTP firmados por el origen
para obtener información más actualizada.

Prerrequisitos

Para implementar SXG en su sitio web, debe:

  • Tenga control sobre su dominio, incluidas las entradas de DNS.
  • Obtenga certificados. SXG requiere la emisión de un certificado dedicado. En particular, no puede reutilizar su clave o certificado TLS.
  • Tenga un servidor HTTP que pueda generar y servir SXG a través de HTTPS.

Supuestos

Esta guía asume que usted:

  • Tener un entorno OpenSSL 1.1.1. Esta guía se escribió con Ubuntu 18.04 LTS en amd64 ISA.
  • Tener la capacidad de correr sudo para instalar ejecutables.
  • Utilizar nginx como servidor HTTP.
  • Están utilizando DigiCert para generar certificados que incluyen extensiones relacionadas con SXG, porque actualmente parece ser el único proveedor que admite estas extensiones.

Además, los comandos de ejemplo de este artículo asumen que su dominio es website.test, por lo que deberá reemplazar website.test con su dominio real.

Paso 1: obtenga su certificado para SXG

Para generar SXG, necesita un certificado TLS con el CanSignHttpExchanges extensión, así como un tipo de clave particular. DigiCert proporciona certificados con esta extensión. Necesita un archivo CSR para la emisión de un certificado, así que generelo con los siguientes comandos:

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"

Obtendrá un archivo CSR con el siguiente aspecto:

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

Asegúrate de eso:

  • El período de validez no supera los 90 días.
  • los Incluya la extensión CanSignHttpExchanges en el certificado La casilla de verificación está habilitada, que se encuentra en Opciones de certificado adicionales.
sxg-check-6467115

los Incluya la extensión CanSignHttpExchanges en el certificado caja.

Si su certificado no cumple estas condiciones, los navegadores y distribuidores rechazarán su SXG por razones de seguridad. Esta guía asume que el nombre de archivo del certificado que obtuvo de DigiCert es mySxg.pem.

Paso 2: instalar libsxg

El formato SXG es complejo y difícil de generar sin utilizar herramientas. Puede utilizar una de las siguientes opciones para generar SXG:

Esta guía utiliza libsxg.

Opción 1: instalar libsxg desde un paquete Debian

Puede instalar el paquete de la forma habitual de Debian, siempre que OpenSSL (libssl-dev) coincide con la versión.

sudo apt install -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

Opción 2: construir libsxg a mano

Si no está utilizando un entorno compatible con .deb archivos, puedes construir libsxg usted mismo. Como condición previa, debe instalar 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 install

Paso 3: instalar nginx enchufar

los nginx El complemento le permite generar SXG dinámicamente en lugar de generarlos estáticamente antes de servir.

Opción 1: instalar el complemento desde un paquete Debian

los Módulo SXG para nginx se distribuye en GitHub. En sistemas basados ​​en Debian, puede instalarlo como un paquete binario:

sudo apt install -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

Opción 2: compila el complemento manualmente

Construyendo el nginx módulo requiere el nginx código fuente. 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 install

los nginx La configuración tiene una gran flexibilidad. Instalar en pc nginx en cualquier lugar de su sistema, luego especifique una ruta respectiva de module/config/log/pidfile. Esta guía asume que la instala en /opt/nginx.

Paso 4: configurar el nginx complemento para trabajar con SXG

Opción 1: configurar una instalación desde Debian nginx módulo

Siga estas instrucciones si utilizó el Paso 3, Opción 1 anteriormente.

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 debería tener un aspecto similar al siguiente, suponiendo que coloque el par de clave / certificado SSL en /path/to/ssl/ y el par de clave / certificado SXG en /path/to/sxg/:

user www-data;
include /etc/nginx/modules-enabled/*.conf;

events {
worker_connections 768;
}

http {
include mime.types;
default_type application/octet-stream;
add_header X-Content-Type-Options nosniff;

server {
listen 443 ssl;
ssl_certificate /path/to/ssl/fullchain.pem;
ssl_certificate_key /path/to/ssl/privkey.pem;
server_name website.test;

sxg on;
sxg_certificate /path/to/sxg/mySxg.pem;
sxg_certificate_key /path/to/sxg/mySxg.key;
sxg_cert_url https://website.test/certs/cert.cbor;
sxg_validity_url https://website.test/validity/resource.msg;
sxg_cert_path /certs/cert.cbor;

root /var/www/html;
}
}

  • sxg_cert_url Es esencial para que los navegadores carguen SXG correctamente porque ubica la cadena de certificados. La cadena de certificados contiene información de certificado y grapado OCSP con formato cbor. Tenga en cuenta que no es necesario que 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 sea 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 tráfico de red. Pero los detalles aún no están implementados.

comienzo nginx ¡y estás listo para servir a SXG!

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)

Opción 2: configurar una fuente integrada nginx módulo

Siga estas instrucciones si utilizó el Paso 3, Opción 2 anteriormente.

Configura tu nginx sistema instalado bajo /opt/nginx para parecer similar al siguiente ejemplo:

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

events {
worker_connections 768;
}

http {
include mime.types;
default_type application/octet-stream;
add_header X-Content-Type-Options nosniff;

server {
listen 443 ssl;
ssl_certificate /path/to/ssl/fullchain.pem;
ssl_certificate_key /path/to/ssl/privkey.pem;
server_name example.com;

sxg on;
sxg_certificate /path/to/sxg/mySxg.pem;
sxg_certificate_key /path/to/sxg/mySxg.key;
sxg_cert_url https://website.test/certs/cert.cbor;
sxg_validity_url https://website.test/validity/resource.msg;
sxg_cert_path /certs/cert.cbor;

root /opt/nginx/html;
}
}

Entonces empezar nginx. ¡Ahora puedes obtener tu SXG!

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)

Paso 5: entrega el backend de tu aplicación

En los ejemplos anteriores, nginx sirve archivos estáticos en el directorio raíz, 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 funciona como un servidor HTTP (S) frontal.

upstream app {
server 127.0.0.1:8080;
}

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

Paso 6: prueba

Utilizar el herramienta dump-signedexchange
para probar que los SXG que se sirven sean correctos, asegúrese de que no se notifiquen errores y verifique que los encabezados 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

Enviar comentarios

Los ingenieros de Chromium que trabajan en SXG están ansiosos por escuchar sus comentarios en [email protected]. También puedes unirte al discusión de especificacioneso Reportar un error al equipo. Sus comentarios serán de gran ayuda en el proceso de estandarización y también ayudarán a abordar los problemas de implementación. ¡Gracias!