Let's Encrypt, Firewalls und Route 53

Mai 19, 2017

Let's Encrypt, die kostenlose und automatisierte Zertifizierungsstelle, revolutioniert die Art und Weise, wie SSL/TLS-Zertifikate erhalten und verwaltet werden, weg von teuren und manuellen traditionellen Methoden hin zu einem schlanken und kostenlosen Prozess.

In diesem Artikel wird erläutert, wie Sie ein LE-Zertifikat auf einem RHEL-basierten Server mithilfe der DNS-01-Validierung anhand von TXT-Datensätzen in Amazon Route 53 installieren und automatisch erneuern.

Wo liegt also das Problem?

Wenn Sie bei Google nach Installationsanweisungen suchen, erhalten Sie viele Artikel, in denen erklärt wird, wie Sie ein LE-Zertifikat mit dem Certbot Acme-Client installieren und automatisch erneuern können. Standardmäßig versucht Certbot, Validierungsabfragen für den Server durchzuführen, in den die DNS-Adresse der (Sub-)Domain aufgelöst wird. Diese Methode funktioniert hervorragend, wenn die Server dem Internet ausgesetzt sind, aber wenn die Server hinter einer Firewall gesperrt sind, wird die Abfrage immer fehlschlagen.

Die natürliche Reaktion, zumindest für mich, war, auf der Let's Encrypt-Website nach Dokumentationen über ihren IP-Bereich zu suchen, damit ich sie auf unseren Firewalls auf die Whitelist setzen konnte. Allerdings fand ich in den LE-Foren schnell Beiträge von LE/Certbot-Ingenieuren, die besagen, dass sie aus Sicherheitsgründen keine spezifischen Adressen bekannt geben wollen und dass sich die derzeit verwendeten Adressen ändern können.

Die Lösung...

Glücklicherweise gibt es Tools, mit denen wir LE-Zertifikate validieren können, ohne dass die Herausforderung auf dem Server stattfindet, auf den die DNS-Adresse für das von Ihnen generierte Zertifikat aufgelöst wird.

In diesem Beispiel verwende ich eine Kombination aus dem Shell-Skript Acme Client Dehydrated und dem Ruby-basierten Route 53 DNS-01 Hook

Schritt 1: Exportieren Sie Ihre AWS-Anmeldeinformationen, damit die Skripts einen TXT-Datensatz in Route 53 generieren können. (Stellen Sie sicher, dass Sie diese zu Ihrem Server-Bash-Profil hinzufügen, um sicherzustellen, dass die Details beibehalten werden.)

export AWS_REGION="Region geht hierher"
export AWS_ACCESS_KEY_ID="access_key_goes_here"
export AWS_SECRET_ACCESS_KEY="secret_key_goes_here"

Schritt 2: Erstellen Sie ein dehydriertes Verzeichnis.

mkdir /etc/dehydrated

Schritt 3: Rufen Sie die Standardkonfigurationsdatei herunter.

cd /etc/dehydred && curl -O 
https://raw.githubusercontent.com/lukas2511/dehydrated/master/docs/examples/config

Schritt 4: Klonen des dehydrierten Repositorys

Git-Klon 
https://github.com/lukas2511/dehydrated.git

Schritt 5: Klonen Sie den Route 53 Rubinhaken

cd dehydriert & locken -O
https://gist.githubusercontent.com/joshgarnett/02920846fea35f738d3370fd991bb0e0/raw/5412ee600278acf843832cd918455b8e6d50ba5c/lets-encrypt-route53.rb

Schritt 6: Stellen Sie sicher, dass der Ruby-Hook ausführbar ist

chmod +x lets-encrypt-route53.rb

Schritt 7: Installieren des AWS-SDK-Gems

Gem-Installation von AWS-SDK

Schritt 8: Registrieren Sie sich und akzeptieren Sie die Bedingungen

./dehydred --register --accept-terms

Schritt 9: Initiieren der Zertifikatsgenerierung (Ersetzen Sie example.com durch Ihre eigene Domäne)

./dehydred --cron --domain example.com --hook ./lets-encrypt-route53.rb --challenge dns-01

Schritt 10: Fügen Sie den gleichen Befehl zu einem cron/systemd-Job hinzu. Es kann sein, dass Ihr Webserver seine Konfiguration neu laden muss, wenn ein neues Zertifikat erstellt wird, also vergessen Sie nicht, dieses zu Ihrer geplanten Aufgabe hinzuzufügen.

Zum Beispiel auf nginx...

cd /etc/dehydrated/dehydrated && ./dehydrated --cron --domain example.com --hook ./lets-encrypt-route53.rb --challenge dns-01 & dienst nginx reload

Das war's, du bist fertig! Jetzt müssen Sie nur noch Ihren Webserver so konfigurieren, dass er das generierte Zertifikat/den generierten Schlüssel verwendet, und Ihre Tage der manuellen Erneuerung und Bezahlung von Zertifikaten sind vorbei.

Ta am besten!