Índice
En post anteriores hemos visto cómo instalar NGINX en nuestro servidor, pero por ahora solo proporciona contenido HTTP, osea contenido sin certificado.
Instalar un certificado SSL es muy sencillo, de la mano de Let’s Encrypt.
Para ejecutar esta guía, únicamente debemos tener acceso a nuestro servidor a través de SSH un usuario superusuario o sudo y nuestro servidor web montado.
1 - Habilitar el repositorio EPEL
recordamos de posts anteriores que necesitamos tener habilitado el repositorio EPEL, si no lo tenemos activado, debemos ejecutar este comando
$ sudo yum install epel-release
2 - Instalar Certbot
Primero decir que certbot es una solución gratuita y open source para la administración automática de certificados lo cual nos permite utilizar HTTPS, utilziando Let’s Encript.
Para instalarlo ejecutamos el siguiente comando:
$ sudo yum install certbot python2-certbot-nginx
3 - Creación de los certificados
Como tenemos un servidor nginx, además de nuestras URL en la configuración, podemos correr el siguiente comando
$ sudo certbot --nginx
Y automáticamente nos creará los certificados necesarios y la configuración para escuchar por HTTPS en vez de HTTP
3.1 - Creación manual de certificados
en nuestro caso, vamos a crear los certificados para un sitio en concreto, con certbot, deberás crear los certificados tanto para el dominio, como para los subdominios.
$ sudo certbot --nginx -d webEjemplo.com -d www.webEjemplo.com
Certbot nos pedirá que introduzcamos una serie de información para crear el certificado, lo hacemos sin ningún problema.
Una vez hemos finalizado, no tenemos que configurar nginx ya que certbot lo hará automáticamente. para comprobarlo vamos al fichero de configuración en /etc/nginx/conf.d/
en nuestro caso webEjemplo.conf
y podemos observar los cambios.
server {
listen 80;
server_name www.webEjemplo.es;
location / {
proxy_pass http://localhost:5000;
}
listen 443 ssl; # managed by Certbot
# RSA certificate
ssl_certificate /etc/letsencrypt/live/www.webEjemplo.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/www.webEjemplo.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
# Redirect non-https traffic to https
if ($scheme != "https") {
return 301 https://$host$request_uri;
} # managed by Certbot
}
server {
listen 80;
server_name webEjemplo.com;
return 301 https://www.webEjemplo.com$request_uri;
listen 443 ssl; # managed by Certbot
# RSA certificate
ssl_certificate /etc/letsencrypt/live/webEjemplo.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/webEjemplo.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
# Redirect non-https traffic to https
if ($scheme != "https") {
return 301 https://$host$request_uri;
} # managed by Certbot
}
Los cambios que certbot ha introducido, están indicados con # managed by Certbot
Como podemos observar son los siguientes:
- Escuchar por el puerto 443 de ssl;
- incluir los certificados
- redireccionar a HTTPS cuando la llamada es HTTP
4 - Renovación automática de los certificados
Los certificados generados con Let’s Enctrypt y certbot caducan cada 90 días, por lo que tendremos que renovarlos.
En caso de haber creado los certificados a mano, nos habrá preguntado el email, cuando estamos cerca del dia de caducidad, Let’s encrypt nos mandará un mensaje indicando que el certificado va a caducar.
Pese a ello podemos crear una tarea cron en el sistema para que renueve los certificados.
abrimos crontab con el siguiente comando:
$ crontab -e
Y añadimos la siguiente línea
0 12 * * * /usr/bin/certbot renew --quiet
utilizamos --quiet
para indicar al sistema que no queremos saber la salida por la terminal.
nota: los certificados sólo pueden renovarse si están a 30 días de caducar.
4.1 - Renovación manual de los certificados con LetsEncrypt
Simplemente ejecutar este comando:
sudo certbot renew
4.2 - Renovar certificado LetsEncrypt con Cloudflare
Para renovar el certificado con cloudflare desafortunadamente tenemos que hacer unos cuantos pasos manuales
- Desabilitar los
A www
yA tudominio.com
records en el panel de cloudflare, También debes hacerlo para elCNAME
si tienes uno. - Esperar unos cuantos minutos para que se activen los cambios
- renovar el proceso de forma manual, ejecutando el comando del punto 4.1 de forma manual.
- Volver a hablitar los registros del punto 1
y así podrás renovar los certificados. Fuente.
Conclusión
En este post hemos instalado Certbot para generar certificados SSL para un dominio específico.
Posteriormente hemos configurado NGINX para utilizar estos certificados y así disponer de una web segura en cuestión de minutos.