Let's encrypt non funzionante per IP dietro firewall

Ciao a tutti,

Dopo aver installato Discourse, ricevo un HTTP 502 e il log dice:

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

Presumo che ciò accada perché Discourse tenta di generare automaticamente un certificato e di verificarlo in modalità HTTP, accedendo all’URL elencato. Tuttavia, il mio IP si trova dietro un firewall istituzionale e quindi non può consentire l’accesso a IP esterni, né alla CA.

Ho anche appreso dal sito web di Let’s Encrypt che la sfida DNS può essere utilizzata se HTTP non è disponibile, ma non sono sicuro di come farlo con Discourse.

Grazie.

1 Mi Piace

Corretto.

Dovresti aver ricevuto un avviso da Discourse-setup che indica che non è stato possibile connettersi.

Non è supportato. Se desideri eseguire Discourse dietro un firewall, dovrai trovare un altro modo per ottenere un certificato. Potresti consultare Consenti SSL / HTTPS per la tua configurazione Docker di Discourse

1 Mi Piace

Ciao @pfaffman, grazie mille per le tue informazioni! Seguendo le istruzioni in quel post, la pagina di benvenuto di Discourse finalmente appare.

Rimane solo un piccolo problema: uso Cloudflare per generare un certificato per il server di origine. Ma quando provo ad accedere alla pagina dal browser, viene visualizzato un avviso NET::ERR_CERT_AUTHORITY_INVALID (anche se posso procedere ignorandolo, ma i miei utenti probabilmente non lo vorranno).

Mi chiedo se questo problema abbia a che fare con Discourse e sono curioso riguardo ai metodi per eseguire il debug di questo problema. Grazie.

Inoltre, poiché sshd.template.yml è deprecato, devo modificare manualmente /etc/nginx/conf.d/discourse..conf per modificare ssl_certificate e ssl_certificate_key in modo che puntino a /shared/ssl/ssh.crt e /shared/ssl/ssh.key (il valore predefinito è /shared/ssl/\u003cdomain name\u003e.cer), altrimenti nginx non funzionerà a causa di problemi con il certificato, lamentandosi come:

[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)

Sto pensando se questo sarĂ  il punto che causa problemi.

Non hai bisogno del template sshd e dovresti rimuovere il riferimento ad esso.

Modificherai solo le altre righe consigliate per inserire le informazioni corrette nella configurazione nginx.

Se ricevi un errore che indica che il certificato non è valido, questo è probabilmente il problema. Avrai bisogno di un certificato valido.

1 Mi Piace

Dovresti semplicemente usare il template web.ssl (e non il template web.letsencrypt.ssl). Lo YAML di esempio contiene le seguenti righe:

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

Basta decommentare il primo:

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

Ciò configurerà nginx per SSL utilizzando /shared/ssl/ssl.crt e /shared/ssl/ssl.key. Con questo, devi solo assicurarti di avere un certificato e una chiave validi in quei percorsi. Supponendo che tu abbia installato nella posizione standard, il percorso di quella directory sul sistema host è /var/discourse/shared/standalone/ssl/.

2 Mi Piace

Grazie Jay e Simon, il mio problema è risolto.

Alla fine ho scoperto che la colpa era del certificato di Cloudflare. Passare alla sfida DNS tramite Let’s Encrypt funziona a meraviglia.

Ora ho un po’ più di conoscenza su come funziona Discourse internamente. Fantastico!

–
Aggiornamento: A proposito, è possibile consentire agli utenti di scegliere come generare il proprio certificato durante il processo di configurazione? Per i nuovi arrivati come me, dovremo effettivamente leggere e trovare i log per scoprire che i certificati portano al fallimento della connessione.

2 Mi Piace

No. La configurazione è progettata per un modo semplice per installarla che (quasi sempre) funziona. L’installazione dietro un firewall che non consente l’accesso dal web pubblico è una configurazione che sarà difficile da supportare.

Sono lieto che tu abbia risolto!

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