HTTPS con Let's Encrypt
Con el cambio de año se ha actualizado nuestra infraestructura web para ofrecer HTTPS utilizando certificados digitales generados por Let's Encrypt.
Hasta ahora nuestros servidores web ofrecían HTTPS utilizando certificados digitales autogenerados, es decir, generados por nosotros mismos. De modo que los navegadores advertían en el primer acceso que se iba a utilizar un certificado digital emitido por una autoridad de certificación no reconocida.
Con un certificado digital autogenerado se puede utilizar el mismo algoritmo de cifrado que con uno generado por una autoridad de certificación reconocida. Pero el usuario de la web puede alarmarse cuando el navegador, en lugar de el habitual candado verde que identifica a las conexiones seguras, le muestra una advertencia preguntando si realmente está seguro de que quiere acceder a esta web. O cualquier otro software de seguridad, incluso el antivirus, le advierte de que si accede a esta web puede ser víctima de un ataque. Lo que no resulta nada tranquilizador.
Let's Encrypt es una nueva autoridad de certificación reconocida por los navegadores que permite obtener certificados digitales de manera automática y gratuita. Sus fundadores son Electronic Frontier Foundation, Mozilla Foundation y la Universidad de Michigan. Y su objetivo es extender el uso de HTTPS para mejorar la seguridad en la web.
Gracias a Let's Encrypt se ha podido montar un nuevo TLS termination proxy que recibe todas las conexiones HTTPS a nuestros dominios utilizando certificados que no generan ninguna alerta en el navegador del usuario.
Además, allí donde ha sido posible se ha implementado una redirección de HTTP a HTTPS para garantizar que los enlaces a contenido HTTP se sirven mediante la versión segura.
Por ejempo, para el caso de la web del centro el VirtualHost HTTP de Apache se ha convertido en una redirección permanente a la versión HTTPS:
# elpuig.xeill.net
<VirtualHost *:80>
ServerName elpuig.xeill.net
Redirect permanent / https://elpuig.xeill.net/
<Location />
Order Deny,Allow
Allow from all
</Location>
</VirtualHost>
Y el VirtualHost HTTPS actúa como proxy terminador TLS del servidor que ejecuta el gestor de contenidos utilizado, Plone. Además, en este caso se ha configurado una política de seguridad HSTS para indicar al navegador que en el futuro debe interactuar únicamente utilizando la versión segura de la web.
# elpuig.xeill.net
# ver: http://docs.plone.org/manage/deploying/front-end/apache.html
<VirtualHost *:443>
ServerName elpuig.xeill.net
ServerSignature On
SSLEngine On
SSLCertificateFile /etc/letsencrypt/live/elpuig.xeill.net-0001/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/elpuig.xeill.net-0001/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/elpuig.xeill.net-0001/chain.pem
Header set X-Frame-Options "SAMEORIGIN"
Header set Strict-Transport-Security "max-age=15768000"
Header set X-XSS-Protection "1; mode=block"
Header set X-Content-Type-Options "nosniff"
Header set Content-Security-Policy-Report-Only "default-src 'self'; img-src *; style-src 'unsafe-inline'; script-src 'unsafe-inline' 'unsafe-eval'"
ProxyVia On
# prevent your web server from being used as global HTTP proxy
<LocationMatch "^[^/]">
Deny from all
</LocationMatch>
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
RewriteEngine On
RewriteRule ^/(.*) http://192.168.0.105:8081/VirtualHostBase/https/%{HTTP_HOST}:443/elpuig/VirtualHostRoot/$1 [L,P]
<Location />
Order Deny,Allow
Allow from all
</Location>
</VirtualHost>
Lo que permite que al comprobar en SSLLabs nuestro servidor se obtenga una buena valoración:
Así, algunas de las webs mantenidas por el centro que se han beneficiado del cambio son: