مشكلة مع mail-receiver وشهادة موقعة ذاتياً؟

أحاول إعداد البريد الوارد لمثيل discourse مستضاف ذاتيًا خلف وكيل عكسي (http(s)، SMTP). النطاق العام: 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 تحتوي على: شهادة الخادم + شهادة CA (كمستخدم جديد، لا يُسمح لي بتحميل ملف، وبالتالي لا يمكنني حاليًا تقديم ssl.crt).

تتعلق متغيرات البيئة smtpd_tls بخادم smtpd، أي الجزء الذي ستتفاعل معه خوادم البريد الأخرى عند تسليم رسائل البريد الإلكتروني. عندما يحاول بعد ذلك تسليم البريد الإلكتروني إلى نقطة النهاية handle_mail على internal.example.com، فإن أيًا كان ما تستخدمه Ruby لا يثق في سلطة الشهادات الخاصة بك وبالتالي لا يمكنه الوثوق في شهادتك الموقعة ذاتيًا.

لكي يعمل هذا، أعتقد أن لديك خيارين. الأول هو تعديل mail-receiver.yml لتضمين شهادة CA الجذر الخاصة بك في الحاوية، بحيث تثق بها Ruby. لست متأكدًا مما سيبدو عليه ذلك، ولكنه سيكون أساسًا نفس الشيء مثل جعل Ruby تثق في CA جديد على أي نظام Linux باستثناء ملف yml الخاص بالحاوية.

الخيار الآخر هو فقط تغيير DISCOURSE_MAIL_ENDPOINT من استخدام internal. إلى public.، مما يتسبب في اتصاله عبر الوكيل الخاص بك والذي يفترض أن لديه شهادة سيتمكن من الوثوق بها افتراضيًا.

إعجابَين (2)

شكرًا لمساعدتك، لقد نجح الأمر بهذه الطريقة!
(في البداية، افترضت بسذاجة أن جميع الاتصالات بين الحاويات ستتم مباشرة بين الحاويتين على أي حال)

إعجابَين (2)

يحدث الاتصال مباشرة بين الحاويتين، ولكنك قمت بتكوين حاوية Discourse الخاصة بك لاستخدام HTTPS بشهادة موقعة ذاتيًا، مما يغير الطريقة المطلوبة للتواصل.

إعجاب واحد (1)

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