SSL 错误:未找到从叶证书到任何根证书的路径。可能缺少中间证书

SSL 错误:未找到从叶证书到任何根证书的路径。可能缺少中间证书

我已经使用 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 相同。虽然不完全清楚您实际在做什么(您使用的文件名有些不匹配,可能是拼写错误),但看起来您是在组合证书和私钥。

相关内容