Archiv nach Monaten: Dezember 2020

LetsEncrypt-Wildcard SSL-Zertifikate mit Domain-Offensive

ACHTUNG NOCH IM AUFBAU

Noch als Azubi im Jahre 2010 hatte ich den Auftrag bekommen einen günstigen und guten Anbieter für Domains zu suchen. Ich bin bei Domain-Offensive gelandet, mittlerweile habe ich selbst mehrere Domains dort.

Da ich zig Sub-Domains im Einsatz habe (Stichwort „name-based virtual hosts“) bin ich irgendwann auf Wildcards Zertifikate gewechselt. Diese benutze ich sowohl für meine Webserver, als auch für meinen eMail-Server.

Domain-Offensive bietet mittlerweile selbst eine API für LetsEncrypt an.
Doku: https://www.do.de/wiki/LetsEncrypt_-_Entwickler

Ich habe hierfür simple Bash-Scripte erstellt, mit welchen man – über die API – Wildcard-Zertifikate anlegen und aktualisieren kann. Der Trick hierbei ist, dass temporäre _acme-challenge.* DNS-Einträge erstellt werden.

Certbot installieren

Ich möchte hier nicht im Detail auf die Installation von Certbot eingehen, nur der Tipp am Rande, das eine aktuelle Version von Certbot benötigt wird. Ganz alte Versionen unterstützen noch keine Wildcard Zertifikate

Zum Zeitpunkt des Artikels setze ich Certbot 1.8.0 aus dem sid-Repo ein.

DomainOffensive-API-Key

Zuerst erstellen wir einen API-Key, Details siehe API-Doku.
https://www.do.de/account/letsencrypt/

Der API-Key gilt pro Account, nicht pro Domain!

Anlegen der Ordner+Scripte

Hier kommt nun mein customizing…

## Ordnerstruktur anlegen
mkdir -p /opt/letsencrypt/{hooks,logs,scripts}

/opt/letsencrypt/scripts/new_domain.sh

#!/bin/bash
## Script für neue Domains

for domain in "$@"
do
        echo $DOMAINS
        [ -n "${DOMAINS}" ] && DOMAINS="${DOMAINS},"
        DOMAINS="${DOMAINS}${domain}"
done

[ -z ${DOMAINS} ] && { echo "No domain given"; exit 1; }

certbot certonly --server https://acme-v02.api.letsencrypt.org/directory --manual --preferred-challenges dns --manual-auth-hook "/opt/letsencrypt/hooks/authenticator.sh" --manual-cleanup-hook "/opt/letsencrypt/hooks/cleanup.sh" -d "${DOMAINS}"

/opt/letsencrypt/hooks/authenticator.sh

#!/bin/bash
## https://certbot.eff.org/docs/using.html

## Token from do.de
APITOKEN="<YourDOApiTokenHere>"

DOMAIN="_acme-challenge.$CERTBOT_DOMAIN"

echo "$(date +'%Y-%m-%d %T') curl-XPUT \"https://www.do.de/api/letsencrypt?token=${APITEKEN}&domain=${DOMAIN}&value=${CERTBOT_VALIDATION}"\" >> /opt/letsencrypt/logs/hook_authenticator.log

curl -XPUT "https://www.do.de/api/letsencrypt?token=${APITOKEN}&domain=${DOMAIN}&value=${CERTBOT_VALIDATION}" >> /opt/letsencrypt/logs/hook_authenticator.log 2>&1

/opt/letsencrypt/hooks/cleanup.sh

#!/bin/bash
## https://certbot.eff.org/docs/using.html

## Token from do.de
APITOKEN="<YourDOApiTokenHere>"

DOMAIN="_acme-challenge.${CERTBOT_DOMAIN}"

curl -XPUT "https://www.do.de/api/letsencrypt?token=${APITOKEN}&domain=${DOMAIN}&action=delete"