这个问题很关键,很多人第一次用 Let’s Encrypt 时都容易混淆。下面我详细讲清楚 、
cert.pem、
chain.pem 三者的区别、作用,以及在 Nginx、Apache等不同场景下该用哪一个。
fullchain.pem
🧩 一、Let’s Encrypt 生成的主要证书文件
在 目录下,通常会有以下四个文件:
/etc/letsencrypt/live/<你的域名>/
| 文件名 | 含义 | 内容类型 | 主要用途 |
|---|---|---|---|
|
私钥(Private Key) | 你的网站私钥,只能自己保存,绝不能泄露 | 服务器端用于 TLS 握手时证明身份 |
|
域名证书(End-entity Certificate) | 你的域名对应的单独证书 | 包含你的公钥和域名信息,由 Let’s Encrypt 签发 |
|
中间证书链(Intermediate Certificate) | Let’s Encrypt 的中间 CA 证书 | 用于让客户端验证你的证书链完整性 |
|
完整证书链(Full Certificate Chain) | + 合并后的文件 |
大多数服务器推荐直接使用这个文件 |
🧠 二、各文件的内部结构区别
以命令行查看为例:
# 查看 cert.pem 内容(只含你的域名证书)
openssl x509 -in cert.pem -noout -subject -issuer
# 查看 chain.pem 内容(中间 CA 证书)
openssl x509 -in chain.pem -noout -subject -issuer
# 查看 fullchain.pem 内容(两者合并)
cat fullchain.pem
可以看到:
-----BEGIN CERTIFICATE-----
(你的域名证书)
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
(Let’s Encrypt 中间CA证书)
-----END CERTIFICATE-----
也就是说, 只是
fullchain.pem +
cert.pem 拼在一起。
chain.pem
⚙️ 三、各类程序的使用区别
✅ Nginx
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
Nginx 需要完整证书链,因此必须用
。
fullchain.pem
✅ Apache
SSLCertificateFile /etc/letsencrypt/live/example.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/example.com/chain.pem
Apache 早期版本需分开指定;新版 (>=2.4.8) 可直接使用
。
fullchain.pem
✅ stunnel
cert = /etc/letsencrypt/live/example.com/fullchain.pem
key = /etc/letsencrypt/live/example.com/privkey.pem
stunnel 同样要求完整证书链,因此应使用
而不是
fullchain.pem。
cert.pem
✅ 其他安全应用
这些自定义 TLS 封装程序内部通常调用 OpenSSL:
--tls-certificate /etc/letsencrypt/live/example.com/fullchain.pem
--tls-private-key /etc/letsencrypt/live/example.com/privkey.pem
一样用
,因为客户端需要验证完整链。
fullchain.pem
🧰 四、
chain.pem 的特殊用处
chain.pem
某些系统或客户端(例如 Java Keystore、curl、部分嵌入式设备)只接受中间证书单独导入;
如果你要生成 或
ca-bundle.crt 格式,可用
.p7b 作为中间链输入;
chain.pem
若要验证完整链是否正确,可执行:
penssl verify -CAfile chain.pem cert.pem
✅ 五、总结表格
| 文件 | 包含内容 | 是否包含中间证书 | 通常用在 |
|---|---|---|---|
|
仅你域名的公钥证书 | ❌ | Apache(旧版) |
|
中间CA证书 | ✅(仅中间) | Java、curl导入 |
|
cert.pem + chain.pem | ✅ | Nginx、stunnel、wstunnel 等 |
|
私钥 | — | 所有服务器端 |

💡说明
此图展示了:
浏览器(客户端) → 服务器 fullchain.pem → Let’s Encrypt 中间 CA → 根 CA(系统信任库) 的完整信任链验证流程。
是最常用于配置的文件,因为它一次性包含了服务器证书与中间链。
fullchain.pem
绝不共享,只在服务器本地使用,与证书链配合完成握手签名。
privkey.pem
下面是完整的 TLS 握手序列图 ,
可清晰展示 、
privkey.pem、
cert.pem、
chain.pem 在握手过程中的作用与数据流。
fullchain.pem

🧩 图中关键点说明
| 步骤 | 说明 | 涉及文件 |
|---|---|---|
| ClientHello / ServerHello | 建立连接参数(TLS版本、算法等) | — |
| Certificate | 服务器发出 (即 cert.pem + chain.pem) |
✅ |
| 签名验证 | 客户端用中间CA、根CA验证证书合法性 | chain.pem |
| 私钥签名 | 服务器用 对握手消息签名 |
privkey.pem |
| 握手完成 | 双方生成会话密钥,后续数据加密传输 | — |




















暂无评论内容