宝塔邮件服务器第三方应用无法连接
前言
闲来无事,搭建了一个邮局玩,根据官方教程配置的都很好,在宝塔界面收发邮件也一切正常
当我想尝试使用第三方应用来连接协议时,问题出现了
我配置好邮件账号,密码,imap地址,还有端口号时,缺发现程序返回这个报错
2025-02-20 00:52:35,949 - INFO - 开始检查所有邮箱...
2025-02-20 00:52:35,949 - INFO - 检查邮箱: [email protected]
2025-02-20 00:52:37,115 - ERROR - 无法连接到邮箱 [email protected]: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:997)
2025-02-20 00:52:37,116 - INFO - 等待下一次检查...
提示ssl证书的错误,但是我明明配置好证书了,非常的奇怪
百思不得其解的我,开始无限的谷歌,百度,想要从搜索引擎中找到答案
但是我发现这类文章非常少,而且大多数只存在于宝塔社区
搜来搜去就那几个文章,但是官方人员也并没有解决这个问题
他们遇到的问题时,使用foxmail可以收发邮件,但是使用代码来调试就报错了
这下我没办法了,有这个问题,而且一直都有
我只能把报错发给ai,让ai分析一下了
ai就一直说我缺少证书链,但是没给我解决方案,我明明有ssl证书,十分的奇怪
不死心的我,又用代码进行了一次连接,然后查看了邮件服务器的log
2025-02-19T17:03:40.751466+00:00 it-pom-4yxh53 dovecot: imap-login: Disconnected: Connection closed: SSL_accept() failed: error:0A000418:SSL routines::tlsv1 alert unknown ca: SSL alert number 48 (no auth attempts in 0 secs): user=<>, rip=, lip=, TLS handshaking: SSL_accept() failed: error:0A000418:SSL routines::tlsv1 alert unknown ca: SSL alert number 48, session=<1gY8vYEuI/7ehcqM>
ai给我分析的还是缺少证书链,然后我根据ai的提示进行了下面的操作
使用openssl命令测试IMAP服务的SSL/TLS配置:
openssl s_client -connect mail.qaq.al:993 -showcerts
我把返回的内容发给了ai,说我证书缺少中间证书
然后我去let官网下载了中间证书然后加到了宝塔邮件服务器的ssl中
这时候代码的报错变了
无法连接到邮箱 [email protected]: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: Hostname mismatch, certificate is not valid for 'mail.qaq.al'. (_ssl.c:997)
说我的证书主机名不匹配导致的报错
那这下破案了,就是宝塔根据cloud flare自动申请的ssl证书有问题
他申请的是根域证书,不是带前缀的证书!!
解决方案
本来打算是写脚本定时替换的,因为宝塔自动申请的证书有问题
但是我发现,只要再重新添加一个跟邮件域名一样的domain,就可以修复这个bug
例如:
我的a记录是 mail.qaq.al
我的邮件服务域名也是这个
我只需要再添加一个跟我邮件服务域名一样的记录即可,我们的目的不是为了用这个新加的记录,而是使用这个新记录去申请ssl证书
添加成功之后,我们给这个记录申请一个ssl证书
申请成功之后,我们原来的qaq.al 也就变成只有mail.qaq.al这个选项了,然后我们再重新申请一次即可
代码就可以正常调试邮箱了
啊