# Certificados Letsencrypt sin servidor web o sin resolver en el servidor web

## Como obtener el certificado Letsencrypt para un dominio que no resuelve aun en una migración o nuevo servidor

Algunas veces es necesario hacer pruebas antes de levantar una migración en un nuevo servidor en producción.  

Para ello, deberemos de forma manual, obtener un nuevo certificado basándonos en el desafio llamado **challenge** en el que solicitaremos el certificado porque tenemos capacidad de administración de la zona DNS. También se conoce como **acme-dns-certbot**


### Requisitos
En este doc presuponemos que:
- Tienes cierto nivel de usuario Linux.
- Que tienes instalado **certbot** con *snap*. Si no, acude a las [Instrucciones de Cerbot](https://certbot.eff.org/instructions)
- Que tienes instalado **Python 3**, lo cual es ya lo mas común en una instalación de **Linux.**

### Instalar acme-cerbot
Una vez instalado necesitamos descargar el script de phyton que nos permitirá trabajar con este tipo de desafío, o validación mediante DNS.

> Antes descargar nada, es buena práctica revisar el repositorio desde el que vamos a descargar el script. Antiguamente, no había forma salvo que conocieras un poco el programa y los sistemas implicados. Hoy día puedes usar si no alcanzas a esto, una chat de IA para que te verifique el scripts y te lo explique, como si fueras un novato en sistemas Linux y Python.  

```bash
wget https://github.com/joohoi/acme-dns-certbot-joohoi/raw/master/acme-dns-auth.py
```

Lo hacemos ejecutable
```bash
chmod +x acme-dns-auth.py
```

Lo editamos para decirle que use Python 3

```
nano acme-dns-auth.py

#!/usr/bin/env python3
...
```

Una vez que hallamos realizado el cambio, movemos el fichero 

```
sudo mv acme-dns-auth.py /etc/letsencrypt/
```

### Configurar y usar acem-dns-cerbot

La cuestión es hora simple

```bash
sudo certbot certonly --manual --manual-auth-hook /etc/letsencrypt/acme-dns-auth.py --preferred-challenges dns --debug-challenges -d \*.tu-dominio -d tu-dominio
```

> Eso es una idea, basándonos en que tienes un * en tu zona dns. Pero puedes dejarlo en la simpleza del dominio normal, el que contiene *www* y otros como *mail*, etc. Pero el consejo es que **todos resuelvan a la ip** 

Ejemplo ficticio que surge de tener todo lo que te pida respecto de la zona DNS del dominio solicitado.

Antes de darle a continuar **Press Enter to Continue** es evidente que ya has creado el registro en la zona del dominio, tal y como te solicitan, o de lo contrario fallará la generación del certificado Let's Encrypt.

```zsh
certbot certonly --manual --manual-auth-hook /etc/letsencrypt/acme-dns-auth.py --preferred-challenges dns --debug-challenges -d nodo1.midominio.tld
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Requesting a certificate for nodo1.midominio.tld
Hook '--manual-auth-hook' for nodo1.midominio.tld ran with output:
 Please add the following CNAME record to your main DNS zone:
 _acme-challenge.nodo1.midominio.tld CNAME cc94069f-6419-4c31-b079-d4408ec2bac6.auth.acme-dns.io.
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Challenges loaded. Press continue to submit to CA.
Pass "-v" for more info about challenges.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Press Enter to Continue

Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/nodo1.midominio.tld/fullchain.pem
Key is saved at:         /etc/letsencrypt/live/nodo1.midominio.tld/privkey.pem
This certificate expires on 2025-08-11.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
If you like Certbot, please consider supporting our work by:
 * Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
 * Donating to EFF:                    https://eff.org/donate-le
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
```

Con esto ya puedes configurar el sitio de manera temporal, hasta que resuelva en la maquina. Después lo suyo seria revocarlo y comenzar un proceso normal, basado en web.

##### Aviso
Esta documentación y su contenido, no implica que funcione en tu caso o determinados casos. 
También implica que tienes conocimientos sobre lo que trata, y que en cualquier caso tienes copias de seguridad.
El contenido el contenido se entrega, tal y como está, sin que ello implique ningún obligación ni responsabilidad por parte de [Castris](https://castris.com)

Si necesitas soporte profesional puedes contratar con Castris [soporte profesional](https://intranet.castris.com/store/soporte-profesional).