Let's Encrypt schlägt fehl für IP hinter Firewall

Hallo zusammen,

nach der Installation von Discourse erhalte ich eine HTTP 502-Meldung, und das Protokoll besagt:

$ sudo ./launcher logs app
x86_64 arch detected.
run-parts: executing /etc/runit/1.d/00-ensure-links
run-parts: executing /etc/runit/1.d/00-fix-var-logs
run-parts: executing /etc/runit/1.d/01-cleanup-web-pids
run-parts: executing /etc/runit/1.d/anacron
run-parts: executing /etc/runit/1.d/cleanup-pids
Cleaning stale PID files
run-parts: executing /etc/runit/1.d/copy-env
run-parts: executing /etc/runit/1.d/letsencrypt
[Tue 06 Jun 2023 01:51:07 PM UTC] Using CA: https://acme-v02.api.letsencrypt.org/directory
[Tue 06 Jun 2023 01:51:07 PM UTC] Create account key ok.
[Tue 06 Jun 2023 01:51:07 PM UTC] Registering account: https://acme-v02.api.letsencrypt.org/directory
[Tue 06 Jun 2023 01:51:09 PM UTC] Registered
[Tue 06 Jun 2023 01:51:09 PM UTC] ACCOUNT_THUMBPRINT='V5GxRKC8yO-5jvYjc3WlSSMbTABmaNtxUNs8XVoL1R8'
[Tue 06 Jun 2023 01:51:09 PM UTC] Creating domain key
[Tue 06 Jun 2023 01:51:10 PM UTC] The domain key is here: /shared/letsencrypt/<mein Domain>/<mein Domain>.key
[Tue 06 Jun 2023 01:51:10 PM UTC] Single domain='<mein Domain>'
[Tue 06 Jun 2023 01:51:10 PM UTC] Getting domain auth token for each domain
[Tue 06 Jun 2023 01:51:13 PM UTC] Getting webroot for domain='<mein Domain>'
[Tue 06 Jun 2023 01:51:13 PM UTC] Verifying: <mein Domain>
[Tue 06 Jun 2023 01:51:15 PM UTC] Pending, The CA is processing your order, please just wait. (1/30)
[Tue 06 Jun 2023 01:51:19 PM UTC] Pending, The CA is processing your order, please just wait. (2/30)
[Tue 06 Jun 2023 01:51:23 PM UTC] Pending, The CA is processing your order, please just wait. (3/30)
[Tue 06 Jun 2023 01:51:27 PM UTC] <mein Domain>:Verify error:202.117.43.203: Fetching http://<mein Domain>/.well-known/acme-challenge/UuD6jm6XJAaoXG7lE_IKfNVuHtqB4dokQXm-ll0bmrk: Timeout during connect (likely firewall problem)
[Tue 06 Jun 2023 01:51:27 PM UTC] Please check log file for more details: /shared/letsencrypt/acme.sh.log
Can't open ca.cer for reading, No such file or directory
140104391968064:error:02001002:system library:fopen:No such file or directory:../crypto/bio/bss_file.c:69:fopen('ca.cer','r')
140104391968064:error:2006D080:BIO routines:BIO_new_file:no such file:../crypto/bio/bss_file.c:76:
unable to load certificate
Error loading file /dev/fd/63

...
nginx: [emerg] cannot load certificate "/shared/ssl/ics.yhdang.top.cer": PEM_read_bio_X509_AUX() failed (SSL: error:0909006C:PEM routines:get_name:no start line:Expecting: TRUSTED CERTIFICATE)
nginx: [emerg] cannot load certificate "/shared/ssl/ics.yhdang.top.cer": PEM_read_bio_X509_AUX() failed (SSL: error:0909006C:PEM routines:get_name:no start line:Expecting: TRUSTED CERTIFICATE)
nginx: [emerg] cannot load certificate "/shared/ssl/ics.yhdang.top.cer": PEM_read_bio_X509_AUX() failed (SSL: error:0909006C:PEM routines:get_name:no start line:Expecting: TRUSTED CERTIFICATE)

Ich gehe davon aus, dass dies daran liegt, dass Discourse versucht, automatisch ein Zertifikat zu generieren und es über den HTTP-Modus zu verifizieren, indem es auf die angegebene URL zugreift. Meine IP-Adresse befindet sich jedoch hinter einer institutionellen Firewall und erlaubt daher keinen externen IP-Zugriff, und das gilt auch für die CA.

Ich habe auch auf der Website von Let’s Encrypt gelesen, dass die DNS-Herausforderung verwendet werden kann, wenn HTTP nicht verfügbar ist, aber ich bin mir nicht sicher, wie das unter Discourse funktioniert.

Danke.

1 „Gefällt mir“

