Problema com mail-receiver e certificado autoassinado?

Estou tentando configurar o recebimento de e-mails para uma instância Discourse auto-hospedada atrás de um proxy reverso (http(s), SMTP). Domínio público: public.example.com, host atrás do proxy reverso: internal.example.com. Segui este manual, mas estou preso, potencialmente devido a um erro de certificado. Estou usando certificados autoassinados para a criptografia interna entre o proxy reverso e os contêineres Discourse. O contêiner de e-mail parece ter um problema com o certificado autoassinado apresentado pelo contêiner Discourse, embora seja um certificado encadeado. O que fiz de errado ou como depurar o problema mais a fundo?
A saída de log (relevante) do contêiner de e-mail (./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)

A parte (relevante) do arquivo de configuração mail-receiver.yml do contêiner de e-mail é:

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

A chave privada ssl.key contém a chave privada do servidor (interno). O certificado encadeado ssl.crt contém: certificado do servidor + certificado da CA (como um novo usuário, não tenho permissão para fazer upload de um arquivo, portanto, atualmente não posso fornecer o ssl.crt).

As variáveis de ambiente smtpd_tls estão relacionadas ao servidor smtpd, ou seja, a parte com a qual outros servidores de e-mail interagirão ao entregar e-mails. Quando ele tenta entregar o e-mail ao endpoint handle_mail em internal.example.com, o que quer que o Ruby esteja usando não confia na sua autoridade certificadora e, portanto, não pode confiar no seu certificado autoassinado.

Para que isso funcione, acho que você tem duas opções. A primeira é modificar mail-receiver.yml para incluir seu certificado de CA raiz no contêiner, de modo que o Ruby confie nele. Não tenho certeza de imediato como isso seria, mas seria basicamente o mesmo que fazer o Ruby confiar em uma nova CA em qualquer sistema Linux, exceto através desse arquivo yml do contêiner.

A outra opção é simplesmente alterar DISCOURSE_MAIL_ENDPOINT de usar internal. para public., fazendo com que ele se conecte através do seu proxy, que presumivelmente tem um certificado que ele poderá confiar por padrão.

Obrigado pela ajuda, funcionou dessa forma!
(inicialmente, meu eu ingênuo assumiu que toda a comunicação entre os contêineres aconteceria diretamente entre os dois contêineres de qualquer maneira)

A comunicação acontece diretamente entre os dois contêineres, é apenas que você configurou seu contêiner Discourse para usar HTTPS com um certificado autoassinado, o que altera o método de comunicação necessário.