SSL 錯誤:找不到從葉證書到任何根的路徑。可能缺少中間證書
我已經使用 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,我可以通過埠 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
TLS_CERTFILE=/etc/courier/certificates/certificate.pem
該文件應該是 cert.pem 和 chain.pem 的組合 - 這應該與 fullchain.pem 相同。雖然尚不完全清楚您真正在做什麼(您使用的文件名存在一些不匹配,可能是拼寫錯誤),但看起來您正在組合證書和私鑰。