Sto cercando di configurare la ricezione di email per un’istanza discourse self-hosted dietro un reverse proxy (http(s), SMTP). Dominio pubblico: public.example.com, host dietro reverse proxy: internal.example.com. Ho seguito questo manuale ma sono bloccato potenzialmente a causa di un errore del certificato. Sto usando certificati autofirmati per la crittografia interna tra il reverse proxy e i container discourse. Il container di posta sembra avere un problema con il certificato autofirmato presentato dal container discourse, anche se è un certificato concatenato. Cosa ho sbagliato o come posso eseguire ulteriori debug del problema?
L’output del log (rilevante) del container di posta (./launcher logs mail-receiver) è:
May 21 15:34:06 internal-mail-receiver postfix/qmgr[101]: BA3E16FDE7: from=<foo@example.com>, size=3836, nrcpt=1 (queue active)
<23>May 21 15:34:06 receive-mail[113]: Recipient: nobody@public.example.com<19>May 21 15:34:06 receive-mail[113]: Failed to POST the e-mail to https://internal.example.com/admin/email/handle_mail: SSL_connect returned=1 errno=0 state=error: certificate verify failed (unable to get local issuer certificate) (OpenSSL::SSL::SSLError)<19>May 21 15:34:06 receive-mail[113]: /usr/lib/ruby/2.7.0/net/protocol.rb:44:in `connect_nonblock'
/usr/lib/ruby/2.7.0/net/protocol.rb:44:in `ssl_socket_connect'
/usr/lib/ruby/2.7.0/net/http.rb:1009:in `connect'
/usr/lib/ruby/2.7.0/net/http.rb:943:in `do_start'
/usr/lib/ruby/2.7.0/net/http.rb:932:in `start'
/usr/lib/ruby/2.7.0/net/http.rb:1483:in `request'
/usr/local/lib/site_ruby/mail_receiver/internal_mail_receiver.rb:43:in `process'
/usr/local/bin/receive-mail:13:in `<main>'May 21 15:34:06 internal-mail-receiver postfix/pipe[112]: BA3E16FDE7: to=<nobody@public.example.com>, relay=discourse, delay=0.39, delays=0.19/0.01/0/0.2, dsn=4.3.0, status=deferred (temporary failure)
La parte (rilevante) del file di configurazione mail-receiver.yml del container di posta è:
env:
POSTCONF_smtpd_tls_key_file: /ssl/ssl.key
POSTCONF_smtpd_tls_cert_file: /ssl/ssl.crt
POSTCONF_smtpd_tls_security_level: may
DISCOURSE_MAIL_ENDPOINT: 'https://internal.example.com/admin/email/handle_mail'
volumes:
- volume:
host: /var/discourse/shared/standalone/ssl
guest: /ssl
La chiave privata ssl.key contiene la chiave privata del server (interno). Il certificato concatenato ssl.crt contiene: server-cert + ca-cert (come nuovo utente non mi è permesso caricare un file, quindi al momento non posso fornire l’ssl.crt).