Última revisión: 20 de diciembre de 2021
Versiones de SSL y TLS
Los sistemas de cifrado SSL (Secure Sockets Layer) y TLS (Transport Layer Security) añaden una capa en la que la información entre dos puntos va cifrada. Esto hace que si alguien intercepta las comunicaciones tenga más difícil saber sus contenidos, ya que necesitará la clave para descifrar la información. Esta es una razón por la que si quieres mejorar la seguridad de tu WordPress deberías tener todo el sitio bajo un certificado.
En Europa, por defecto, debería ser obligatorio en todo sitio web debido al RGPD (Reglamento General de Protección de Datos).
Existen muchas versiones de estos sistemas de cifrado:
- SSL 1.0 nunca llegó a ver la luz.
- SSL 2.0 lanzado en 1995 y válido hasta 2014, que quedó obsoleto.
- SSL 3.0 lanzado en 1996 y válido hasta 2015 tras la aparición de POODLE (un fallo de seguridad muy grande que afectaba a todas las versiones de SSL).
- TLS 1.0 (RFC 2246) se consideraba una evolución de SSL 3.0 para ser compatibles. En junio de 2018 se recomendó subir a TLS 1.1.
- TLS 1.1 (RFC 4346) incluía, principalmente, mejoras sobre los ataques CBC (Cipher Block Chaining). Apple, Google, Microsoft y Mozilla dejaron de darle soporte en marzo de 2020.
- TLS 1.2 (RFC 5216) lanzado en 2008 incluye unas cuantas mejoras y posteriormente los TLS dejas de ser compatible con SSL (RFC 6176).
- TLS 1.3 (RFC 8446) lanzado en agosto de 2018 y es la versión que incluye más cambios de todas las versiones en cuanto a seguridad.
Hoy en día, gracias al lanzamiento de OpenSSL 1.1.1 que da soporte a TLS 1.3, todos los sitios web deberían intentar usar esta versión del sistema. Si no se dispone de esta versión, se debe utilizar el TLS 1.2.
Si quieres analizar la versión y seguridad de tu sitio según sus certificados, puedes usar la herramienta de SSL Labs.
Gratuito vs. Pago
En los últimos tiempos se ha extendido el uso de certificados TLS gratuitos. Desde el punto de vista técnico no hay ninguna diferencia con los certificados de pago, aunque habitualmente los gratuitos se han de renovar cada 3 meses, y los de pago cada año.
Un certificado de pago suele ir asociado con un seguro de entre $10.000 y $250.000. Este seguro viene dado por si se rompe el cifrado que hay entre el servidor y el navegador del usuario.
En la mayoría de casos, a menos que gestiones información altamente sensible, no sería necesario el uso de un certificado de pago.
Creación de un certificado Let’s Encrypt
Un ejemplo para generar los certificados con validación de ficheros es:
certbot certonly --authenticator webroot -d example.com,www.example.com --webroot-path /webs/example.com/ --cert-name example.com
Configuración para Apache HTTPD
Una configuración para Apache HTTPD puede ser similar a la siguiente:
<VirtualHost *:443>
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/example.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
SSLProtocol All -SSLv2 -SSLv3 -TLSv1
BrowserMatch "MSIE [2-6]" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0
BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown
Configuración para nginx
Una configuración para nginx puede ser similar a la siguiente:
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
# SSL
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
ssl_session_cache shared:example:15m;
ssl_session_timeout 720m;
ssl_session_tickets off;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers off;
ssl_ciphers "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384";
# SSL OCSP Stapling
ssl_stapling on;
ssl_stapling_verify on;
resolver 9.9.9.9 8.8.8.8 valid=300s;
resolver_timeout 2s;