邮件作业在最新更新后失败,证书验证失败(无法获取本地颁发者证书)

抱歉又问了一个重复的问题,因为我看到很多类似的求助请求,例如:https://meta.discourse.org/t/email-notifications-failing-after-update/132271,但我们的错误消息略有不同:

“certificate verify failed (unable to get local issuer certificate)”

这是在 5 月 11 日更新到 2.9.0 之后出现的。
from_version: a76256756fc8442eab960cc1c7d37a737efb5a69,
repository: /var/www/discourse, /var/www/discourse/plugins/styleguide

我在 GitHub 上看到这会影响 sidekiq - 它突然变得更挑剔了吗?我也会与我们的邮件中继联系,但如果我能给他们更具体的信息来解决这个问题,或者如果问题出在我的论坛这边(https://forum.solarfarmer.dnv.com/),那将有助于我们更快地排查问题。

感谢任何帮助。

1 个赞

这是与 Email Hostname Certificate Mismatch Causing sidekiq Queue Overload, Severe Site Instability 相同的问题

3 个赞

@RGJ 我尝试运行

openssl s_client -connect  smtp.mydomain.info:25 -starttls smtp -showcerts 2>&1|grep "depth=0"

但它没有显示任何其他域,它只显示与 sidekiq 相同的错误:“无法获取本地颁发者证书”以及其他一些内容。我尝试将 app.yml 的邮件设置更改为我们的邮件中继,然后再改回来,每次都运行 ./launcher rebuild app,但到目前为止都没有奏效。

1 个赞

这可能有三种原因:

  • 证书过期
  • 证书中的主机名与您正在连接的主机名不同
  • 完全没有证书

看起来您遇到了最后一种情况。唯一的解决方法是确保您拥有配置正确的 SMTP 服务器,该服务器支持 STARTTLS 并附有正确的证书。

3 个赞

感谢 @RGJ - 但为什么这个问题只在升级到 2.9.0 版本后才开始出现?是因为 STARTTLS 对此要求的执行更加严格了吗?我们的邮件中继或 app.yml 的邮件配置没有任何变化。网站的 IP 已被邮件中继列入白名单,而邮件中继由 IT 部门维护。我无法控制它。网站的 CNAME 也由我们的 IT 部门控制。他们确实有不同的域名,CNAME 是“dnv.com”,邮件中继是“dnvgl.com”,这会是问题的一部分吗?我正在与我们的 IT 部门并行处理此事,但想尽可能多地向他们提供信息。抱歉我的无知,很多事情都超出了我的能力范围,所以我可能使用了不正确的术语。抱歉 :frowning:

1 个赞

由于 Discourse 在 2.9.0.beta3 和 beta4 之间升级到 Rails 7 进行了更改,从而触发了此问题。

请参阅 Email Hostname Certificate Mismatch Causing sidekiq Queue Overload, Severe Site Instability - #47 by RGJ

3 个赞

我们的IT部门说:“证书(用于邮件中继)没有任何问题,所有证书都已激活并正确配置为与SMTP服务一起使用。其次,我没有听到任何其他使用此邮件中继的服务/客户端出现问题。” :cry:

1 个赞

IT 创建了一个新的 office365 onmicrosoft 邮箱账户,但我仍然遇到问题。现在我收到了 ReadTimeoutSMTPAuthenticationError: Unrecognized authentication type 错误。

我当前的配置:

DISCOURSE_SMTP_ADDRESS: smtp.office365.com
DISCOURSE_SMTP_PORT: 587
DISCOURSE_SMTP_USER_NAME: myusername
DISCOURSE_SMTP_PASSWORD: "mypassword"  # 是否需要引号?
DISCOURSE_SMTP_ENABLE_START_TLS: true  # 这个设置正确吗?
DISCOURSE_SMTP_DOMAIN: outlook.com
DISCOURSE_NOTIFICATION_EMAIL: myusername@mycompany.onmicrosoft.com

其中 my* 是新邮箱账户特有的。

1 个赞

@RGJ 感谢大家的帮助。我终于、终于解决了这个问题。用于 office365 的 调整 是使用 DISCOURSE_SMTP_AUTHENTICATION: login

office365 smtp 服务器和端口配置smtp.office365.com:587,并启用了 STARTTLS,这无论如何都是默认设置。

用户名是组织中使用的 office365 的完整电子邮件地址,通常是 myaccount@mycompany.onmicrosoft.com。这可能与您的通知电子邮件相同,也可能不同。

这是我的最终配置:


  DISCOURSE_SMTP_ADDRESS: smtp.office365.com
  DISCOURSE_SMTP_PORT: 587
  DISCOURSE_SMTP_USER_NAME: myacct@mycompany.onmicrosoft.com
  DISCOURSE_SMTP_PASSWORD: mypassword
  DISCOURSE_SMTP_ENABLE_START_TLS: true
  DISCOURSE_SMTP_DOMAIN: outlook.com
  DISCOURSE_NOTIFICATION_EMAIL: myacct@mycompany.com
  DISCOURSE_SMTP_AUTHENTICATION: login

根据 Mail Tester 的测试,结果是 10 分满分!

2 个赞

我们在这里也遇到了同样的问题,使用的是一个配置正确的 SMTP 服务器,该服务器被许多其他服务使用。该 SMTP 服务器采用了 Let’s Encrypt 颁发的通配符证书。
错误信息为:“(无法获取本地颁发者证书)”

我认为这是一个 bug,正如在 Disabling starttls or certificate verification does not work any more 中所描述的那样。

不过,你说你有一个有效的证书。所以我可能错了。

尝试使用 @RGJ 推荐的命令检查域名

openssl s_client -connect  smtp.mydomain.info:25 -starttls smtp -showcerts 2>&1|grep "depth=0"

确保您的域名与 openssl 返回的证书(如果有)匹配。另请查看上面链接的“邮件主机名证书不匹配导致 sidekiq…”主题。

此外,邮件故障排除指南对我帮助很大。我不得不非常仔细地阅读了几遍,才找到我需要的东西。也许您也能在那里找到一些东西?

1 个赞

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