Hablando con un compañero, sobre servir una web institucional mediante HTTP o HTTPS, hemos tenido un interesante intercambio de opiniones (vale, sólo han sido tres correos). Mi idea es que si no hay información sensible de ser robada mejor no usar HTTPS por:
- que ciertos proxies y sistemas de cacheado de datos no trabajaban bien con TLS/SSL
- se incrementa el esfuerzo del servidor para cifrar las peticiones a todos los recursos que se sirven con una página web (imágenes, hojas de estilo, ficheros javascript, documentos html, etc)
Como notáis por mis argumentos no soy un experto en TLS/SSL pero, como hablar es gratis, sigamos 🙂 Con esto en mente hubiera desplegado la web con HTTP pero mi compañero no, el opta por HTTPS. Para apoyar su idea me manda un interesante enlace «Should All Web Traffic Be Encrypted?» [1], en Codinghorror, donde se plantea este mismo tema. Con la ayuda de algunas de las referencias que en él se indican mis dos argumetos pierden fuerza.
En los comentarios de «Chrome’s 10 Caches» [2] indican dos referencias «HTTPS Caching and Internet Explorer» [3] y «Should cache SSL content to disk even without Cache-Control: public» [4] donde hablan sobre el compartamiento de los naveadores ante el cacheado de elementos cifrados.
En Internet Explorer [3]:
WinINET will not reuse a previously-cached resource delivered over HTTPS until at least one secure connection to the target host has been established by the current process Es decir: la primera vez que solicitemos el recurso no se cachea pero las siguientes sí, mientras no cerremos el navegador (o eso he entendido).
En Firefox [4]:
Currently, Firefox only caches SSL content to disk if it was sent with Cache-Control: public. On the other hand, IE and Chrome cache SSL content even without that header. And this header was not designed to affect client caches (only proxies).
The reason why I implemented it this way was to avoid caching secure content to disk without an explicit hint that this is OK to do so, but considering that especially IE doesn’t require this header, it seems OK to remove this requirement.
De lo que entiendo que Firefox cachea todos los recursos HTTPS a menos que se añada la cabecera «cache-control: no-store».
En Chrome [2]:
Caches SSL sessions to disk. This saves several round trips of negotiation when connecting to HTTPS pages by allowing the connection to skip directly to the encrypted stream
Con esto se viene abajo mi idea del no cacheado de los recursos cifrados 🙁 aunque habría que ver cómo se comportan los sistemas de cacheado como Varnish ante el tráfico cifrado [7] En el tema del incremento de trabajo en los procesadores del servidor leo en «SSL FalseStart Performance Results» [5] que, ya desde 2011 (por Dios qué atrasado estoy en el tema!!), hay un método para reducir el tiempo de intercambio de claves durante el proceso de cifrado de las comunicaciones llamado «Transport Layer Security (TLS) False Start» [6].
Con todo lo leido y aprendido sigo pensando lo mismo: a pesar de las mejoras en los navegadores, con el cacheado de los recursos, y en el propio mecanismo de cifrado estoy de acuerdo con el comentario final del artículo con el que comenzamos [1]:
Maybe not tomorrow, maybe not next year, but over the medium to long term, adopting encrypted web connections as a standard for logged-in users is the healthiest direction for the future of the web. We need to work toward making HTTPS easier, faster, and most of all, the default for logged in users.
O en castellano: para sitios web donde los usuarios tengan que logearse el tráfico HTTPS debiera ser obligatorio. A lo que añado: para aquellos que no haya identificación de usuarios es mejor usar HTTP.
[1] Should All Web Traffic Be Encrypted?: http://www.codinghorror.com/blog/2012/02/should-all-web-traffic-be-encrypted.html
[2] Chrome’s 10 Caches: http://gent.ilcore.com/2011/02/chromes-10-caches.html?showComment=1297102528799#c5411401837359385517
[3] HTTPS Caching and Internet Explorer: http://blogs.msdn.com/b/ieinternals/archive/2010/04/21/internet-explorer-may-bypass-cache-for-cross-domain-https-content.aspx
[4] Should cache SSL content to disk even without Cache-Control: public: https://bugzilla.mozilla.org/show_bug.cgi?id=531801#c19
[5] SSL FalseStart Performance Results: http://blog.chromium.org/2011/05/ssl-falsestart-performance-results.html
[6] Transport Layer Security (TLS) False Start: https://tools.ietf.org/html/draft-bmoeller-tls-falsestart-00
[7] Varnish no soporta SSL: https://www.varnish-cache.org/docs/trunk/phk/ssl.html