Проблема с mail-receiver и самоподписанным сертификатом?

Я пытаюсь настроить входящую почту для самохостинговой установки Discourse за обратным прокси (http(s), SMTP). Публичный домен: public.example.com, хост за прокси: internal.example.com. Я следовал этой инструкции, но застрял, возможно, из-за ошибки сертификата. Я использую самоподписанные сертификаты для внутреннего шифрования между обратным прокси и контейнерами Discourse. Похоже, что контейнер почты имеет проблему с самоподписанным сертификатом, представленным контейнером Discourse, хотя это цепочечный сертификат. Что я сделал не так или как можно продолжить отладку?

(Релевантный) вывод логов контейнера mail-in (./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)

(Релевантная часть) файла конфигурации mail-receiver.yml контейнера почты:

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

Приватный ключ ssl.key содержит приватный ключ (внутреннего) сервера. Цепочечный сертификат ssl.crt содержит: серверный сертификат + CA-сертификат (как новый пользователь я не могу загрузить файл, поэтому пока не могу предоставить ssl.crt)

Переменные окружения smtpd_tls относятся к серверу smtpd, то есть к той части, с которой будут взаимодействовать другие почтовые серверы при доставке писем. Когда он пытается доставить письмо на конечную точку handle_mail на internal.example.com, используемый Ruby не доверяет вашему центру сертификации (CA), и поэтому не может доверять вашему самоподписанному сертификату.

Чтобы это работало, я думаю, у вас есть два варианта. Первый — изменить файл mail-receiver.yml, чтобы включить в контейнер ваш корневой сертификат CA, чтобы Ruby начал ему доверять. Я не помню точно, как это должно выглядеть, но это будет примерно то же самое, что и настройка доверия Ruby к новому CA на любой Linux-системе, только через файл yml контейнера.

Другой вариант — просто изменить DISCOURSE_MAIL_ENDPOINT, заменив internal. на public., чтобы соединение осуществлялось через ваш прокси-сервер, у которого, предположительно, есть сертификат, которому можно доверять по умолчанию.

Спасибо за помощь, всё сработало именно так!
(сначала я, в своей наивности, полагал, что вся связь между контейнерами будет происходить напрямую, между двумя контейнерами)

Связь действительно происходит напрямую между двумя контейнерами, просто вы настроили контейнер Discourse на использование HTTPS с самоподписанным сертификатом, что меняет требуемый метод связи.