Configurando HTTPS en servidores Apache en CentOS
El cifrado de las comunicaciones es imprescindible para evitar que nadie pueda ver los datos que se envían entre cliente y servidor, especialmente si entre estos datos se envía información sensible como contraseñas. Por esto, en este post se explica de forma breve como configurar HTTPS en un servidor Apache de forma gratuita gracias a Let’s Encrypt.
En primer lugar vamos a ver que es una autoridad de certificación(Certification Authority o CA) y un certificado digital. Una autoridad de certificación es un entidad de confianza que emite y revoca certificados digitales, estos certificados son reconocidos por los navegadores web u otros clientes/servicios y se usan para verificar la identidad del servicio o del recurso consultado. Estas son un elemento básico en una infraestructura de clave pública o PKI ya que aseguran que la clave pública de un usuario es realmente suya.
Tras esta introducción vamos a pasar a generar los certificados digitales que después configuraremos en el servidor. Para esto usaremos el cliente recomendado por Let’s Encrypt certbot.
Para CentOS , debido a que algunas dependencias de certbot no están disponibles en los repositorios estándar, deberemos habilitar el repositorio EPEL:
yum install epel-release
Descargamos certbot-auto:
wget https://dl.eff.org/certbot-auto
Damos permisos de ejecución:
chmod a+x certbot-auto
Solicitamos los certificados, en este ejemplo utilizamos el plugin webroot indicando el directorio root desde el cual se sirven los ficheros de nuestro servidor web (/var/www/html) y solicitamos un certificado para los dominios: dominio.com y www.dominio.com.
./path/to/certbot-auto certonly --webroot -w /var/www/html/ -d dominio.com -d www.dominio.com
Utilizando el plugin webroot no se parará el servidor web y seremos nosotros los encargados de modificar los ficheros para aplicar la configuración y reiniciar el servidor. certbot-auto ofrece una serie de plugins que son capaces de modificar la configuración y realizar el reinicio de forma automática.
Una vez obtenidos los certificados los tendremos que configurar en nuestro servidor web. El servidor Apache deberá tener instalado el módulo mod_ssl. Para instalarlo ejecutamos:
yum install mod_ssl
Procedemos a editar el fichero /etc/httpd/conf.d/ssl.conf para añadir los certificados:
SSLCertificateFile /etc/letsencrypt/live/dominio.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/dominio.com/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/dominio.com/chain.pem
Además, recomiendo aplicar la siguiente configuración para poder conseguir una cualificación de «A» en el Test SSL de Qualys
SSLProtocol ALL -SSLv2 -SSLv3
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:!DSS
Una vez aplicados estos cambios podremos reiniciar el servidor web y tendremos HTTPS funcionando. Si queremos que todo el tráfico hacia nuestra web pase a ser HTTPS podemos añadir la siguiente regla en el virtualhost que recibe las peticiones HTTP:
RewriteEngine On
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
Por último, los certificados de Let’s Encrypt tienen una caducidad de 90 días por lo que es interesante automatizar su renovación. Podemos añadir una cron mensual que llame a certbot-auto con los parámetros renew y –quiet:
./path/to/certbot-auto renew --quiet
Y después de esto reiniciar el servidor web para que los cambios surjan efecto.
Gracias a Let’s Encrypt ya no tenemos escusa para que todos los servidores web utilicen HTTPS.