smtpdに関連するTLSエラーを解決するには?

smtpdに関連するTLSエラーを解決するには?

ログに次のものが見つかりました。

sssd_kcm[425899]: Starting up
postfix/submission/smtpd[425910]: initializing the server-side TLS engine
postfix/submission/smtpd[425910]: connect from unknown[::1]
postfix/submission/smtpd[425910]: warning: connect to Milter service unix:/run/spamass-milter/spamass-milter.sock: No such file or directory
postfix/submission/smtpd[425910]: setting up TLS connection from unknown[::1]
postfix/submission/smtpd[425910]: unknown[::1]: TLS cipher list "aNULL:-aNULL:HIGH:MEDIUM:+RC4:@STRENGTH"
postfix/submission/smtpd[425910]: SSL_accept:before SSL initialization
postfix/submission/smtpd[425910]: SSL_accept:before SSL initialization
postfix/submission/smtpd[425910]: SSL_accept:SSLv3/TLS read client hello
postfix/submission/smtpd[425910]: SSL_accept:SSLv3/TLS write server hello
postfix/submission/smtpd[425910]: SSL_accept:SSLv3/TLS write change cipher spec
postfix/submission/smtpd[425910]: SSL_accept:TLSv1.3 write encrypted extensions
postfix/submission/smtpd[425910]: SSL_accept:SSLv3/TLS write certificate
postfix/submission/smtpd[425910]: SSL_accept:TLSv1.3 write server certificate verify
postfix/submission/smtpd[425910]: SSL_accept:SSLv3/TLS write finished
postfix/submission/smtpd[425910]: SSL_accept:TLSv1.3 early data
postfix/submission/smtpd[425910]: SSL3 alert read:fatal:bad certificate
postfix/submission/smtpd[425910]: SSL_accept:error in error
postfix/submission/smtpd[425910]: SSL_accept error from unknown[::1]: -1
postfix/submission/smtpd[425910]: warning: TLS library problem: error:0A000412:SSL routines::sslv3 alert bad certificate:ssl/record/rec_layer_s3.c:1586:SSL alert number 42:
postfix/submission/smtpd[425910]: lost connection after STARTTLS from unknown[::1]
postfix/submission/smtpd[425910]: disconnect from unknown[::1] ehlo=1 starttls=0/1 commands=1/2

これらの2行は、ユーザーがユーザー認証フォームの[パスワードリセット]ボタンを押すたびに表示されます。これは、現在VPSでホストされているすべてのDjangoプロジェクトで発生します。したがって、サーバーはリセットを開始するために電子メールを送信しません。代わりに、ユーザーのブラウザに「サーバーエラー(500)」が表示されます。この現象は新しいものです。このページは数ヶ月間働いてきました。

ログエントリを見ると、証明書が正しくないことを示すようです。問題を解決するために、このサーバーのすべての証明書を更新しましたが、問題は解決しません。リモートクライアントとローカルクライアントを介したメール送信は正常に機能します。

この状況を解決する方法についての指示を受けたいと思います。

#会議後のgrep証明書|

smtp_tls_CAfile = /etc/pki/tls/certs/ca-bundle.crt
smtp_tls_CApath = /etc/pki/tls/certs
smtp_tls_cert_file =
smtp_tls_dcert_file =
smtp_tls_dkey_file = $smtp_tls_dcert_file
smtp_tls_eccert_file =
smtp_tls_eckey_file = $smtp_tls_eccert_file
smtp_tls_fingerprint_cert_match =
smtp_tls_key_file = $smtp_tls_cert_file
smtp_tls_scert_verifydepth = 9
smtp_tls_secure_cert_match = nexthop, dot-nexthop
smtp_tls_verify_cert_match = hostname
smtpd_tls_ask_ccert = no
smtpd_tls_ccert_verifydepth = 9
smtpd_tls_cert_file = /etc/letsencrypt/live/site.com/fullchain.pem
smtpd_tls_dcert_file =
smtpd_tls_dkey_file = $smtpd_tls_dcert_file
smtpd_tls_eccert_file =
smtpd_tls_eckey_file = $smtpd_tls_eccert_file
smtpd_tls_req_ccert = no
tlsproxy_client_cert_file = $smtp_tls_cert_file
tlsproxy_client_dcert_file = $smtp_tls_dcert_file
tlsproxy_client_eccert_file = $smtp_tls_eccert_file
tlsproxy_client_scert_verifydepth = $smtp_tls_scert_verifydepth
tlsproxy_tls_ask_ccert = $smtpd_tls_ask_ccert
tlsproxy_tls_ccert_verifydepth = $smtpd_tls_ccert_verifydepth
tlsproxy_tls_cert_file = $smtpd_tls_cert_file
tlsproxy_tls_dcert_file = $smtpd_tls_dcert_file
tlsproxy_tls_eccert_file = $smtpd_tls_eccert_file
tlsproxy_tls_req_ccert = $smtpd_tls_req_ccert

ベストアンサー1

簡潔なバージョン: 私はいつも愚かでした。

長いバージョン: 問題の原因はまさに私の鼻の下にあった。 Djangoプロジェクト/settings.pyファイルには次の割り当てがあります。

EMAIL_HOST = "localhost"

開発目的のため、これは理解できます。この値を本番環境に適用することを忘れました。奇妙なことに、これは実際にしばらく効果がありました。関連するDjangoシェルで次のスクリプトを実行するまで、割り当てによってTLSハンドシェイクが失敗することに気づいていませんでした。

from django.core.mail import send_mail

send_mail(
    "Test Subject",
    "Mr Elephant is tusking the microphone",
    "[email protected]",
    ["[email protected]"],
    fail_silently=False,
)

出力:

Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/srv/project/venv/lib64/python3.11/site-packages/django/core/mail/__init__.py", line 87, in send_mail
    return mail.send()
           ^^^^^^^^^^^
  File "/srv/project/venv/lib64/python3.11/site-packages/django/core/mail/message.py", line 298, in send
    return self.get_connection(fail_silently).send_messages([self])
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/srv/project/venv/lib64/python3.11/site-packages/django/core/mail/backends/smtp.py", line 127, in send_messages
    new_conn_created = self.open()
                       ^^^^^^^^^^^
  File "/srv/project/venv/lib64/python3.11/site-packages/django/core/mail/backends/smtp.py", line 92, in open
    self.connection.starttls(context=self.ssl_context)
  File "/usr/lib64/python3.11/smtplib.py", line 790, in starttls
    self.sock = context.wrap_socket(self.sock,
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib64/python3.11/ssl.py", line 517, in wrap_socket
    return self.sslsocket_class._create(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib64/python3.11/ssl.py", line 1108, in _create
    self.do_handshake()
  File "/usr/lib64/python3.11/ssl.py", line 1379, in do_handshake
    self._sslobj.do_handshake()
ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: Hostname mismatch, certificate is not valid for 'localhost'. (_ssl.c:1006)

最後の行が私のためにやった。もちろん、これはログに正しいエントリをトリガーしました。私は非常に申し訳ありません!

修理する:

EMAIL_HOST = "mail.servername.com"

おすすめ記事