Búsqueda de sitios web

Cifremos su servidor web Apache en CentOS 7


Introducción

Era septiembre cuando, con una publicación en su blog, Google anunció que a partir de Chrome 56, su navegador marcará las páginas no seguras que contengan campos de entrada de contraseña y tarjeta de crédito como No seguras en la barra de URL.
Es importante tener en cuenta que estamos hablando de todas las páginas HTTP que recopilan datos "críticos" de los usuarios.
Esta medida es parte de un plan a largo plazo para marcar todos los sitios HTTP como no seguros. Por lo tanto, si posee (o administra) un servidor web, debe tomar la decisión correcta: este artículo explicará lo que eso significa.

¿Por qué HTTPS?

La primera pregunta es: ¿por qué Google hace esto? ¿Cuáles son las preocupaciones en torno a HTTP y por qué, hoy en día, es una buena opción para proteger las conexiones?
Por supuesto, todo el mundo sabe que estar seguro es mejor que estar inseguro; pero en este caso el gran problema de HTTP es que carece de un sistema para proteger las comunicaciones entre clientes y servidores. Esto expone los datos a diferentes tipos de ataques, por ejemplo, el “Man in the middle” (MIM), en el que el atacante intercepta sus datos. Si utiliza algún sistema de transacciones con su banco, utiliza información de tarjetas de crédito o simplemente ingresa una contraseña para iniciar sesión en un sitio web, esto puede volverse muy peligroso.
Esta es la razón por la que existe HTTPS (HTTP sobre TLS, HTTP sobre SSL o HTTP seguro).
Si utilizas Unixmen, probablemente sepas lo que esto significa: SSL/TLS garantiza conexiones cifradas.
Entonces, si tu trabajo es mantener un servidor web en funcionamiento, debes cambiar a HTTPS.

Empezando con HTTPS

En primer lugar, para habilitar HTTPS en su sitio, necesita un certificado. Estos se pueden adquirir a través de una autoridad certificadora (CA). A continuación, querrás seguir nuestro tutorial, donde hablaremos sobre Let's Encrypt. Lo configuraremos en un servidor web Apache que se ejecute en CentOS 7.
Para conseguirlo es necesario demostrar control sobre el dominio a proteger. Puede realizar esta tarea a través de un software que utiliza ACME.
Supondremos que tiene acceso shell a su servidor; en otras palabras, que puedes conectarte a través de SSH.

Usando Certbot

Certbot es un cliente ACME potente pero fácil de usar que proporciona la EFF.
En CentOS 7, puedes encontrar Certbot en el repositorio EPEL; Si lo habilitas, simplemente instala lo que necesitas:

yum install python-certbot-apache

Tiene un complemento Apache sólido y automatiza casi todos los pasajes necesarios. Sólo da el comando:

certbot --apache

Después de eso, verás una guía para personalizar tus opciones, como esta:

Editar la configuración SSL de CentOS

Si desea agregar más seguridad, debe realizar algunos cambios.
Primero, edite el archivo de host virtual que especificó durante la configuración a través de Certbot. Si utilizó el predeterminado, el archivo debería ser

/etc/httpd/conf.d/ssl.conf

.
Allí, para proteger Apache SSL, podemos seguir esta recomendación, que, para nuestro ejemplo, es:

SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
SSLProtocol All -SSLv2 -SSLv3
SSLHonorCipherOrder On
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
Header always set X-Frame-Options DENY
Header always set X-Content-Type-Options nosniff
Requires Apache >= 2.4
SSLCompression off 
SSLUseStapling on 
SSLStaplingCache "shmcb:logs/stapling-cache(150000)" 
Requires Apache >= 2.4.11
SSLSessionTickets Off

Eso sí, recuerda que puedes tener problemas de compatibilidad con clientes antiguos, por lo que depende de ti cambiar las líneas anteriores como se sugiere o elegir otra ruta.
Cuando haya terminado, guarde y cierre el archivo.

Probando y ejecutando su nueva configuración

Ésta es la tarea más sencilla. Compruebe si hay errores de sintaxis ejecutando:

apachectl configtest

Si, como salida, tienes un

Syntax OK

significa que no ha cometido errores al editar el archivo conf.
Entonces es hora de reiniciar Apache:

systemctl restart httpd

Ahora, si todo salió bien, su servidor web comenzará a servir páginas a través de conexiones SSL.

Más sobre certificados

Los certificados Let's Encrypt tienen una duración de 90 días, por lo que depende de usted renovarlos. Usando Certbot, puedes probar el sistema de renovación automática con este comando:

certbot renew --dry-run

Si funciona, puedes agregar un trabajo cron o systemd para gestionar la renovación automática.

Conclusión

Si se encuentra en este punto, su servidor web debería estar atendiendo a los clientes a través de conexiones seguras.
Y, por supuesto, Chrome ya no marcará su sitio como No seguro.