我已经使用 postfix、postfix-saslauth、courier(mysqlauthd、imap、pop)以及 SPF、DKIM 和 DMARC 等一些良好实践建立了个人邮件服务器。
在过去的 10 年里,这种设置一直运行良好,今天,我第一次尝试通过 GMail 添加其中一个帐户的访问权限,这需要有效的 POP3 服务。我可以通过端口 110 上的 POP3 服务(无安全性和/或加密)成功添加帐户。
当我尝试配置 GMail 以使用安全方式通过 995 端口上的 POP3 服务访问帐户时,出现了问题。执行此操作时,我从 GMAIL 收到以下错误:
SSL error: No path found from the leaf certificate to any root. Maybe an intermediate certificate is missing
我已经下载了 Mozilla Thunderbird,并且可以通过端口 995 上的 POP3 服务下载电子邮件,没有任何问题,所以我的问题是:有人知道如何解决 GMail 的这个问题吗?
以下是我的 courier-pop3d-ssl 配置:
SSLPORT=995
SSLADDRESS=0
SSLPIDFILE=/run/courier/pop3d-ssl.pid
SSLLOGGEROPTS="-name=pop3d-ssl"
POP3DSSLSTART=YES
POP3_STARTTLS=YES
POP3_TLS_REQUIRED=0
COURIERTLS=/usr/bin/couriertls
TLS_STARTTLS_PROTOCOL="$TLS_PROTOCOL"
TLS_CIPHER_LIST="TLSv1:HIGH:!LOW:!MEDIUM:!EXP:!NULL:!aNULL@STRENGTH"
TLS_STARTTLS_PROTOCOL="$TLS_PROTOCOL"
TLS_CERTFILE=/etc/courier/certificates/certificate.pem
TLS_PRIVATE_KEYFILE=/etc/courier/certificates/tls_private_keyfile.pem
TLS_DHPARAMS=/etc/courier/certificates/dhparams.pem
TLS_TRUSTCERTS=/etc/ssl/certs/ca-certificates.crt
TLS_VERIFYPEER=NONE
TLS_CACHEFILE=/var/lib/courier/couriersslimapcache
TLS_CACHESIZE=524288
MAILDIRPATH=Maildir
以下是一些 SSL 证书信息:
## Letsencrypt CRT + Key cert files
cat /etc/letsencrypt/live/mydomain.com/cert.pem /etc/letsencrypt/live/mydomain.com/privkey.pem >> /etc/courier/certificates/letsencrypt-mydomain_com_crt_key.pem
ls -la /etc/courier/certificates/certificate.pem
lrwxrwxrwx 1 root courier 60 Oct 2 20:24 /etc/courier/certificates/certificate.pem -> /etc/courier/certificates/letsencrypt-mydomain_com_key.pem
ls -la /etc/courier/certificates/tls_private_keyfile.pem
lrwxrwxrwx 1 root courier 47 Oct 1 17:45 /etc/courier/certificates/tls_private_keyfile.pem -> /etc/letsencrypt/live/mydomain.com/privkey.pem
我的 SSL 证书是通过 Letsencrypt 生成的:
ls -la /etc/letsencrypt/live/mydomain.com/
total 12
drwxr-xr-x 2 root root 4096 Oct 2 14:35 .
drwx------ 8 root root 4096 Oct 2 14:35 ..
lrwxrwxrwx 1 root root 37 Oct 2 14:35 cert.pem -> ../../archive/mydomain.com/cert1.pem
lrwxrwxrwx 1 root root 38 Oct 2 14:35 chain.pem -> ../../archive/mydomain.com/chain1.pem
lrwxrwxrwx 1 root root 42 Oct 2 14:35 fullchain.pem -> ../../archive/mydomain.com/fullchain1.pem
lrwxrwxrwx 1 root root 40 Oct 2 14:35 privkey.pem -> ../../archive/mydomain.com/privkey1.pem
-rw-r--r-- 1 root root 692 Oct 2 14:35 README
/var/log/mail.log
这是我在GMail 尝试通过端口 995 上的 POP3 服务进行连接时看到的错误:
Oct 2 21:12:15 we pop3d-ssl: Connection, ip=[::ffff:74.120.14.35]
Oct 2 21:12:16 we pop3d-ssl: ip=[::ffff:74.120.14.35], Unexpected SSL connection shutdown.
Oct 2 21:12:16 we pop3d-ssl: Disconnected, ip=[::ffff:74.120.14.35]
我应该在某个地方连接中间证书和叶(服务器)证书吗?怎样连接?按照什么顺序连接?
先谢谢了
解决方案:
根据 courier-mta.org,生成的 TLS_CERTFILE 包括证书和私钥。文件名不能是全世界可读的,并且必须无需密码即可访问,即它不能被加密。
因此,为了解决这个问题,我必须按照严格的顺序连接 Letsencrypt CRT + CHAIN + KEY:
cat /etc/letsencrypt/live/mydomain.com/cert.pem /etc/letsencrypt/live/mydomain.com/chain.pem /etc/letsencrypt/live/mydomain.com/privkey.pem >> /etc/courier/certificates/certificate.pem.mydomain.com
答案1
TLS_CERTFILE = /etc/courier/certificates/certificate.pem
此文件应为 cert.pem 和 chain.pem 的组合 - 应与 fullchain.pem 相同。虽然不完全清楚您实际在做什么(您使用的文件名有些不匹配,可能是拼写错误),但看起来您是在组合证书和私钥。