Cifrar las comunicaciones con tu Raspberry y Let’s Encrypt

Este es uno de los capítulos del tutorial La Raspberry Pi. Primera primeros pasos.. Encontrarás los enlaces a todos los de capítulos, al final de este artículo.

Inicialmente compré la Raspberry con la intención de añadir sensores para medir diferentes parámetros como la temperatura, presión, humeda relativa, etc… Incluso llegué a plantearme la posibilidad de montar una estación meteorológica. Sin embargo, poco a poco, se ha ido convirtiendo en todo un campo de experimentación. He ido dejando de lado, toda la parte de electrónica que tanto me atría y me atrae. Cada vez le dedico mas a la experimentación de todo tipo, con la instalación de todo tipo de servicios, aplicaciones, plataformas, etc. Sin lugar a dudas, una forma de aprender GNU/Linux es con un chisme de estos. Sin embargo, algo que echaba de menos, era la posibilidad de poder acceder a la Raspberry, desde fuera de mi red local. Esto, ya lo puedes solucionar, siguiendo las indicaciones del artículo sobre una puerta a tu Raspberry con IP Dinámica. Sin embargo, quedaba un punto importante para dejar todo perfectamente configurado y con garantías de privacidad, es decir, se trata de cifrar las comunicaciones con tu Raspberry Pi.

Respecto al tema de la IP dinámica, indicar, que actualmente, en España, la mayoría de los proveedores de servicios, nos dan este tipo de conexión. Para nosotros, un punto a favor, es claramente la privacidad que esto nos garantiza. Esto es así, en tanto en cuanto, la IP varía de tanto en tanto, y es mas complicado realizar un traqueo de la misma. Sin embargo, el problema radica, en que es mas problemático poder acceder desde Internet a tu red local.

Sea como fuere, ya hemos resuelto el problema de la IP dinámica para comunicarnos desde fuera con nuestra Raspberry. En este artículo te indicaré como cifrar las comunicaciones con tu Raspberry Pi mediante Let’s Encrypt.

Cifrar las comunicaciones con tu Raspberry y Let's Encrypt

Cifrar las comunicaciones con tu Raspberry Pi

Para poder cifrar las comunicaciones con tu Raspberry Pi, es necesario obtener un certificado de una Autoridad de Certificación. Existen multitud de autoridades de certificación, sin embargo, la mayoría son de pago. La cuestión surge en el momento de intentar mejorar la calidad y seguridad de Internet. Para que estemos mas seguros en nuestro deambular por las redes, conviene cifrar las comunicaciones, para evitar que nuestros datos puedan ser leídos de una forma totalmente transparente.

La solución a este problema surge a mediados de 2016 con Let’s Encrypt que es una autoridad de certificación que proporciona certificados X.509 de forma gratuita. Para ello se utiliza un proceso automatizado para la creación, validación, instalación y renovación de certificados seguros.

Así en un servidor Linux, tener un certificado seguro que permita cifrar las comunicaciones es algo realmente sencillo. No va mas allá de ejecutar un par de órdenes en un terminal. Es mas, la renovación se puede automatizar totalmente con tan solo añadir la tarea en el cron. Si no sabes lo que es el cron, te recomiendo que le des un vistazo al artículo sobre Programación de tareas con cron.

Let’s Encrypt y Raspberry Pi

Así como en Ubuntu el proceso de instalar el certificado en un servidor es muy sencillo, en una Rasbperry Pi con Raspbian se complica un poco. Aunque, no es que sea mucho mas complejo. Sin embargo, lo importantees poder cifrar las comunicaciones con tu Raspberry Pi.

Lo primero que debemos tener en cuenta es que depende del servidor web que estemos utilizando. Es decir, el proceso va a variar si estamos ante Apache o Nginx. Así, vamos a ver cada uno de los dos servidores para que no haya ninguna duda.

Lo primero es conseguir una copia del script. Para ello, ejecutaremos las siguientes órdenes en un terminal,

wget https://dl.eff.org/certbot-auto
chmod a+x certbot-auto
sudo mv certbot-auto /usr/bin

Apache

Certbot utiliza un complemento que está soportado en multitud de plataforma. Así, para conseguir el certificado ejecutaremos la siguiente orden,

sudo certbot-auto --apache

Al ejecutar este comando conseguirás el certificado. Pero no solo esto, sino que además, Certbot habrá modificado la configuración de tu Apache, para que puedas empezar a cifrar las comunicaciones con tu Raspberry Pi.

Por otro lado, si no quieres que Certbot modifique la configuración de tu Apache, puedes ejecutar la siguiente orden,

sudo certbot-auto --apache certonly

Sin embargo, esto te obligará a que seas tu el que modifique la configuración de tu Apache. Aquí depende de los conocimientos que tengas, para elegir una solución u otra.

Nginx

Igual que en el caso de Apache, con Nginx también tenemos la posibilidad de realizar la instalación del certificado de forma realmente sencilla. Así, tan solo tenemos que ejecutar la siguiente orden

sudo certbot-auto --nginx

De esta forma, no solo nos instalará el certificado, sino que modificará la configuración de Nginx para poder empezar a utilizar el certificado Let’s Encrypt de inmediato. De nuevo, y al igual que con el servidor Apache, si no quieres que Certbot modifique la configuración de Nginx, tienes que ejecutar la siguiente orden,

sudo certbot-auto --nginx certonly

Renovación

Los certificados de Let’s Encrypt solo tienen una validez de 90 días. Esto quiere decir que cada 90 días tendrás que renovar tu certificado. Bueno realmente lo tendrás que renovar antes de que caduque.

Certbot puede ser configurado para renovar el certificado de forma automática antes de que este expire. Para comprobar de forma manual la renovación del certificado, tendrás que ejecutar la siguiente orden,

sudo certbot-auto renew --dry-run

Si todo funciona automáticamente puedes programar una tarea en el cron para su renovación. La frecuencia debe ser de dos veces al día, según recomienda el propio Let’s Encrypt. La tarea, que tienes que añadir como administrador, tendrá un aspecto como lo que sigue,

0 0,12 * * * python -c 'import random; import time; time.sleep(random.random() * 3600)' && /usr/bin/certbot-auto renew

Otra opción es crear un servicio y un timer El servicio /etc/systemd/system/certbot.service, tendrá un aspecto como el siguiente,

[Unit]
Description=Renovación de Let's Encrypt

[Service]
Type=oneshot
ExecStart=/usr/bin/certbot-auto renew --quiet --agree-tos

Y por otro lado el timer, /etc/systemd/system/certbot.timer que se encargará de ejecutar el servicio, certbot.timer, de forma periódica será como sigue,

[Unit]
Description=Renovación dos veces al día de los certificados de Let's Encrypt's

[Timer]
OnCalendar=0/12:00:00
RandomizedDelaySec=1h
Persistent=true

[Install]
WantedBy=timers.target

Una vez creados el servicio y el timer, tienes que habilitar este último y ponerlo en funcionamiento. Para ello, ejecuta las siguientes órdenes,

sudo systemctl enable certbot.timer
sudo systemctl start certbot.timer

Y con esto ya lo tienes todo, tanto conseguir el certificado inicial, como la renovación del mismo.

Conclusión

Aunque inicialmente, a lo mejor te puedes haber asustado un poco, como puedes ver el proceso es realmente sencillo. Con unos pocos conocimientos lo tienes resuelto.

No quiero dejar de insistir en la importancia de cifrar las comunicaciones con tu Raspberry, ya sea utilizando Let’s Encrypt o con cualquier certificado. De esta manera, estás protegiendote tu, y protegiendo a los que utilizan tus servicios.


Mas información,