From bad0f74397db8dc41b4ed7845b86184e15752253 Mon Sep 17 00:00:00 2001 From: Yaroslav Date: Tue, 17 Mar 2020 16:48:19 +0300 Subject: migrate post from 2018-08-12 --- .../2018-08-12_ssl-with-lets-encrypt/index.es.md | 141 +++++++++++++++++++++ 1 file changed, 141 insertions(+) create mode 100644 content/weblog/2018-08-12_ssl-with-lets-encrypt/index.es.md (limited to 'content/weblog/2018-08-12_ssl-with-lets-encrypt/index.es.md') diff --git a/content/weblog/2018-08-12_ssl-with-lets-encrypt/index.es.md b/content/weblog/2018-08-12_ssl-with-lets-encrypt/index.es.md new file mode 100644 index 0000000..500cf35 --- /dev/null +++ b/content/weblog/2018-08-12_ssl-with-lets-encrypt/index.es.md @@ -0,0 +1,141 @@ ++++ +title = "SSL en tu sitio fácil y gratis con Let's Encrypt" +date = 2018-08-12T22:28:00Z ++++ + +Es bien sabido en esta época que la seguridad es una parte importante de +desarrollo web, y no solamente. Y como olvidar ese suculento SEO de Google, que +da prioridad a sitios que usan https en lugar del antiguo http (Aunque para ser +sincero me da igual Google, sin embargo mis clientes y la mayoría de los que +lleguen a leer esto si le dan importancia) + + + +Quieres agregarle SSL a tu sitio, pero vaya, que esos certificados cuestan +dinero. Ah, pero he ahí donde estás equivocado (A menos que ya sepas a cerca de +Let's Encrypt y simplemente hayas entrado a leer este tutorial para saber como +generar un certificado. En dado caso sinceramente pido perdón por esta patética +introducción). + +En esta guía detallaré los pasos para adquirir un certificado SSL de Let's +Encrypt con Certbot en un servidor con nginx. Instalaré Certbot en un servidor +Debian Stretch, si usas otra distro de Linux (o BSD, etc.) es probable que +necesites usar otro comando para instalarlo. + +Primero instalamos Certbot + +``` +# apt-get install certbot +``` + +Antes de podar instalar certificados, necesitamos configurar nginx para ello. +Podemos modificar la configuración por defecto para ello. Necesitamos hacer +esto para que el servidor de Let's Encrypt puede leer el archivo de "desafío" +para verificar que en efecto el(los) dominio(s) nos pertenece(n). + +```nginx +server { + listen 80 default_server; + listen [::]:80 default_server; + + server_name _; + + # This is so that Let's Encrypt can look for the challenge + location /.well-known/acme-challenge/ { + root /var/www/html/; + default_type text/plain; + } + + # The rest of your configuration... +} +``` + +Una vez editado el archivo de configuración necesitamos reiniciar nginx. + +``` +# sudo systemctl restart nginx +``` + +Después de reiniciar nginx podemos proceder con la instalación del certificado. +En mi caso necesito el certificado para múltiples subdominios, por lo tanto los +agregaré usando la opción -d para cada uno de ellos en mi lista de argumentos +como en el ejemplo siguiente + +``` +# certbot certonly --webroot -w /var/www/html -d www.example.com -d example.com +``` + +Durante el proceso de generación de certificados Certbot te pedirá tu correo +electrónico. Let's Encrypt enviará notificaciones a el cuando el certificado +esté a punto de expirar, sin embargo Certbot se encargará de renovarlos antes +de que expiren automáticamente. + +Con esto nuestros certificados están instalados en el servidor y listos para +ser usados. Lo último que queda por hacer es configurar nginx para que use los +certificados y redirija de http a https. En las variables `ssl_certificate` +`ssl_certificate_key` ponemos la dirección en el sistema de archivos de nuestro +certificado y nuestra llave publica. + +```nginx +server { + listen 80; + listen [::]:80; + server_name www.example.com; + return 301 https://$host$request_uri; +} + +server { + listen 443 ssl; + + server_name www.example.com; + ssl_certificate /etc/letsencrypt/live/www.example.com/fullchain.pem; + ssl_certificate_key /path/to/key/www.example.com/privkey.pem; + location /static/ { + alias /home/webuser/mysite/static/; + } + location /media/ { + alias /home/webuser/mysite/media/; + } + location / { + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header Host $http_host; + proxy_redirect off; + proxy_pass http://127.0.0.1:8001; + } +} +``` + +Un contra de redirigir a https automáticamente es que los exploradores antiguos +que no son compatibles con https no podrán abrir el sitio web. Pero vaya, que +estamos en 2018, no deberíamos de preocuparnos por exploradores de hace 10 y +más años. + +Para más información acerca de Certbot: +[https://certbot.eff.org/docs/using.html](https://certbot.eff.org/docs/using.html) + +Actualización (2018/11/02): Hace un tiempo en 2018, Let's Encrypt agregó la posibilidad de generar un certificado "universal" para todos los subdominios (por ejemplo, *.example.com). + +Para generar dicho certificado, primero necesitamos descargar la última versión de certbot del repositorio oficial de git + +```sh +$ git clone https://github.com/certbot/certbot.git +``` + +Después entramos al directorio "certbot" y ejecutamos + +```sh +$ ./certbot-auto certonly --manual \ +> --preferred-challenges=dns \ +> --email email@example.com \ +> --server https://acme-v02.api.letsencrypt.org/directory \ +> --agree-tos \ +> -d *.example.com +``` + +Certbot te presentará con un "desafío" de DNS en el que tendrás que agregar una +entrada de tipo TXT a la configuración de tu dominio, ya que este tipo de +certificados sólo funciona con el "reto" de dns. Asegúrate de que tu +configuración de DNS ya esté actualizada antes presionar "Enter". + +También ten en cuenta que actualmente no es posible renovar automáticamente +certificados de este tipo. -- cgit v1.2.3