Wie kann ich ein Let's Encrypt-Zertifikat für einen nicht öffentlich zugänglichen Server erhalten?

9

Ich habe einen privaten Apache-Server mit einem StartSSL-Zertifikat, der nur über mein LAN an Port 443 erreichbar ist.

Seit der Veröffentlichung von Firefox 51 kann ich keine Verbindung mehr herstellen, da das StartSSL-Stammzertifikat aus dem Trust Store entfernt wurde .

Ich habe überlegt, auf Let's Encrypt zu migrieren, aber dafür scheint ein öffentlich zugänglicher HTTP-Server erforderlich zu sein. Ist es möglich, Let's Encrypt in meiner Situation zu verwenden?

Ich würde es lieber vermeiden, für ein SSL-Zertifikat zu bezahlen, wenn dies überhaupt möglich ist.

Calimo
quelle

Antworten:

10

Wenn Sie DNS für die Domäne steuern, können Sie die DNS-01-Challenge-Methode verwenden, um den Besitz durch Erstellen eines TXT-Eintrags nachzuweisen.

Dies kann manuell oder automatisiert erfolgen. Ich denke sogar der offizielle Certbot-Client unterstützt jetzt DNS-01.

Ein kurzes Google zeigt mir eine Reihe von Tutorials mit verschiedenen Skripten und Clients, damit ich hier nicht alle wiederhole. Dieser automatisiert speziell Intranet-Zertifikate.

Martijn Heemels
quelle
Sind Sie sicher, dass es wirklich im Intranet funktioniert? Was ist, wenn ich einfach /etc/resolv.conf des Hosts überschreibe, auf dem der Certbot ausgeführt wird?
Peterh
@ Peterh ja, es funktioniert im Intranet gemäß der Dokumentation.
BE77Y
@ Peter Ich bin mir nicht sicher, was Sie versuchen, indem Sie resolv.conf überschreiben. Der TXT-Eintrag muss in öffentlichem DNS erstellt werden, da die Let's Encrypt-Validierungsserver und nicht der Certbot-Client in der Lage sein müssen, den Eintrag aufzulösen. Wenn alles lokal geschehen wäre, wäre die Validierung nicht viel wert. Der Server, für den das Zertifikat ausgestellt wurde, kann jedoch vollständig privat sein.
Martijn Heemels
@MartijnHeemels Nun, jetzt kann ich meinen alten Kommentar nicht mehr verstehen. Ich erstelle Intranet-Zertifikate mit letsencrypt, indem ich seine DNS so betrüge, dass ein dritter Server mit öffentlicher IP für alle * .intranet.mydomain-Anforderungen angezeigt wird - dies gilt jedoch nur für die ausgehenden DNS-Server von letsencrypt . Ich habe ihre IPs durch tcpdumping des eingehenden DNS-Verkehrs erhalten. Bind9 hat dafür die sogenannten "Ansichten". Somit kann dieser dritte Server * .intranet.mydomain-Zertifikate mit einer darauf abgestimmten kniffligen Apache-Konfiguration erhalten. Danach können die Schlüssel mit rsync-Skripten in das Intranet gespiegelt werden.
Peter
@MartijnHeemels Ich mache das, weil ich zu der Zeit Probleme hatte, die zonenbasierte Autorisierung der letsencrypt zu automatisieren. Vielleicht würde es jetzt funktionieren, aber ehrlich gesagt bin ich mit letsencrypt im Allgemeinen nicht sehr zufrieden (na ja ... mit den Problemen seiner Automatisierung bin ich natürlich sehr froh, dass es existiert) und ich möchte nicht, dass es wieder funktioniert , was ich mal okay gemacht habe. (Ich denke, wir alle kennen die Einstellung der Chefs zu
solchen
5

Der certbot-Client kann eine manuelle DNS-Abfrage durchführen. Die (derzeit zweitbeliebteste) Antwort in dieser Frage Wie wird die Validierung der DNS-Challenge von Let's Encrypt verwendet? hat alle Details, und ich habe es gerade als funktionierend getestet.

Grundsätzlich führen Sie diesen Befehl aus und folgen den Anweisungen:

certbot -d site.your.dom.ain --manual --preferred-challenges dns certonly
vick
quelle
0

Sie haben erwähnt, dass Sie Apache verwenden. Wenn Sie jedoch nicht daran gebunden sind, ist mit Caddyserver ein sehr einfacher Pfad möglich .

Dort müssen Sie nur ein Caddyfilemit folgendem Inhalt definieren:

example.com
tls {
    dns cloudflare
}

Erwähnen Sie den DNS-Anbieter, den Sie in der Konfiguration verwenden, und konfigurieren Sie die API-Schlüssel, die Sie verwenden, über Umgebungsvariablen. Zeichnen Sie aus der Liste der unterstützten Anbieter aus den Dokumenten .

Das ist alles was benötigt wird. Die Ausgabe beim ersten Start ist ungefähr so:

Activating privacy features... 2019/10/21 13:36:48 [INFO][cache:0xc0001c8190] Started certificate maintenance routine
[INFO][cache:0xc000092730] Started certificate maintenance routine
2019/10/21 13:24:49 [INFO][example.com] Obtain certificate
2019/10/21 13:24:49 [INFO] [example.com] acme: Obtaining bundled SAN certificate
2019/10/21 13:24:50 [INFO] [example.com] AuthURL: https://acme-v02.api.letsencrypt.org/acme/authz-v3/876706285
2019/10/21 13:24:50 [INFO] [example.com] acme: Could not find solver for: tls-alpn-01
2019/10/21 13:24:50 [INFO] [example.com] acme: Could not find solver for: http-01
2019/10/21 13:24:50 [INFO] [example.com] acme: use dns-01 solver
2019/10/21 13:24:50 [INFO] [example.com] acme: Preparing to solve DNS-01
2019/10/21 13:24:50 [INFO] cloudflare: new record for example.com, ID XXX
2019/10/21 13:24:50 [INFO] [example.com] acme: Trying to solve DNS-01
2019/10/21 13:24:50 [INFO] [example.com] acme: Checking DNS record propagation using [127.0.0.11:53]
2019/10/21 13:24:50 [INFO] Wait for propagation [timeout: 2m0s, interval: 2s]
2019/10/21 13:24:50 [INFO] [example.com] acme: Waiting for DNS record propagation.
2019/10/21 13:24:52 [INFO] [example.com] acme: Waiting for DNS record propagation.
2019/10/21 13:24:55 [INFO] [example.com] The server validated our request
2019/10/21 13:24:55 [INFO] [example.com] acme: Cleaning DNS-01 challenge
2019/10/21 13:24:55 [INFO] [example.com] acme: Validations succeeded; requesting certificates
2019/10/21 13:24:56 [INFO] [example.com] Server responded with a certificate.
done.

Serving HTTPS on port 443
https://example.com

2019/10/21 13:36:48 [INFO] Serving https://example.com

Serving HTTP on port 80
http://example.com

2019/10/21 13:36:48 [INFO] Serving http://example.com
Gregor Müllegger
quelle