Saltar al contenido principal

Overrides de Certbot

NOTA:

La mayoría (casi todos) los usuarios no necesitan modificar las configuraciones de Certbot. CapRover lo administra automáticamente por usted. ¡Deberías saltarte esta página!


Personaliza el comando Certbot para usar el desafío DNS-01

A partir de CapRover 1.12.0, puedes personalizar el comando que Certbot utiliza para generar certificados SSL. De forma predeterminada, CapRover usa el siguiente comando:

certbot certonly --webroot -w ${webroot} -d ${domainName}

que funciona a través del desafío HTTP-01. En este modo, Certbot verificará la propiedad de su dominio enviando una solicitud a http://<YOUR_DOMAIN>/.well-known/acme-challenge/<TOKEN> donde el contenido de <TOKEN> es generado por Certbot.

Este desafío funciona bien para la mayoría de los usuarios, pero opcionalmente puedes utilizar un desafío diferente si así lo deseas. Puede hacerlo anulando el comando de generación de certificados de Certbot.

1) Certbot Docker imagen

La imagen predeterminada Certbot Docker no incluye los complementos de terceros. Necesitas crear una imagen personalizada:

Por ejemplo, para Cloudflare:

# Change this to any other base image listed here: https://hub.docker.com/r/certbot/certbot
## Make sure to use the same version that CapRover uses by default (`certbotImageName` in [CaptainConstant](https://github.com/caprover/caprover/blob/master/src/utils/CaptainConstants.ts#L58))
BASE_IMAGE="certbot/dns-cloudflare:v2.11.0"

TEMP_DOCKERFILE=$(mktemp)
cat > $TEMP_DOCKERFILE <<EOF
FROM $BASE_IMAGE
ENTRYPOINT ["/bin/sh", "-c"]
CMD ["sleep 9999d"]
EOF
docker build -t certbot-customized -f $TEMP_DOCKERFILE .
rm $TEMP_DOCKERFILE

2) Guarde sus credenciales DNS

mkdir /captain/data/letencrypt/etc/captain-files
nano mycreds.ini

Luego ingrese sus credenciales DNS. Por ejemplo, para Cloudflare DNS, puedes usar:

# Cloudflare API token used by Certbot
dns_cloudflare_api_token = 0123456789abcdef0123456789abcdef01234567

Ver detalles aquí

3) Anular el comando Certbot

Edite /captain/data/config-override.json ejecutando:

nano /captain/data/config-override.json

Luego ingrese el siguiente blob. Asegúrese de reemplazar your/repo:certbot-sleeping y cambiar certbotCertCommand para satisfacer sus necesidades.

Por ejemplo, para un certificado comodín necesita un certificado para el dominio y también otro para los subdominios. Debes agregarlos así -d ${domainName} -d \"*.${domainName}\".

{
"skipVerifyingDomains": "true",
"certbotImageName": "certbot-customized",
"certbotCertCommandRules": [
{
"domain": "*",
"command": "certbot certonly --dns-cloudflare --dns-cloudflare-credentials /etc/letsencrypt/captain-files/mycreds.ini -d ${domainName} -d \"*.${domainName}\""
}
]
}

4) Reiniciar CapRover

docker service update captain-captain --force

Ahora, cuando le pides a CapRover que genere un certificado SSL, utiliza el desafío DNS.




Configure Certbot para usar un nuevo servidor ACME

1) Crear archivo de configuración

Normalmente, el directorio /captain/data/letsencrypt/etc debe contener el volumen utilizado por Certbot, para configurar Certbot, agregue un archivo cli.ini en este directorio:

$ cd /captain/data/letsencrypt/etc/
$ nano cli.ini

2) Configurar los valores

Tomaremos como ejemplo el servidor ACME de ZeroSSL para guiarlo sobre los pasos necesarios para que Certbot funcione correctamente con él.

Primero (al menos para ZeroSSL, necesita obtener las credenciales de EAB que están aquí) agregamos nuestro correo electrónico y le decimos a Certbot que acepte los TOS del servicio:

email = foo@example.com
agree-tos = true

luego agregamos el servidor (y si es necesario las credenciales de EAB):

server = https://acme.zerossl.com/v2/DV90 # (change it with your ACME server)
eab-kid = some-short-string
eab-hmac-key = a-big-key

3) Reiniciar Certbot

Luego, para aplicar nuestros cambios necesitamos actualizar el servicio de Certbot:

$ docker service update captain-certbot

¡Y ya está!

4) Registro CAA

Recuerda agregar un registro CAA en tu DNS para evitar cualquier problema al generar certificados SSL

por ejemplo, ZeroSSL necesita que tengas:

<your domain>. 3600 IN CAA 0 issue "sectigo.com"
<your domain>. 3600 IN CAA 0 issuewild "sectigo.com"