Thunderbird 未更新证书,继续使用旧证书并显示已过期

Thunderbird 未更新证书,继续使用旧证书并显示已过期

我有一台电子邮件服务器,其中有 Let's Encrypt SSL 证书,每 3 个月到期一次,certbot 会自动续订。如果我通过浏览器中的网站访问服务器,则会使用正确且最新的 SSL 证书,但 thunderbird 会抱怨 SSL 证书无效,即证书已过期。

投诉通过一个对话框窗口显示,如果我单击通过此窗口查看证书,它会显示一个确实已过期的旧证书。但是,如果我单击“获取证书”按钮,该按钮本身会变灰,但没有其他反应。我尝试在 thunderbird 中右键单击电子邮件地址(帐户)的名称,然后转到“设置”->“安全”,删除了该域的所有证书,但不知何故它仍然存储着旧的存储证书。

我的设置是 dovecot + postfix。

有任何想法吗?

答案1

Thunderbird 并不使用与浏览器相同的服务器来访问邮件。浏览器使用 HTTP/HTTPS 访问 Web 服务器,而 Thunderbird 使用 IMAP/IMAPs 或 POP3/POP3s 协议来接收邮件,使用 SMTP 协议来发送邮件。这些是具有单独配置的独立服务器,这意味着首先需要配置它们以使用适当的证书,并且在证书更新后还必须重新启动它们。

虽然不可能说出你的具体设置包括什么(编辑:在编辑问题后很明显这是我描述的设置),但常见的设置是使用鸽舍用于接收邮件和后缀用于发送。因此,您可以尝试查看您(未知)系统上的这些软件和配置,并确保每当证书发生更改时,这些软件和配置都会更新并重新启动。

答案2

Dovecot 可能需要重新加载。我遇到的正是 Postfix+Dovecot+certbot 的情况。Certbot 显示证书已续订​​,但服务器仍在使用过期证书。我通过使用 openssl (Ubuntu) 进行测试发现了这一点:

openssl s_client -connect mydomain.com:993 -quiet
depth=2 O = Digital Signature Trust Co., CN = DST Root CA X3
verify return:1
depth=1 C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3
verify return:1
depth=0 CN = mydomain.com
verify error:num=10:certificate has expired
notAfter=Dec  5 15:42:11 2020 GMT
verify return:1
depth=0 CN = mydomain.com
notAfter=Dec  5 15:42:11 2020 GMT
verify return:1
* OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE  AUTH=CRAM-MD5 AUTH=LOGIN AUTH=PLAIN] Dovecot (Ubuntu) ready.
^C

重新加载 Dovecot:

sudo service dovecot reload

对我来说,这足以解决问题。不过,可能还是需要检查服务器是否请求重新启动:

ls -l /var/run/reboot-required

答案3

当我使用 STARTTLS 的提交端口 587 连接到启用 letsencrypt 的 SMTP 服务器 (postfix) 时,我观察到了类似的问题。经过一个小时的调试,我发现 Thunderbird 利用了 TLS 会话恢复,因此没有执行完整的 TLS 握手,因此服务器尚未发送新证书。我还不确定这是 TB 中的错误还是服务器端的错误配置 - 因为现在我已在服务器端将会话过期时间设置为 0s(因此实际上禁用了服务器端会话缓存)并重新启动了 postfix,这立即解决了该问题。

根据该配置,TLS 会话现在应该存储在客户端的相应会话票证中。但是,我还没有发现在哪里这些内容是如何存储的以及如何清除缓存。清除缓存应该是解决该问题的绝对关键。

答案4

感谢 Robert Haller回答我设法解决了这个问题。如果有人遇到这个问题,Thunderbird 看不到新的有效证书,并且使用 dovecot postfix 和 certbot 进行相同的设置,并且 VM 上有多个邮件服务器,那么你可能使用了 sni.map,需要在证书更新后重新映射。所以对我来说,解决方案是:

postmap -F hash:/etc/postfix/sni.map

相关内容