我已经使用 postfix、postfix-saslauth、courier(mysqlauthd、imap、pop)以及 SPF、DKIM 和 DMARC 等一些良好实践设置了个人邮件服务器。
这种设置在过去 10 年中一直运行良好,今天,我第一次尝试通过需要有效 POP3 服务的 GMail 添加其中一个帐户的访问权限。我可以通过端口 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,我可以通过 POP3 服务在端口 995 上毫无问题地下载电子邮件,所以我的问题是:有谁知道如何用 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
该文件应该是 cert.pem 和 chain.pem 的组合 - 这应该与 fullchain.pem 相同。虽然尚不完全清楚您真正在做什么(您使用的文件名存在一些不匹配,可能是拼写错误),但看起来您正在组合证书和私钥。