Ich möchte Let’s Encrypt für mehrere Domänen und Subdomänen sowie für mein Unternehmen verwenden. Anstatt ein langlebiges Wildcard-Zertifikat zu kaufen, das auf jedem Computer installiert wird, besteht das Ziel darin, kurzlebige und spezifische Zertifikate zu verwenden. Dies soll verhindern, dass wir gefährdet werden, wenn ein Computer kompromittiert wird.
Leider können manche Server keine Dienstunterbrechungen vertragen (d. h. sie können keine HTTP-Acme-Challenge durchführen). Die letzte Option ist also die DNS-Challenge. Dafür ist ein API-Token für unseren DNS-Anbieter erforderlich, in diesem Fall Cloudflare.
Wenn ich jedoch das globale API-Token auf dem Computer platziere und es kompromittiert wird, erhält der Angreifer vollen Zugriff auf unseren DNS für diese gesamte Domäne. Genau das möchte ich abmildern, indem ich kein Wildcard-Zertifikat verwende.
Mit Cloudflare können Sie Token mit weniger Privilegien erstellen, allerdings sind diese nicht feingranularer als pro Root-Level-Domain. Auch hier gilt im Wesentlichen der gleiche Zugriff/das gleiche Anliegen wie bei einem Wildcard-Zertifikat.
Hat jemand eine Lösung für dieses Problem gefunden?
Antwort1
Der Ansatz, den ich in der Vergangenheit für diese Anforderung verfolgt habe und den ichglaubenist in der Dokumentation von Let‘s Encrypt beschrieben und besteht darin, die _acme-challenge
Subdomäne für die Namen, die Sie validieren möchten, mit CNAME auf Namen in einer oder mehreren anderen Zonen umzubenennen, die andere Zugriffskontrollkonfigurationen haben.
Wenn Sie beispielsweise einem Dienst erlauben möchten, Zertifikate nur für zu generieren bobservice.example.com
, können Sie eine separate Zone für eine andere Domäne erstellen, z. B. bobservice.example
, und dann CNAME _acme-challenge.bobservice.com
auf verwenden _acme-challenge.bobservice.example
. Das Challenge-Token wird dann in einem TXT-Eintrag auf platziert _acme-challenge.bobservice.example
, LE folgt dem CNAME und der Name wird validiert.
Natürlich besteht auch die Möglichkeit, ganz auf Cloudflare zu verzichten, da diesem Dienst nützliche Funktionen wie Anmeldeinformationen mit begrenztem Umfang fehlen und außerdem das klitzekleine Problem besteht, dass dieser Dienst dem Abschaum des Internets seine Dienste zur Verfügung stellt.
Antwort2
Leider können manche Server keine Dienstunterbrechungen vertragen (d. h. sie können HTTP-Acme-Challenges nicht durchführen). Die letzte Option ist also die DNS-Challenge.
Es gibt eine weitere Option für Ihr Szenario, dieWebroot-Plugin. Auf diese Weise können Sie dem Let’s Encrypt-Client den Pfad zum Web-Root Ihres Servers mitteilen, und er legt die HTTP-Challenge-Dateien dort ab. Dieser Ansatz beeinträchtigt Ihren Webserver überhaupt nicht und verursacht keine Ausfallzeiten.
Antwort3
Meine Lösung besteht darin, einen Dienst zu erstellen, der im internen Netzwerk ausgeführt wird, ziemlich gesperrt ist und den globalen API-Schlüssel enthält. Dieser Dienst verwendet diesen Schlüssel, um Zertifikate für verschiedene Subdomänen zu erstellen/erneuern. Server, die auf die Subdomänenzertifikate angewiesen sind, verfügen über ein Token pro Domäne, das sie für diesen internen Dienst ausstellen können, um ein neues oder erneuertes Zertifikat abzurufen.