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.

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
, 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 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 quecert.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!