Let's encrypt échoue pour l'IP derrière le pare-feu

Bonjour à tous,

Après avoir installé Discourse, je reçois une erreur HTTP 502, et le journal indique :

$ 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/<mon domaine>/<mon domaine>.key
[Tue 06 Jun 2023 01:51:10 PM UTC] Single domain='<mon domaine>'
[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='<mon domaine>'
[Tue 06 Jun 2023 01:51:13 PM UTC] Verifying: <mon domaine>
[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] <mon domaine>:Verify error:202.117.43.203: Fetching http://<mon domaine>/.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)

Je suppose que cela se produit parce que Discourse essaie de générer automatiquement un certificat et de le vérifier en mode HTTP, en accédant à l’URL répertoriée. Cependant, mon adresse IP est sous le pare-feu d’une institution et ne peut donc pas autoriser les adresses IP externes à y accéder, pas plus que l’AC.

J’ai également appris sur le site de Let’s Encrypt que le défi DNS peut être utilisé si le mode HTTP n’est pas disponible, mais je ne suis pas sûr de la manière de procéder avec Discourse.

Merci.

1 « J'aime »

Vous avez raison.

Vous auriez dû recevoir un avertissement de Discourse-setup indiquant qu’il ne pouvait pas se connecter.

Ce n’est pas pris en charge. Si vous souhaitez exécuter Discourse derrière un pare-feu, vous devrez trouver un autre moyen d’obtenir un certificat. Vous pourriez consulter Autoriser le SSL / HTTPS pour votre configuration Docker Discourse

1 « J'aime »

Bonjour @pfaffman, merci beaucoup pour votre information ! En suivant les instructions de ce post, la page d’accueil de Discourse s’affiche enfin.

Il ne reste qu’un seul petit problème : j’utilise Cloudflare pour générer un certificat pour le serveur d’origine. Mais lorsque j’essaie d’accéder à la page depuis le navigateur, un avertissement NET::ERR_CERT_AUTHORITY_INVALID s’affiche (bien que je puisse continuer en l’ignorant, mais mes utilisateurs ne le voudront probablement pas).

Je me demande si ce problème a quelque chose à voir avec Discourse, et je suis curieux de connaître les méthodes pour réellement déboguer ce problème. Merci.

De plus, comme sshd.template.yml est obsolète, je dois modifier manuellement /etc/nginx/conf.d/discourse..conf pour faire pointer ssl_certificate et ssl_certificate_key vers /shared/ssl/ssh.crt et /shared/ssl/ssh.key (la valeur par défaut est /shared/ssl/<nom de domaine>.cer), sinon nginx ne fonctionnera pas en raison de problèmes de certificat, se plaignant comme suit :

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

Je me demande si c’est ce point qui cause des problèmes.

Vous n’avez pas besoin du modèle sshd et devriez supprimer toute référence à celui-ci.

Vous allez simplement modifier les autres lignes recommandées pour insérer les informations correctes dans la configuration nginx.

Si vous obtenez une erreur indiquant que le certificat est invalide, c’est probablement le problème. Vous aurez besoin d’un certificat valide.

1 « J'aime »

Vous devriez simplement utiliser le modèle web.ssl (et pas le modèle web.letsencrypt.ssl). Le fichier yml d’exemple contient les lignes suivantes :

  ## Décommentez ces deux lignes si vous souhaitez ajouter Lets Encrypt (https)
  #- "templates/web.ssl.template.yml"
  #- "templates/web.letsencrypt.ssl.template.yml"

Décommentez simplement la première :

  ## Décommentez ces deux lignes si vous souhaitez ajouter Lets Encrypt (https)
  - "templates/web.ssl.template.yml"
  #- "templates/web.letsencrypt.ssl.template.yml"

Cela configurera nginx pour SSL en utilisant /shared/ssl/ssl.crt et /shared/ssl/ssl.key. Avec cela, vous devez simplement vous assurer d’avoir un certificat et une clé valides à ces emplacements. En supposant que vous avez installé à l’emplacement standard, le chemin vers ce répertoire sur le système hôte est /var/discourse/shared/standalone/ssl/.

2 « J'aime »

Merci Jay et Simon, mon problème est résolu.

Au final, j’ai découvert que c’était le certificat de Cloudflare le coupable. Passer au défi DNS via Let’s Encrypt fonctionne à merveille.

Maintenant, j’ai un peu plus de connaissances sur le fonctionnement interne de Discourse. Cool !


Mise à jour : Au fait, est-il possible de permettre aux utilisateurs de choisir comment ils généreront leur certificat lors du processus d’installation ? Pour les nouveaux venus comme moi, nous devrons lire et trouver les journaux pour découvrir que les certificats entraînent une échec de connexion.

2 « J'aime »

Non. L’installation est conçue pour une manière simple d’installer cela (qui fonctionne presque toujours). L’installation derrière un pare-feu qui n’autorise pas l’accès depuis le web public est une installation qui sera difficile à prendre en charge.

Ravi que vous ayez résolu le problème !

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