Certificado SSL en NGINX

02 Jan 2020 5 min (0) Comentarios

 

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

  1. Desabilitar los  A www y A tudominio.com records en el panel de cloudflare, También debes hacerlo para el CNAME si tienes uno.
  2. Esperar unos cuantos minutos para que se activen los cambios
  3. renovar el proceso de forma manual, ejecutando el comando del punto 4.1 de forma manual.
  4. 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. 


Uso del bloqueador de anuncios adblock

Hola!

Primero de todo bienvenido a la web de NetMentor donde podrás aprender programación en C# y .NET desde un nivel de principiante hasta más avanzado.


Yo entiendo que utilices un bloqueador de anuncios como AdBlock, Ublock o el propio navegador Brave. Pero te tengo que pedir por favor que desactives el bloqueador para esta web.


Intento personalmente no poner mucha publicidad, la justa para pagar el servidor y por supuesto que no sea intrusiva; Si pese a ello piensas que es intrusiva siempre me puedes escribir por privado o por Twitter a @NetMentorTW.


Si ya lo has desactivado, por favor recarga la página.


Un saludo y muchas gracias por tu colaboración

© copyright 2024 NetMentor | Todos los derechos reservados | RSS Feed

Buy me a coffee Invitame a un café