En esta entrada veremos cómo obtener certificados SSL gratis para tu web paso a paso en CentOS 7. Con esta guía aprenderás a conseguir los certificados SSL gratuitos de Let’s Encrypt a través del comando certbot y a configurar tu servidor web para usarlos, pudiendo ofrecer tus páginas web alojadas en CentOS 7 a través del protocolo HTTPS.
Contenido
Antes de obtener tu certificado SSL gratuito
Para seguir esta guía necesitaremos lo siguiente:
- Un sistema CentOS 7 actualizado.
- Tener añadido el repositorio EPEL.
- Un servicio web instalado y en ejecución.
- Cierto conocimiento de configuración del servidor web.
- El dominio para el que quieres conseguir tu certificado SSL gratis apuntando a la máquina CentOS 7 (accesible vía web).
- Acceso por terminal como root o usuario con permisos de sudo.
- Conexión a Internet.
En el caso de que aún no hayas registrado el dominio, te recomiendo Namecheap, el sitio en el que registro y renuevo todos mis dominios, incluyendo esta página que estás visitando ahora.
Situación inicial
Partimos de la situación en la que el servidor web está configurado para ofrecer la web del dominio mediante protocolo HTTP pero no HTTPS:
Cómo instalar certbot en CentOS 7
Para instalar certbot en CentOS 7 obtendremos mediante yum el paquete certbot junto con sus dependencias. En primer lugar actualizaremos el sistema:
~$ sudo yum -y update
Recuerda que necesitamos tener configurado el repositorio EPEL. Con el sistema actualizado, es el momento de instalar certbot:
~$ sudo yum -y install certbot
Ya podemos usar esta herramienta para solicitar e instalar los certificados SSL gratuitos.
Cómo solicitar y obtener el certificado SSL de Let’s Encrypt
Conectaremos con la autoridad certificadora Let’s Encrypt desde consola utilizando certbot, a través de su script interactivo.
La sintaxis del comando es la siguiente:
certbot certonly --authenticator standalone --pre-hook "comando_para_detener_el_servidor_web" --post-hook "comando_para_iniciar_el_servidor_web"
Y esto funciona del siguiente modo:
- Lanzamos el comando certbot con los parámetros adecuados.
- El script interactivo solicita cierta información, como el dominio para el que queremos el certificado SSL.
- Se detiene el servidor web con el comando suministrado en –pre-hook.
- Certbot conecta con Let’s Encrypt, solicita, obtiene e instala el certificado SSL (de forma gratuita).
- Se inicia el servicio web con el comando indicado en el parámetro –post-hook.
Al final del proceso el servicio web sigue funcionando y los certificados SSL quedan instalados en el sistema, pero NO en la configuración del servidor web, cosa que hay que hacer manualmente.
Ahora que ya sabemos cómo funciona el proceso, vamos a realizarlo.
Cómo ejecutar certbot para instalar el certificado SSL
Para este tutorial solicitaré un certificado SSL gratuito de Let’s Encrypt para el dominio centos7.comoinstalar.me.
El servidor web de la máquina CentOS 7 de este ejemplo será Apache, por lo que los comandos que pasaremos como parámetros son systemctl stop/start httpd.
Lanzamos el comando certbot completo:
~$ sudo certbot certonly --authenticator standalone --pre-hook "systemctl stop httpd" --post-hook "systemctl start httpd"
Además del dominio al que asociar el certificado, la primera vez que usamos certbot nos pedirá una dirección de correo electrónico para informar de posibles problemas e información relacionada con el certificado SSL y el dominio.
También pedirá la aceptación de los términos del servicio y si estamos interesados en recibir mensajes sobre el patrocinador de Let’s Encrypt.
En siguientes ocasiones, sólo se pedirán los dominios.
Ubicación del certificado SSL en el sistema
Tras la ejecución de certbot, los archivos de configuración se encuentran en bajo la ruta /etc/letsencrypt/.
Para acceder a los certificados tenemos una serie de enlaces simbólicos que se encuentran en /etc/letsencrypt/live/ en una carpeta con el mismo nombre que el dominio para el que se solicitaron.
Siguiendo con el ejemplo de este tutorial, para el dominio centos7.comoinstalar.me tendremos estos archivos:
/etc/letsencrypt/live/centos7.comoinstalar.me/cert.pem /etc/letsencrypt/live/centos7.comoinstalar.me/chain.pem /etc/letsencrypt/live/centos7.comoinstalar.me/fullchain.pem /etc/letsencrypt/live/centos7.comoinstalar.me/privkey.pem
Podrás comprobar, como dije antes, que son enlaces simbólicos, pero sirven perfectamente para configurar el servidor web.
Configuración del servidor web para usar el certificado SSL
Suponiendo que estamos usando Apache como servicio web, en primer lugar debemos instalar y activar el módulo SSL de Apache (mod_ssl).
Para configurar el acceso HTTPS editaremos el archivo de configuración del servidor virtual que se encarga del dominio con el que estamos trabajando, y añadimos un bloque <VirtualHost> como este:
<VirtualHost *:443> ServerName centos7.comoinstalar.me [...] SSLEngine on SSLCertificateFile /etc/letsencrypt/live/centos7.comoinstalar.me/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/centos7.comoinstalar.me/privkey.pem SSLCertificateChainFile /etc/letsencrypt/live/centos7.comoinstalar.me/chain.pem [...] </VirtualHost>
Añade el resto de directivas de configuración, guarda los cambios y recarga el servicio web. Ya está accesible el dominio a través de HTTPS:
Renovación del certificado SSL
Un dato muy importante sobre estos certificados gratuitos de Let’s Encrypt es que tienen una validez de tan solo tres meses. Pero no hay por qué preocuparse, ya que podemos renovarlos tantas veces como deseemos y de forma igualmente gratuita.
Además, la renovación es automática, mediante el servicio cron del sistema.
En la carpeta /etc/letsencrypt/renewal/ se guardan los archivos de configuración para la renovación de los certificados de Let’s Encrypt. Un archivo .conf por cada dominio.
El contenido del archivo de renovación para el certificado de este ejemplo sería:
# renew_before_expiry = 30 days version = 0.31.0 archive_dir = /etc/letsencrypt/archive/centos7.comoinstalar.me cert = /etc/letsencrypt/live/centos7.comoinstalar.me/cert.pem privkey = /etc/letsencrypt/live/centos7.comoinstalar.me/privkey.pem chain = /etc/letsencrypt/live/centos7.comoinstalar.me/chain.pem fullchain = /etc/letsencrypt/live/centos7.comoinstalar.me/fullchain.pem # Options used in the renewal process [renewalparams] authenticator = standalone post_hook = systemctl start httpd account = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX server = https://acme-v02.api.letsencrypt.org/directory pre_hook = systemctl stop httpd
Es importante conocer la existencia de este archivo porque si cambiaras de servidor web tendrías que actualizar los valores de las directivas post_hook y pre_hook.
Estos valores son los comandos necesarios para detener y volver a iniciar el servidor web, ya que la renovación automática detiene momentáneamente el servicio para actualizar los certificados.
Otro dato importante a conocer es que la renovación, por defecto, se realiza 30 días antes de la expiración del certificado, añadiendo tres meses de validez a la fecha de la renovación.
Conclusión
Ya sabes cómo obtener certificados SSL gratis procedentes de la autoridad certificadora Let’s Encrypt.
Mediante la herramienta certbot obtendrás e instalarás estos certificados en tu sistema, y son válidos para usar con cualquier servidor web que uses.
La validez del certificado es de tan sólo tres meses, pero las renovaciones, también a través de certbot, son automáticas, gratuitas e ilimitadas.
Ya no tienes excusa para ofrecer tus páginas cifradas a tus usuarios desde tu servidor o VPS CentOS 7.
Si tienes cualquier duda, pregunta o sugerencia, déjame un comentario.
¡Apoya este sitio!
Si has llegado hasta aquí y has seguido esta guía, te acabas de ahorrar un buen dinerito. Sobre todo si trabajas con un VPS CentOS 7 alojando múltiples sitios… A lo mejor estás tan feliz por ese ahorro que te apetece apoyar el mantenimiento de este sitio con una mínima contribución.
¡Gracias!
Hola, ¡excelente tu post! Me super ayudó, sólo una consulta, ¿para que se renueve el certificado tengo que hacer algo o ya con el simple hecho de haber ejecutado certbot queda automáticamente registrada la renovación? Porque tengo /etc/letsencrypt/renewal/ pero no sé si tengo que hacer algo para que se renueve solo. Muchas gracias nuevamente. Saludos.
¡Hola, Hernán! La renovación es automática, a través de una tarea programada en /etc/crond.d/.