Sie haben Recht.

Sie hätten eine Warnung von Discourse-setup erhalten sollen, dass es keine Verbindung herstellen konnte.

Es wird nicht unterstützt. Wenn Sie hinter einer Firewall laufen wollen, müssen Sie einen anderen Weg finden, um ein Zertifikat zu erhalten. Sie könnten SSL / HTTPS für Ihr Discourse Docker-Setup zulassen sehen.

1 „Gefällt mir“

Hallo @pfaffman , vielen Dank für deine Informationen! Wenn ich den Anweisungen in diesem Beitrag folge, wird die Discourse-Begrüßungsseite endlich angezeigt.

Es gibt nur noch ein kleines Problem: Ich verwende Cloudflare, um ein Zertifikat für den Ursprungsserver zu generieren. Aber wenn ich versuche, von meinem Browser auf die Seite zuzugreifen, erhalte ich die Warnung NET::ERR_CERT_AUTHORITY_INVALID (obwohl ich sie ignorieren und fortfahren kann, aber meine Benutzer möchten das wahrscheinlich nicht).

Ich frage mich, ob dieses Problem etwas mit Discourse zu tun hat, und bin neugierig auf die Methoden, um dieses Problem tatsächlich zu debuggen. Danke.

Außerdem, da sshd.template.yml veraltet ist, muss ich /etc/nginx/conf.d/discourse..conf manuell bearbeiten, um ssl_certificate und ssl_certificate_key auf /shared/ssl/ssh.crt und /shared/ssl/ssh.key zu ändern (der Standardwert ist /shared/ssl/<domain name>.cer), andernfalls funktioniert nginx aufgrund von Zertifikatsproblemen nicht mehr und beschwert sich wie folgt:

[emerg] 5834#5834: cannot load certificate "/shared/ssl/<domain name>.cer": PEM_read_bio_X509_AUX() failed (SSL: error:0909006C:PEM routines:get_name:no start line:Expecting: TRUSTED CERTIFICATE)

Ich frage mich, ob dies der Punkt ist, der Probleme verursacht.

Sie benötigen die sshd-Vorlage nicht und sollten den Verweis darauf entfernen.

Sie werden lediglich die anderen empfohlenen Zeilen ändern, um die korrekten Informationen in die Nginx-Konfiguration einzufügen.

Wenn Sie eine Fehlermeldung erhalten, dass das Zertifikat ungültig ist, ist dies wahrscheinlich das Problem. Sie benötigen ein gültiges Zertifikat.

1 „Gefällt mir“

Sie müssen nur die Vorlage web.ssl verwenden (und nicht die Vorlage web.letsencrypt.ssl). Die Beispiel-YAML enthält die folgenden Zeilen:

  ## Uncomment these two lines if you wish to add Lets Encrypt (https)
  #- "templates/web.ssl.template.yml"
  #- "templates/web.letsencrypt.ssl.template.yml"

Entkommentieren Sie einfach die erste Zeile:

  ## Uncomment these two lines if you wish to add Lets Encrypt (https)
  - "templates/web.ssl.template.yml"
  #- "templates/web.letsencrypt.ssl.template.yml"

Dadurch wird Nginx für SSL mit /shared/ssl/ssl.crt und /shared/ssl/ssl.key eingerichtet. Damit müssen Sie nur sicherstellen, dass Sie ein gültiges Zertifikat und einen gültigen Schlüssel an diesen Pfaden haben. Wenn Sie am Standardort installiert haben, ist der Pfad zu diesem Verzeichnis auf dem Hostsystem /var/discourse/shared/standalone/ssl/.

2 „Gefällt mir“

Danke Jay und Simon, mein Problem ist gelöst.

Am Ende des Tages stellte ich fest, dass das Zertifikat von Cloudflare schuld war. Der Wechsel zur DNS-Herausforderung über Let’s Encrypt funktioniert einwandfrei.

Jetzt habe ich etwas mehr Wissen darüber, wie Discourse im Hintergrund funktioniert. Cool!


Update: Übrigens, ist es möglich, Benutzern während des Einrichtungsprozesses die Wahl zu lassen, wie sie ihr Zertifikat generieren? Für Neulinge wie mich müssen wir die Protokolle tatsächlich lesen und finden, um festzustellen, dass Zertifikate zu Verbindungsfehlern führen.

2 „Gefällt mir“

Nein. Die Einrichtung ist für eine einfache Methode zur Installation ausgelegt, die (meistens) immer funktioniert. Die Installation hinter einer Firewall, die keinen Zugriff aus dem öffentlichen Web zulässt, ist eine Einrichtung, die nur schwer zu unterstützen sein wird.

Ich freue mich, dass Sie es gelöst haben!

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.