aboutsummaryrefslogtreecommitdiff
path: root/content/weblog/2018-08-12_ssl-with-lets-encrypt/index.es.md
diff options
context:
space:
mode:
authorYaroslav <contact@yaroslavps.com>2020-03-17 16:48:19 +0300
committerYaroslav <contact@yaroslavps.com>2020-03-17 16:48:19 +0300
commitbad0f74397db8dc41b4ed7845b86184e15752253 (patch)
treecb2571a8cb736c448ce0f1058672b55c26ad2077 /content/weblog/2018-08-12_ssl-with-lets-encrypt/index.es.md
parentd66d38aa50df44533ea8ba8347a9f4a8713eebf0 (diff)
downloadyaroslavps.com-bad0f74397db8dc41b4ed7845b86184e15752253.tar.gz
yaroslavps.com-bad0f74397db8dc41b4ed7845b86184e15752253.zip
migrate post from 2018-08-12
Diffstat (limited to 'content/weblog/2018-08-12_ssl-with-lets-encrypt/index.es.md')
-rw-r--r--content/weblog/2018-08-12_ssl-with-lets-encrypt/index.es.md141
1 files changed, 141 insertions, 0 deletions
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)
+
+<!-- more -->
+
+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.