我已经运行了一段时间的 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 只是“神奇地”修复了它,但我想了解这里发生了什么,因为我的 DDG 在 Dovecot 中搜索证书缓存或类似的东西并没有给我任何结果。我在这里遗漏了一些明显的东西吗?似乎我忽略了一些明显的东西,但不知道是什么。
编辑 这基本上在这里得到了回答,但是由于我的 certbot 在 systemctl 计时器而不是 cronjob 上更新,我将尝试在此处为这种情况提供答案,以供将来参考以及与我同船的任何人。
这与Gerald Schneider在这里回答的问题基本相同。但是,由于我的设置不依赖于 cronjob 而是依赖于系统计时器,因此答案略有不同。
Let's Encrypt 至少在 Ubuntu 上可以让您在自动更新通过计时器运行时创建一个挂钩(检查使用
systemctl list-timers
并查看它是否存在)。基本上有两个事件可以挂钩:部署和发布。将您的 bash 脚本分别放在
/etc/letsencrypt/renewal-hooks/deploy
or/etc/letsencrypt/renewal-hooks/post
文件夹中。Deploy 将在每个证书续订时单独运行,所有续订完成后将运行 post。部署脚本确实可以访问 $RENEWED_DOMAINS 和 $RENEWED_LINEAGE 变量。我将以下脚本放在
etc/letsencrypt/renewal-hooks/deploy
:每次重新部署“my.mailserver.com”的证书(显然将其替换为真实域)时,它将重新加载 dovecot conf。希望这可以帮助任何正在寻找这个的人。