Table of Contents

Origin

This is cribbed heavily from https://developer.epages.com/blog/tech-stories/managing-lets-encrypt-certificates-in-vault/ and tweaked to use rfc2136 instead of dnsimple and to run under nomad.

Initial Setup

export VAULT_ADDR=https://vault.service.consul.sihnon.net:8200
export CERTBOT_TOKEN=$(vault token create -policy certbot-nomad -field token)
docker run -ti -e VAULT_ADDR=$VAULT_ADDR -e VAULT_TOKEN=$CERTBOT_NOMAD --entrypoint sh docker-registry.sihnon.net:5000/certbot-nomad:latest
certbot register --non-interactive --agree-tos -m webmaster@example.com
export ACCOUNT_PARENT_PATH=/etc/letsencrypt/accounts/acme-v02.api.letsencrypt.org/directory
export ACCOUNT_ID=$(ls $ACCOUNT_PARENT_PATH)
vault kv put secret/lets-encrypt/account/extra_details "account_id=$ACCOUNT_ID"
for i in meta private_key regr; do
  vault kv put "secret/lets-encrypt/account/$i" "@$ACCOUNT_PARENT_PATH/$ACCOUNT_ID/$i.json"
done

Register new cert

export VAULT_ADDR=https://vault.service.consul.sihnon.net:8200
export CERTBOT_TOKEN=$(vault token create -policy certbot-nomad -field token)
docker run -ti -e VAULT_ADDR=$VAULT_ADDR -e VAULT_TOKEN=$CERTBOT_NOMAD --entrypoint sh docker-registry.sihnon.net:5000/certbot-nomad:latest
source /usr/local/bin/initialise.sh
certbot certonly --dns-rfc2136 --dns-rfc2136-credentials /etc/letsencrypt/creds.ini --dns-rfc2136-propagation-seconds 210 --deploy-hook /etc/letsencrypt/renewal-hooks/deploy/00-update-vault.sh  -d www.benroberts.net

Failures

Waiting for verification...
Challenge failed for domain www.benroberts.net
dns-01 challenge for www.benroberts.net
Cleaning up challenges
Some challenges have failed.

One or more of the DNS servers are not up to date. Compare the SOA fields with:

# fish
for f in triumph tracey santo georgia ns6.gandi.net;
  printf "%-20s" $f ;
  dig +short SOA sihnon.net @$f ;
end

If one of them is behind, reload it. If ns6.gandi.net is behind, give it 60s to catch up, and if still lagging, reload one of the others arbitrarily to force a sync.