主要有以下几种通用格式和包装格式:
- X.509 (核心标准):
- 核心: X.509 本身不是文件格式,而是一系列标准,定义了数字证书(包括公钥证书)的结构和数据字段(如版本、序列号、签名算法、颁发者、有效期、使用者、公钥、扩展项等)。它几乎是所有现代公钥基础设施的基础。
- 编码: X.509 证书信息可以用不同方式编码成文件:
- DER (Distinguished Encoding Rules):
- 描述: 二进制格式。ASN.1 数据结构的严格、确定性二进制编码规则。
- 特点: 紧凑(体积小),最适合计算机处理。不可阅读(人类不可直接阅读)。
- 文件扩展名:
.der
,.cer
,.crt
(有时,但本质仍是 DER 二进制)
- PEM (Privacy-Enhanced Mail):
- 描述: 基于文本的格式。本质上是 DER 编码的 Base64 文本表示(可打印 ASCII 字符),并在文件首尾添加
-----BEGIN CERTIFICATE-----
和-----END CERTIFICATE-----
标签。 - 特点: 人类可读(虽然是 Base64),易于通过文本编辑器查看、复制粘贴(例如配置 Web 服务器)。是 Linux/Unix 世界和 OpenSSL 最常用的格式。
- 文件扩展名:
.pem
,.crt
,.cer
(非常常见),.key
(通常用于私钥)。
- PKCS #7 / Cryptographic Message Syntax (.P7B, .P7C):
- 描述: 一种标准格式,用于封装加密数据,最常见于证书链。它可以包含单个证书,但更常用于打包多个证书(通常不包括私钥)。
- 特点:
- 通常包含使用者证书及其 CA 中间证书(构成证书链)。
- 不包含私钥。
- 常用于 Windows 环境中分发证书链,也用于 Java Keystores 导入。
- 同样支持 DER(二进制)或 PEM(Base64 文本)编码。
- 文件扩展名:
.p7b
,.p7c
(常见于 Windows)。PEM 编码的 PKCS#7 常用.pem
。
- PKCS #12 / Personal Information Exchange (.PFX, .P12):
- 描述: 一种打包格式,旨在安全地传输用户的私钥及其对应的公钥证书,以及(可选)相关的证书链。通常受密码保护。
- 特点:
- 包含私钥(这是它与 .p7b 的关键区别)。
- 包含公钥证书和可能的中间证书(证书链)。
- 二进制格式。
- 常用于在系统、浏览器或应用程序(如 IIS, Apache Tomcat)之间导入/导出证书和私钥对(例如,将服务器证书和私钥从生成环境移动到部署环境)。
- 安全性:文件本身使用强密码加密。
- 文件扩展名:
.pfx
,.p12
- 其他相关格式:
- JWT (JSON Web Token): 虽然主要不是用于存储标准 X.509 证书本身,但 JWTs 可以使用嵌入的 X.509 证书(通常是 PEM 编码的文本)来携带证明信息。这属于特定应用场景下的载体格式。
- FIDO U2F/FIDO2 证书: 用于认证硬件的专用证书格式,结构与标准 X.509 有所不同,通常内置于硬件安全模块中,不是常见的可分发文件格式。
- Certificate Store (.SST): 特定于 Windows 的文件格式,用于导出/导入一组证书到 Windows 证书存储。
总结与关键区别:
格式 | 描述 | 包含内容 | 包含私钥? | 常用扩展名 | 主要用途 |
X.509 (DER) | 核心标准(结构),二进制编码 | 单个公钥证书信息 | No |
| 程序内部处理,存储 |
X.509 (PEM) | X.509 结构,Base64 文本编码 + PEM 标签 | 单个公钥证书信息 | No |
| 配置(Web服务器等),查看,复制粘贴 |
PKCS#7 (.P7B) | 封装格式,用于证书链 | 一个或多个证书(链) | No |
| 分发证书链(尤其Windows) |
PKCS#12 (.PFX) | 安全打包格式 | 私钥 + 公钥证书 + (可选)链 | Yes |
| 在系统间安全传输包含私钥的完整证书对(导入/导出) |
理解要点:
- X.509 是核心: 几乎所有 CA 颁发的公钥证书都基于 X.509 标准来定义其内容。
- 编码 vs. 容器:
.cer
/.crt
/.pem
(通常是 X.509 PEM/DER) 直接存储单个证书信息。.p7b
/.p7c
(PKCS#7) 存储一个或多个证书(证书链)。.pfx
/.p12
(PKCS#12) 存储证书+私钥(+链)。 - 私钥是关键:
.pem
,.crt
,.cer
,.p7b
等不包含私钥。.pfx
/.p12
包含私钥,是受密码保护的安全容器。 - 扩展名不绝对: 文件扩展名可能混淆(如 .crt/.cer 有时指 DER,有时指 PEM)。内容本身(文本标签或二进制编码)才是关键。
在实际应用中,你会经常遇到 CA 提供的证书文件是 .crt
(PEM), .cer
(DER 或 PEM), .pem
, .p7b
(用于链), 或 .pfx
(当包含私钥时)。OpenSSL 等工具可以方便地在这些格式之间进行转换(例如 DER to PEM, PEM to PKCS#7, PEM to PKCS#12 等)。