Let’s Encrypt es una autoridad de certificación que proporciona certificados TLS gratuitos, lo que facilita que los sitios web habiliten el cifrado HTTPS y crea una internet más segura para todos.

No explicaré aquí como instalar los certificados, ya que lo hice en el primer artículo de este blog Instala WordPress en tu raspberry Pi 4 .
Así, que dando por puesto que ya están instalados en nuestro sistema, ya sea a través de WordPress u otro medio, los reutilizaremos para usarlos con Pi-hole
1. Configuración de puertos.
Entra en Pi-hole desde su interfaz gráfica, ve a Settings, All Settings y Webserver and API y busca el apartado webserver.port y cambia al puerto que necesites configurar.
Originalmente los puertos vienen así:
80o,443os,[::]:80o,[::]:443os
El primer bloque (en azul) corresponde a las direcciones IPV4 y el segundo a IPV6.
A continuación te dejo un ejemplo de puerto HTTP y HTTPS tanto para IPV4 como para IPV6.
7070o,7443os,[::]:7070o,[::]:7443os
Nota: no olvides abrir esos mismos puertos en tu router.
2. Localiza tus certificados.
Lo primero sera buscar la ruta al directorio de tu certificado.
sudo ls -l /etc/letsencrypt/live/
La salida nos mostrará la ruta y con ella el directorio que tendrá el mismo nombre que nuestro dominio.
drwxr-xr-x 2 root root 4096 ago 8 19:00 mi.dominio.org
-rw-r--r-- 1 root root 740 feb 24 2024 README
Por lo que, la ruta completa para tus archivos de certificado será:
sudo ls /etc/letsencrypt/live/mi.dominio.org/
Y el resultado de este último comando, listará los siguientes archivos de certificado.
cert.pem chain.pem fullchain.pem privkey.pem README
3. Copia tus certificados
Como ya sabemos, los certificados de Let’s Encrypt se guardan en el directorio /etc/letsencrypt/live/mi.dominio.org/.
Tan solo necesitaremos dos archivos del directorio, que son:
fullchain.pem, que combina los archivoscert.pemseguido dechain.pem, justo en ese orden.privkey.pem, que es la clave privada del certificado (nunca la compartas)
Asegúrate de sustituir
mi.dominio.orgpor el nombre de dominio real.
a. – Copia el certificado fullchain.pem a /tmp/
sudo cp /etc/letsencrypt/live/mi.dominio.org/fullchain.pem /tmp/
b. – Copia la clave privada a /tmp/
sudo cp /etc/letsencrypt/live/mi.dominio.org/privkey.pem /tmp/
4. Combina los certificados.
El servidor web interno de Pi-hole v6 requiere que el certificado y la clave privada estén combinados en un solo archivo PEM llamado tls.pem dentro de la carpeta /etc/pihole/.
Situémonos en el directorio /tmp
cd /tmp/
Si listamos el contenido de /tmp, veremos los 2 certificados copiados anteriormente.
me@linuxete:/tmp
$ ls -l
total 32
-rw-r--r-- 1 root root 2872 sep 8 19:57 fullchain.pem
-rw------- 1 root root 241 sep 8 19:58 privkey.pem
Ahora combinaremos los dos archivos que acabamos de copiar, a un único archivo tls.pem:
sudo bash -c "cat fullchain.pem privkey.pem > /tmp/tls.pem"
Verifica que el archivo tls.pem se ha creado correctamente.
me@linuxete:/tmp
$ ls -l
total 16
-rw-r--r-- 1 root root 2872 sep 8 19:57 fullchain.pem
-rw------- 1 root root 241 sep 8 19:58 privkey.pem
-rw-r--r-- 1 root root 3113 sep 8 20:01 tls.pem
5. Permisos de usuario y grupo.
Echa un vistazo al usuario y grupo tiene archivo tls.pem de Pi-hole
me@linuxete:~
$ ls -l /etc/pihole/tls.pem
-rw------- 1 pihole pihole 3113 sep 8 08:18 /etc/pihole/tls.pem
Tanto el usuario como el grupo pertenecen a pihole. Además los permisos están establecidos en 600
Fíjate, que nuestro nuevo archivo (el que se encuentra en /tmp) tiene como usuario a root y los permisos con 644
Vuelve otra vez a directorio /tmp para cambiar eso.
cd /tmp
sudo chown pihole:pihole tls.pem
sudo chmod 600 tls.pem
Ahora ya lo tenemos preparado.
me@linuxete:/tmp
$ ls -l
total 16
-rw-r--r-- 1 root root 2872 sep 8 19:57 fullchain.pem
-rw------- 1 root root 241 sep 8 19:58 privkey.pem
-rw------- 1 pihole pihole 3113 sep 8 20:01 tls.pem
6. Sustituye al viejo tls
Antes de sustituir tu antiguo archivo tls, considera hacer una copia de seguridad.
sudo mv /etc/pihole/tls.pem /etc/pihole/tls.pem.bak
Tan solo nos queda mover el nuevo tls.pem para sustituir al antiguo.
sudo mv /tmp/tls.pem /etc/pihole/tls.pem
7. Reinicia el servicio Pi-hole
Reinicia el servicio de Pi-hole para que cargue el nuevo certificado.
sudo service pihole-FTL restart
Ahora, cuando accedas a la interfaz de administración de Pi-hole en https://tudominio.com:7443/admin, deberías ver que la conexión es segura y que el certificado es válido.

Solución errores y advertencias.
Advertencia, CERTIFICATE_DOMAIN_MISMATCH
La advertencia que ves ahora es solo un mensaje interno del sistema de diagnóstico de Pi-hole que te informa que la configuración predeterminada de su certificado no coincide con su dominio interno (pi.hole).

Si quieres eliminar esa advertencia en la página de diagnóstico, debes decirle a Pi-hole que utilice tu dominio (tu_dominio.org) en lugar de pi.hole como su nombre de host local.
Modo gráfico.
Para solucionar a través de la interfaz web, ve al menú izquierdo de tu pi-hole, abajo verás Settings y dentro verás All settings, en el apartado Webserver and API settings, en el campo Value, cambia pi.hole por tu dominio.

Guarda los cambios y reinicia el equipo.
Modo comandos de terminal
Conéctate a tu Raspberry Pi por SSH o usa la terminal local.
Edita el archivo de configuración TOML
sudo nano /etc/pihole/pihole.toml
Localiza la sección [webserver] y modifica la variable domain: Busca la sección [webserver] (si no existe, créala al final del archivo) y asegúrate de que la línea domain contenga tu dominio:
[webserver]
# ... otras configuraciones del webserver ...
domain = "pi.hole"
# ..
y sustituirla por la de tu dominio.
[webserver]
# ... otras configuraciones del webserver ...
domain = "tu_dominio.com"
# ..
Guarda y cierra el archivo (Ctrl+X, luego Y, luego Enter).
Reinicia Pi-hole FTL para cargar la nueva configuración TOML:
sudo service pihole-FTL restart
Al cambiar domain = "tu_dominio.com" en el archivo pihole.toml, estás estableciendo el nombre de host principal que Pi-hole utiliza para sus comprobaciones internas de HTTPS. Esto debería eliminar el error CERTIFICATE_DOMAIN_MISMATCH de la página de diagnóstico.