SSL ha muerto, larga vida a TLS

por | febrero 18, 2015

Todo llega a su fin… y si no que le pregunten a Internet Explorer 6. De todas formas, ya hacía tiempo que SSL (Secure Sockets Layer)no se consideraba un protocolo seguro de comunicaciones (vulnerabilidades como POODLE en SSL versión 3 o que SSL versión 2 utilizara MD5 para los mensajes de autenticación), y se recomendaba configurar en la medida de lo posible TLS (Transport Layer Security) en todos los servicios que hicieran uso de él. Ahora, después del comunicado del PCI Security Standards Council ya le han dado el golpe de gracia por lo que más vale que vayamos poniendo todo al día si no lo teníamos ya.

Para deshabilitar SSL y aceptar únicamente TLS en el caso de servidores web Apache tendréis que incluir las siguientes directivas en el fichero de configuración correspondiente, ya que varía de una distribución a otra. Por ejemplo en un CentOS las pondríamos en /etc/httpd/conf.d/ssl.conf:

SSLProtocol all -SSLv2 -SSLv3

Además podemos especificar que nuestro servidor utilice únicamente suites de cifrado fuerte

SSLCipherSuite HIGH:!aNULL:!MD5
SSLCompression Off

Sin embargo, por cuestiones de retrocompatibilidad con navegadores y sistemas más antiguos lo que se suele hacer es especificar un orden «deseable» de utilización de suites de cifrado:

SSLHonorCipherOrder On
SSLCipherSuite ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5
SSLCompression Off

Una vez realizados estos sencillos cambios, reiniciamos el servicio, que tradicionalmente hacemos en Red Hat o derivada con:

service httpd restart

O bien, normalmente cuando estamos en Debian o derivada:

service apache2 restart

Si lo que utilizamos es un Nginx, que últimamente está muy de moda especialmente para sitios web que utilicen WordPress, los cambios los realizaremos en el fichero de configuración correspondiente que suele ser /etc/nginx/nginx.conf:

ssl_prefer_server_ciphers On;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5;

Después reiniciamos servicio:

service nginx restart

Como véis no difieren demasiado las opciones de un servidor web a otro. También resaltar que aquí he hablado a modo de ejemplo de Apache y Nginx, pero se deben tener en cuenta también servidores web como Internet Information Services de Microsoft o lighttpd que implementen comunicaciones seguras por HTTPS. Los servidores de aplicaciones como Tomcat, Jboss o Weblogic deberán ser securizados igualmente, así como cualquier software adicional que en el mismo orden de cosas hiciera uso del ya obsoleto protocolo SSL.