Saltar al contenido principal

Certbot

Introducción

Tras añadir certificados en el Ingress de K8s, no era demasiado añadir lo mismo a los servicios web de la Raspberry.

En este caso, Let's Encrypt se gestiona a partir de Certbot vía comandos y también permite el uso de validación con DNS01.

Instalación

Antes de instalar, hay que revisar los plugins disponibles para encontrar el válido según nuestro registrador de dominio.

apt-cache search certbot

En mi caso es Cloudflare.

sudo apt install -y certbot python3-certbot-dns-cloudflare
tip

Cada plugin tiene un fichero y argumentos diferentes, así que habrá que ajustar estos comandos según su documentación.

Creo el fichero que contiene el token previamente creado.

mkdir certbot
vi /home/user/cerbot/cloudflare.ini >
cloudflare.ini
# Cloudflare API token used by Certbot
dns_cloudflare_api_token = <token>

Tras esto se activa con la información del registrador del dominio, el dominio que se desea utilizar y ajusto a los paths ya que no ejecuto como root.

certbot certonly -n \
--config-dir /home/user/certbot \
--work-dir /home/user/certbot \
--logs-dir /home/user/certbot \
--agree-tos \
--dns-cloudflare \
--dns-cloudflare-credentials /home/user/certbot/cloudflare.ini \
--dns-cloudflare-propagation-seconds 180 \
-d rasp.intranet.domain.cat \
-m [email protected]
tip

Por defecto se crean certificados de tipo ECDS que son válidos con lighttpd. Si los queremos reutilizar en otro servicio, es posible que solo se acepten los RSA.

Si es el caso, añadir el siguiente argumento: --key-type rsa

info

DNS01 puede usar wildcards, así que es posible cambiar rasp por * para reutilizar estos certificados en otro lugar.

Tras un tiempo de espera, se crearán los certificados y se registrará para auto renovarlos.

Lighttpd

Tras añadir los certificados, solo queda actualizar la configuración original para utilizar el nuevo dominio y certificados.

sudo vi /etc/lighttpd/external.conf
external.conf
$HTTP["host"] == "rasp.intranet.domain.cat" {

# ssl.pemfile = "/etc/lighttpd/file.pem"
ssl.pemfile = "/home/pi/certbot/live/rasp.intranet.domain.cat/fullchain.pem"
ssl.privKey = "/home/pi/certbot/live/rasp.intranet.domain.cat/privkey.pem"

Tras reiniciar, probar que todo funciona según lo esperado.

sudo service lighttpd restart