证书后缀
我们来详细解释一下 key / crt / pem 之间的关系:
一、常见证书与密钥文件后缀
| 文件名扩展名 | 常见用途 | 实际编码/内容 |
|---|---|---|
.key |
私钥文件 | 常见为 PEM 文本,也可能是其他私钥编码;后缀本身不能证明格式 |
.crt / .cer |
X.509 证书 | 可能是 PEM,也可能是 DER 二进制 |
.pem |
PEM 文本封装 | 可以保存证书、私钥、证书链等,具体看 BEGIN ... 标记 |
.p12 / .pfx |
PKCS#12 容器 | 二进制,可同时包含私钥、证书和证书链,通常带密码保护 |
扩展名相同不代表内容相同:私钥与证书是不同对象,不能通过改名或转换格式相互生成。
二、PEM 可以承载多种证书和密钥内容
.pem(Privacy-Enhanced Mail)是一种 Base64 编码的 ASCII 文本格式,广泛用于存储各种加密材料。
它的内容可能是:
- 只包含私钥(文件常被命名为
.key) - 只包含证书(文件常被命名为
.crt/.cer) - 连续包含多张证书,例如站点证书和中间 CA 证书组成的
fullchain.pem
fullchain.pem 通常是“叶子证书 + 中间证书链”,一般不需要把根 CA 证书也发送给客户端。
示例:
1. 私钥 .key / key.pem
-----BEGIN PRIVATE KEY-----
MIIEvAIBADANBgkqhkiG9...
-----END PRIVATE KEY-----
2. 证书 .crt / cert.pem
-----BEGIN CERTIFICATE-----
MIIDdTCCAl2gAwIBAgIJ...
-----END CERTIFICATE-----
3. 完整链 .fullchain.pem
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
三、Nginx / Apache / Java 各如何使用
| 应用 | 需要什么文件 |
|---|---|
| Nginx | ssl_certificate 指向站点证书/证书链,ssl_certificate_key 指向对应私钥;是否叫 .crt / .pem 不是关键,内容格式要被 Nginx 支持 |
| Apache | 同样分别配置证书和私钥,具体指令取决于 Apache / 模块版本 |
| Java keystore | 现代 Java 通常可以直接使用 PKCS#12(.p12 / .pfx);老项目也可能仍使用 JKS |
四、转换方法
# 从 fullchain.pem 提取第一张(叶子)证书;不会同时输出中间证书链
openssl x509 -in fullchain.pem -out cert.crt
# 生成 PKCS#12 / PFX:站点证书 + 私钥 + 中间证书链
openssl pkcs12 -export -out cert.pfx -inkey key.pem -in cert.pem -certfile chain.pem
总结
.pem更准确地说是一种常见的文本编码封装方式;.key/.crt/.cer更多是用途上的文件命名习惯。fullchain.pem通常包含站点证书和中间证书链,不代表一定包含根证书。.key、.crt都可能采用 PEM 编码,也可能不是;不要只看后缀判断格式。- 使用前可以先查看 PEM 的
BEGIN ...标记,或者用openssl x509、openssl pkey等命令确认实际内容。
评论将在接近此处时加载,也可点击立即加载。