You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Dovecot与Thunderbird通信时触发sslv3 alert certificate expired错误(SSL警报编号45)

Dovecot与Thunderbird通信时触发sslv3 alert certificate expired错误(SSL警报编号45)

遇到这种情况我太有共鸣了!明明浏览器访问web服务时证书显示正常,但Thunderbird就是连不上邮件服务器,Dovecot日志还报证书过期,咱们一步步来排查解决:

首先先把你拿到的Dovecot报错日志贴出来方便参考:

imap-login: Info: Disconnected (no auth attempts in 0 secs): user=<>, rip=[IP redacted], lip=[IP redacted], TLS handshaking: SSL_accept() failed: error:14094415:SSL routines:ssl3_read_bytes:sslv3 alert certificate expired: SSL alert number 45, session=<Y/pyl7D8zuYXXew+>

核心排查方向:Dovecot加载的证书和Web服务器的证书可能不是同一个!

你提到用的是Let's Encrypt证书,浏览器验证正常是因为Web服务器(比如Nginx/Apache)加载了更新后的证书,但Dovecot可能还在使用旧的过期证书,或者配置的证书路径不对。

  • 检查Dovecot的SSL配置文件
    找到Dovecot的SSL配置项,通常在/etc/dovecot/conf.d/10-ssl.conf文件里,查看ssl_certssl_key这两个参数指向的文件路径,比如:

    ssl_cert = </etc/ssl/certs/mail.yourdomain.com.pem
    ssl_key = </etc/ssl/private/mail.yourdomain.com.key
    

    确认这个路径和Web服务器用的证书路径是否一致,比如很多人会把Web的证书存在/etc/letsencrypt/live/yourdomain.com/下,要是Dovecot指向的是旧的备份文件,那肯定会过期。

  • 验证Dovecot证书的有效期
    用openssl命令直接检查证书文件的有效期:

    openssl x509 -in /etc/ssl/certs/mail.yourdomain.com.pem -text -noout | grep -A 2 "Validity"
    

    看看输出的Not BeforeNot After日期,是不是真的在有效期内。如果显示过期,那就是证书本身的问题,需要重新生成或者替换成Let's Encrypt的新证书。

  • 重启Dovecot服务
    很多时候Let's Encrypt自动更新证书后,只重启了Web服务器,忘了重启Dovecot,导致Dovecot还在内存里加载旧证书。执行重启命令:

    # Systemd系统(Ubuntu 16.04+/CentOS 7+)
    systemctl restart dovecot
    # SysVinit系统(旧版Ubuntu/CentOS)
    service dovecot restart
    
  • 检查证书链完整性
    Let's Encrypt的证书需要完整的证书链(叶证书+中间证书)才能被客户端正常验证。如果Dovecot只配置了单独的叶证书,可能会触发验证失败。可以把Let's Encrypt提供的fullchain.pem作为Dovecot的ssl_cert配置项,这个文件已经包含了完整的证书链。

  • 清除Thunderbird的SSL缓存
    有时候是Thunderbird本地缓存了旧的证书信息,即使服务器端证书更新了,客户端还是用缓存的过期证书验证。操作步骤:

    1. 打开Thunderbird,点击右上角菜单 → 设置
    2. 切换到隐私与安全标签,找到证书区域,点击查看证书
    3. 在弹出的窗口中选择服务器标签,找到你的邮件服务器对应的证书,选中后点击删除
    4. 关闭窗口后重新尝试收邮件,Thunderbird会重新获取服务器的新证书

备注:内容来源于stack exchange,提问作者joseph_morris

火山引擎 最新活动