Wer bei einer Domain viele Subdomains oder Hosts verwendet und sie alle mit einem Let's-Encrypt-Zertifikat ausstatten möchte, kann das im Prinzip auf die übliche Art machen und für jeden Namen ein Zertifikat mit dem Certbot-Tool anfordern. Es kann aber sein, dass man dabei Probleme mit den verschiedenen Bandbreitenbegrenzungen bekommt, die Let's Encrypt implementiert, um Missbrauch zu verhindern. Abhilfe können die Wildcard-Zertifikate schaffen, die Let's Encrypt im März 2018 eingeführt hat.
Außerdem wollen wir zur Verifizierung der eigenen Domain die DNS-Challenge verwenden, bei der Let's Encrypt einen Hash vorgibt, den der Betreiber einer Domain als TXT-Record in seinem DNS eintragen muss. Dafür gibt es Plugins für verschiedene DNS-Provider wie Cloudflare, Google, AWS Route53 etc., damit der Certbot den Eintrag im Hintergrund automatisch vornimmt. Zwar könnte man den Eintrag auch von Hand vornehmen, aber das würde den Vorteil der Einfachheit zunichte machen.
Leider gibt es die Plugins für die meisten Distributionen noch nicht als Paket, sodass die Entwickler zur Verwendung eines Docker-Images raten, das die Tools enthält. Allerdings funktioniert Docker auf unserem VServer, der bereits auf Container-Technologie (OpenVZ) beruht, nicht und außerdem gab es auch zum Docker-Image in den Internet-Foren wenige Erfolgsberichte. Wir verwenden deshalb einfach den Python-Paketmanager pip und installieren alle Tools in einem separaten Verzeichnis, einem sogenannten Virtualenv:
virtualenv -p python3 certbot cd certbot/ . bin/activate pip install -U certbot pip install -U certbot-dns-route53
Jetzt kann Certbot samt Route53-Plugin in dem Virtualenv verwendet werden. Man darf nur nicht vergessen, die virtuelle Python-Umgebung jeweils vor Benutzung mit dem "activate"-Skript zu aktivieren. Somit kann auch Root den so installierten Certbot benutzen:
sudo su # . bin/activate
Zur Authentifizierung gegenüber AWS Route53, bei der wir unsere Domain eingetragen haben, verwendet Certbot die üblichen Mechanismen, die für die AWS CLI Tools oder auch Boto3 gelten. Ein Beispiel sind dafür sind die Einträge "aws_access_key_id" und "aws_secret_access_key" in "$HOME/.aws/config". Damit können Sie nun mit Certbot eine Wildcard-Domain anfordern und sich über eine DNS-Challenge authentifizieren:
# certbot certonly -n --agree-tos --email certadmin@mydomain.com --dns-route53 -d "*.kunden.mydomain.com"
Mit dem folgenden Aufruf verifizieren Sie, ob es sich auch um eine Wildcard-Domain handelt:
openssl x509 -in /etc/letsencrypt/livekunden.mydomain.com/cert.pem -text -noout | grep -E "(CN|DNS)"