X.509 Certificate
X.509 是一种通用的数字证书标准,广泛用于 TLS/SSL 协议、数字签名、加密通信等场景。它定义了数字证书的格式和验证方法。
X.509 证书的结构
一个 X.509 证书的核心内容包含以下部分:
1. 版本 (Version)
指明证书使用的 X.509 标准版本(通常为 v3)。
当前广泛使用的是 v3,支持扩展字段。
2. 序列号 (Serial Number)
证书颁发机构 (CA) 分配的唯一标识,用于区分不同的证书。
3. 签名算法 (Signature Algorithm)
表明证书签名使用的算法,如
SHA256-RSA。此字段同时指示如何验证证书的合法性。
4. 颁发者 (Issuer)
表示签发此证书的证书颁发机构 (CA) 的信息(如国家、机构名等)。
这是一个 X.500 格式的名称,如:
C=CN, O=Example CA, CN=Example Root CA
5. 有效期 (Validity)
包括两个字段:
Not Before: 证书开始生效的时间。Not After: 证书到期的时间。
6. 使用者 (Subject)
表示此证书的持有者(如域名、组织名称等)。
格式与
Issuer类似,例如:C=CN, O=Example Organization, CN=www.example.com
7. 使用者公钥 (Subject Public Key Info)
包含公钥的类型(如 RSA、ECDSA)和公钥数据。
用于加密和签名验证。
8. 扩展字段 (Extensions)
提供额外的功能和信息(v3 特有)。
Key Usage: 指明证书用途(如数字签名、密钥加密)。
Extended Key Usage (EKU): 指明更具体的用途(如 HTTPS 服务器、代码签名)。
Subject Alternative Name (SAN): 支持多个域名或 IP 地址。
CRL Distribution Points: 指定证书吊销列表 (CRL) 的 URL。
9. 签名 (Signature)
由 CA 使用其私钥对上述内容签名,确保数据完整性和来源可信性。
X.509 证书的签发过程
申请者生成密钥对 (Key Pair Generation)
用户生成一对密钥(公钥和私钥)。
公钥会包含在证书中,私钥由用户自行保管。
提交 CSR (Certificate Signing Request)
用户创建一个证书签名请求 (CSR),包含以下信息:
公钥
使用者信息(如域名、组织)
签名(由用户私钥签名)
CSR 提交给证书颁发机构 (CA)。
CA 验证申请者身份
CA 验证用户提供的信息是否属实(如验证域名的所有权)。
签发证书
CA 生成证书,包含申请者的公钥及其他信息。
使用 CA 的私钥对证书内容签名。
分发证书
签发后的证书交给用户,用于安全通信或身份验证。
X.509 证书的验证过程
验证证书链 (Certificate Chain)
检查证书是否由可信的根 CA 或中间 CA 签发。
验证链条中的所有证书都有效且未过期。
验证签名
使用颁发者(Issuer)字段对应 CA 的公钥,验证签名字段。
确保证书内容未被篡改。
检查有效期
确保证书的当前时间在有效期范围内。
检查吊销状态
查询 CRL 或 OCSP,看证书是否被吊销。
验证扩展字段
检查扩展字段是否符合期望用途(如服务器证书必须包含
Extended Key Usage的 TLS 标记)。
可视化理解 X.509 证书
树形结构
X.509 Certificate
├── Version: v3
├── Serial Number: 123456789
├── Signature Algorithm: SHA256-RSA
├── Issuer: C=CN, O=Example CA, CN=Root CA
├── Validity
│ ├── Not Before: 2025-01-01
│ ├── Not After: 2026-01-01
├── Subject: C=CN, O=Example Org, CN=www.example.com
├── Public Key Info
│ ├── Algorithm: RSA
│ ├── Public Key: <Key Data>
├── Extensions
│ ├── Key Usage: Digital Signature, Key Encipherment
│ ├── Subject Alternative Name: www.example.com, example.com
│ ├── CRL Distribution Points: http://crl.example.com
└── Signature: <Signature Data>