OCSP stapling en Nginx con StartSSL

Viernes 19 de febrero de 2016, por Aitor Roma Vázquez

En este pequeño howto veremos como mejorar el rendimiento de SSL y como mejorar la seguridad de los certificados y prevención de algunos ataques derivados de SSL.

  1. Configuraremos OCS Stapling
  2. Nos protegeremos del ataque Logjam
  3. Evitar Poodle Attack
  4. Configuraremos SSL Cyphers
  5. Acelerar el protocolo SSL con Spdy
  6. Comprobar resultado en SSLabs

Lo haremos de la forma más fácil para que tan solo tengáis de copiar pegar la configuración para conseguir A+ en SSLabs.

Configuración de OCSP Stapling

Stapling o grapado del inglés es una técnica utilizada en servidores web que utilizan el protocolo SSL el Stapling tiene como beneficios un aumento de la privacidad de los usuarios y una mejora en la latencia del protocolo SSL ya que no tiene de realizar cada vez que se conecta un usuario una consulta OCSP ( Online Certificate Status Protocol )

# mkdir /etc/nginx/certs
# wget -O - https://www.startssl.com/certs/ca.pem https://www.startssl.com/certs/sub.class1.server.ca.pem | tee -a /etc/nginx/certs/startssl.stapling.pem > /dev/null

Si sigues estos pasos al final del Articulo adjuntare el bloque que debéis pegar en nginx.conf

Protección contra Logjam

LogJam es un ataque que explota una vulnerabilidad en el intercambio de claves Diffie-Hellman, un algoritmo utilizado para establecer conexiones seguras entre dos partes. Dicho ataque permite a un tercero interceptar datos de la conexión.

Siguiendo estos pasos estaremos a salvo de este ataque.

# cd /etc/nginx/certs
# openssl dhparam -out dhparams.pem 2048
# chmod 600  dhparams.pem

Evitar Poodle Attack

Poodle Attack (Padding Oracle On Downgraded Legacy Encryption)
Es un ataque que permite interceptar datos en una comunicación SSL como el ataque man in the midle.

Para solucionar el problema tan solo tendremos de borrar alguna entrada referente a la versión 3 de TLS en la directiva ssl_protocol de nginx.conf

Configuración en Nginx

Por ultimo para acabar con toda la configuración y que se apliquen todos los pasos realizados con anterioridad tan solo tenemos de borrar de /etc/nginx/nginx.conf
todo lo referente a ssl y dejarlo así.

ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_dhparam /etc/nginx/certs/dhparams.pem;
ssl_session_cache shared:SSL:10m;
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
#add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
ssl_session_tickets off; # Requires nginx >= 1.5.9
ssl_stapling on; # Requires nginx >= 1.3.7
ssl_stapling_verify on; # Requires nginx => 1.3.7
ssl_trusted_certificate    /etc/nginx/certs/startssl.stapling.pem;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;

Acelerar protocolo SSL con Spdy

Spdy es una reimplementación del protocolo SSL realizada por Google y que ya viene soportada en las ultimas versiones de Nginx. Spdy permite hacer varias peticiones de forma concurrente acelerando la velocidad de carga de SSL también envía menos paquetes pero estos son de mayor densidad ahorrando así el número de peticiones al servidor. Además comprime las cabeceras y elimina las innecesarias.

Para utilizar spdy puedes utilizar lo siguiente en el virtualhost de nginx

listen              198.50.238.53:443 ssl spdy;

En este ejemplo aparece la ip del servidor tendrías de cambiar por la vuestra.

Por ultimo no debemos olvidarnos de realizar un restart de nginx para que los cambios surjan efecto

# service nginx restart

Comprobar resultado en SSLabs

Una vez realizados todos los pasos, es el momento de probar que todo a funcionado y de sentirnos orgullosos de nuestro servidor. para ello iremos a https://www.ssllabs.com/ssltest/ introducimos la url de nuestro servidor y pasado un buen rato que dura el test nos encontraremos con una bonita pantalla así

Eso es todo!

Comentar este artículo