Intercambios HTTP firmados

Knuko Yasuda

El intercambio HTTP firmado (o "SXG") es un subconjunto de la tecnología emergente llamado Paquetes web, que permite a los publicadores hacer que su contenido sea portátil de forma segura, es decir, esté disponible para que otras partes lo redistribuyan, sin dejar de mantener la integridad y la atribución del contenido. El contenido portátil tiene muchos beneficios, desde permitir una entrega más rápida de contenido hasta facilitar el uso compartido de contenido entre usuarios y experiencias sin conexión más simples.

Entonces, ¿cómo funcionan los intercambios HTTP firmados? Esta tecnología permite a un publicador firmar un único intercambio de HTTP (es decir, un par de solicitud/respuesta), de la manera en que el intercambio firmado se puede entregar desde cualquier servidor de almacenamiento en caché. Cuando el navegador carga este intercambio firmado, puede mostrar de forma segura la URL del editor en la barra de direcciones porque la firma del intercambio es prueba suficiente de que el contenido proviene originalmente del origen del editor.

Intercambio firmado: la esencia

Esto separa el origen del contenido del que lo distribuye. Tu contenido se puede publicar en la Web sin depender de un servidor, una conexión o un servicio de hosting específicos. Nos entusiasman los posibles usos de SXG, como los siguientes:

  • Carga previa que preserva la privacidad: Si bien realiza una carga previa de los recursos (p.ej., mediante vínculo rel=prefetch) para una navegación posterior, puede hacer que la navegación parezca mucho más rápida, también presenta desventajas de privacidad. Por ejemplo, la carga previa de recursos para navegaciones de origen cruzado divulgará al sitio de destino que el usuario podría estar interesado en algún dato, incluso si al final no lo visitó. Por otro lado, SXG permite realizar una carga previa de recursos de origen cruzado desde una caché rápida sin llegar al sitio de destino, lo que solo comunica el interés del usuario si se produce la navegación. Creemos que esto puede ser útil para los sitios cuyo objetivo es enviar a los usuarios a otros sitios web. En particular, Google planea usar esta función en las páginas de resultados de la Búsqueda de Google para mejorar las URLs de AMP y acelerar los clics en los resultados de la búsqueda.

  • Beneficios de una CDN sin ceder el control de la clave privada del certificado: El contenido que de repente se volvió popular (p. ej., un vínculo desde la primera página de reddit.com) a menudo sobrecarga el sitio donde se entrega el contenido. Si el sitio es relativamente pequeño, tiende a ralentizarse o incluso a dejar de estar disponible temporalmente. Esta situación se puede evitar si el contenido se comparte mediante servidores de caché rápidos y potentes, y SXG hace que esto sea posible sin compartir tus claves TLS.

Cómo probar intercambios firmados

Los intercambios firmados están disponibles en Chrome 73 y versiones posteriores, y anteriormente estaban disponibles como una prueba de origen.

Crea tu SXG

Si quieres crear SXG para tu origen (como publicador), necesitas una clave de certificado a fin de firmar la firma, y el certificado debe tener una extensión"CanSignHttpExchanges" especial para que se procese como un SXG válido. Desde noviembre de 2018, DigiCert es la única AC que admite esta extensión, y puedes solicitar el certificado compatible con SXG en esta página.

Una vez que obtengas un certificado para SXG, podrás crear tus propios SXG mediante las herramientas del generador de referencias publicadas en GitHub.

También puedes consultar los archivos de ejemplo de SXG reales en el repositorio de código de Chrome (p.ej., este es el más simple creado para un archivo de texto simple). Ten en cuenta que se generan principalmente para pruebas locales; no esperes que tengan certificados y marcas de tiempo válidos en la firma.

Cómo probar la función de forma local

Si deseas crear SXG con fines de prueba, puedes crear un certificado autofirmado y habilitar chrome://flags/#allow-sxg-certs-without-extension para que Chrome procese los SXG que se crearon con el certificado sin la extensión especial.

Un código como el siguiente debería funcionar si tu servidor, certificado y SXG están configurados correctamente:

<!-- prefetch the sample.sxg -->
<link rel="prefetch" href="https://your-site.com/sample.sxg" />

<!-- clicking the link below should make Chrome navigate to the inner
     response of sample.sxg (and the prefetched SXG is used) -->
<a href="https://your-site.com/sample.sxg">Sample</a>

Ten en cuenta que SXG solo es compatible con la etiqueta de anclaje (<a>) y link rel=prefetch en Chrome 73 y versiones posteriores. Además, ten en cuenta que la validez de la firma se limita a 7 días por especificación, por lo que el contenido firmado vencerá relativamente rápido.

Cómo hacer comentarios

Nos gustaría recibir tus comentarios sobre este experimento en webpackage-dev@chromium.org. También puedes unirte a la conversación sobre las especificaciones o informar un error de Chrome al equipo. Tus comentarios serán de gran ayuda para el proceso de estandarización y nos ayudarán a resolver los problemas de implementación.

Comentarios