mail-receiverと自己署名証明書の問題?

リバースプロキシ(HTTP(S)、SMTP)の背後にあるセルフホスト型 Discourse インスタンスの受信メールを設定しようとしています。パブリックドメイン:public.example.com、リバースプロキシの背後にあるホスト:internal.example.com。このマニュアルに従いましたが、証明書エラーの可能性があるため行き詰まっています。リバースプロキシと Discourse コンテナ間の内部暗号化には自己署名証明書を使用しています。メールコンテナは、それがチェーン証明書であるにもかかわらず、Discourse コンテナが提示する自己署名証明書で問題があるようです。何が間違っていたのか、または問題をさらにデバッグするにはどうすればよいですか?

メール受信コンテナ(./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 には、server-cert + ca-cert が含まれています(新規ユーザーのため、ファイルをアップロードできないため、現時点では ssl.crt を提供できません)。

smtpd_tls 環境変数は、smptd サーバー、つまりメール配信時に他のメールサーバーがやり取りする部分に関連します。その後、internal.example.comhandle_mail エンドポイントにメールを配信しようとすると、Ruby が使用しているものが証明書認証局を信頼しないため、自己署名証明書を信頼できません。

これが機能するためには、2 つの選択肢があると思います。1 つ目は、mail-receiver.yml を変更して、ルート CA 証明書をコンテナーに含めることで、Ruby がそれを信頼するようにすることです。それがどのようなものになるかは、すぐにはわかりませんが、基本的に、そのコンテナーの yml ファイルを介して、Linux システムで新しい CA を信頼させるのと同じになります。

もう 1 つの選択肢は、DISCOURSE_MAIL_ENDPOINTinternal. を使用するものから public. に変更することです。これにより、プロキシ経由で接続され、おそらくデフォルトで信頼できる証明書が使用されるようになります。

「いいね!」 2

ご協力ありがとうございます。その方法でうまくいきました!
(当初、私は単純に、コンテナ間のすべての通信はとにかく2つのコンテナ間で直接行われると想定していました)

「いいね!」 2

コンテナ間では直接通信が行われていますが、Discourseコンテナで自己署名証明書を使用したHTTPSを構成したため、通信に必要な方法が変更されています。

「いいね!」 1

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