lunes, 16 de marzo de 2015

Añadiendo soporte SSL a Varnish Cache

 Varnish Cache es un proxy caché inverso que tiene como función principal acelerar el acceso a páginas web.

La principal carencia que tiene es, seguramente, la ausencia de soporte para conexiones SSL. Vamos a ver como podemos solucionarlo fácilmente.

La solución pasa por nginx, un servidor web ligero de alto rendimiento.

En primer lugar instalamos nginx. Supongo que quien ya haya instalado Varnish no debe tener ningún problema en hacerlo.

Una vez instalado vamos a configurarlo para que atienda las conexiones SSL y las pase a Varnish a través de una conexión no-segura. Para ello hemos de editar el fichero de configuración, probablemente /etc/nginx/conf.d/default.conf, para dejarlo así:

server {
        listen 443 ssl;

        ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 ECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH EDH+aRSA DES-CBC3-SHA EDH-DSS-DES-CBC3-SHA !RC4 !aNULL !eNULL !LOW !MD5 !EXP !PSK !SRP !DSS";
ssl_prefer_server_ciphers on;
        ssl_session_cache shared:SSL:15m;
        
        server_name www.midominio.com;
        ssl_certificate /etc/nginx/ssl/server.crt;
        ssl_certificate_key /etc/nginx/ssl/server.key;
        location / {
            proxy_pass http://127.0.0.1:80;
            proxy_set_header X-Real-IP  $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto https;
            proxy_set_header X-Forwarded-Port 443;
            proxy_set_header Host $host;
        }

}

Solo hay que cambiar el nombre del dominio por el indicado, y el puerto indicado en proxy_pass en caso de que sea distinto al 80.

Por último es necesario copiar los ficheros de los certificados en /etc/nginx/ssl.

Al arrancar o reiniciar nginx ya tendremos soporte para SSL. Así de fácil.

Notas

Si el certificado necesita un certificado intermedio es necesario concatenar los dos certificado en uno. Ejemplo:

cat www.example.com.crt bundle.crt > www.example.com.chained.crt

Es conveniente probar que todo funciona correctamente en alguna de estas webs: SSLShopperQualys SSL LABS.

No hay comentarios:

Publicar un comentario