Estoy intentando configurar el correo entrante para una instancia de Discourse autoalojada detrás de un proxy inverso (http(s), SMTP). Dominio público: public.example.com, host detrás del proxy inverso: internal.example.com. Seguí este manual pero estoy atascado potencialmente debido a un error de certificado. Estoy usando certificados autofirmados para el cifrado interno entre el proxy inverso y los contenedores de Discourse. El contenedor de correo parece tener un problema con el certificado autofirmado presentado por el contenedor de Discourse, aunque es un certificado en cadena. ¿Qué hice mal o cómo puedo depurar el problema más a fondo?
La salida de registro (relevante) del contenedor de correo (./launcher logs mail-receiver) es:
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 (relevante) del archivo de configuración mail-receiver.yml del contenedor de correo es:
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 clave privada ssl.key contiene la clave privada del servidor (interno). El certificado en cadena ssl.crt contiene: certificado de servidor + certificado de CA (como nuevo usuario no puedo subir un archivo, por lo tanto, actualmente no puedo proporcionar el ssl.crt).