Dovecot颁发的证书过期了?

Gui*_*uke 2 ssl dovecot

我已经运行 Postfix/Dovecot 邮件服务器一段时间了(Ubuntu 服务器 16.04),没有任何重大问题。我还有一个颁发给我的主机名的 Let's Encrypt 证书,我在/etc/dovecot/conf.d/10-ssl.conf. 运行良好,但您可能知道这些有效期只有 90 天。我有 certbot 设置来自动更新这些,这也工作正常。

突然,今天,我的 Thunderbird、客户 Thunderbird 和他的 iPhone 都开始抱怨证书无效。我检查了证书,certbot certificates发现我使用的证书完全有效,没有过期。通过 Thunderbird 检查证书告诉我该证书已在前一天过期,并显示了与当前证书不匹配的哈希值。

所以基本上,Dovecot 似乎正在从某种“缓存”中颁发过期的证书。重新启动 dovecot 只是“神奇地”修复了它,但我想了解这里发生了什么,因为我在 Dovecot 中对证书缓存或类似内容的 DDG 搜索没有得到任何结果。我在这里遗漏了一些明显的东西吗?似乎我忽略了一些显而易见的事情,但无法弄清楚是什么。

编辑 这基本上在这里得到了回答,但由于我的 certbot 在 systemctl 计时器而不是 cronjob 上更新,我将尝试在这里提供这种情况的答案,以供将来参考以及与我有相同情况的任何人。

Gui*_*uke 5

这基本上与 Gerald Schneider在这里回答的问题相同。然而,由于我的设置不依赖于 cronjob 而是依赖于系统计时器,所以答案略有不同。

Let's Encrypt 至少在 Ubuntu 上允许您在自动更新通过计时器运行时创建一个钩子(检查 usingsystemctl list-timers并查看它是否存在)。

基本上有两个事件可以挂钩:部署和发布。将 bash 脚本分别放入/etc/letsencrypt/renewal-hooks/deploy/etc/letsencrypt/renewal-hooks/post文件夹中。部署将在每个证书续订时单独运行,发布将在所有续订完成后运行。

部署脚本确实可以访问 $RENEWED_DOMAINS 和 $RENEWED_LINEAGE 变量。我将以下脚本放入etc/letsencrypt/renewal-hooks/deploy

  1 #!/bin/bash
  2 for domain in $RENEWED_DOMAINS
  3 do
  4         if [ "$domain" = my.mailserver.com ]
  5         then
  6                 doveadm reload >/dev/null
  7         fi
  8 done
Run Code Online (Sandbox Code Playgroud)

每次重新部署“my.mailserver.com”的证书(显然将其替换为真实域)时,都会重新加载 dovecot conf。希望这对任何正在寻找此内容的人有所帮助。