# X.509（X.509 v3 证书）是什么？定义、例子与常见误区

> X.509 是 ITU-T 制定的公钥证书标准格式，其互联网配置规范 RFC 5280 规定了 TLS 所用证书的结构和验证方法。

Source: https://ssl.sh/zh/glossary/x509/
Last updated: 2026-11-10

X.509 规定了证书里包含什么、如何签名。一张 v3 证书由“待签名部分”和签发者的签名组成，待签名部分包括版本、序列号、签名算法、颁发者名称、有效期、主体名称、主体公钥，以及 [SAN](https://ssl.sh/zh/glossary/san/)、[基本约束](https://ssl.sh/zh/glossary/basic-constraints/) 等扩展。整个结构用 ASN.1 描述、DER 编码；常见的 `-----BEGIN CERTIFICATE-----` 形式即 [PEM](https://ssl.sh/zh/glossary/pem/)，只是把 DER 字节做了 Base64 编码。

## 为什么重要
浏览器、OpenSSL、Java keytool 等所有检查或验证证书的工具读取的都是同一套 X.509 字段，弄懂这些字段，报错信息就容易看懂了：域名写在 SAN 中，信任判断依赖颁发者和各类扩展，有效期字段决定是否提示过期。字段的具体约束和路径验证算法以 [RFC 5280](https://www.rfc-editor.org/rfc/rfc5280) 为准。国密 SM2 证书同样沿用 X.509 结构，只是签名算法和公钥算法不同。阿里云、腾讯云按 Nginx、Apache、IIS 等服务器类型提供不同格式的下载包，里面装的也是同一张 X.509 证书。

## 例子
```bash
openssl x509 -in cert.pem -noout -text
openssl x509 -in cert.pem -outform der -out cert.der
```

第一条命令打印全部字段，第二条把同一张证书从 PEM 转成 DER。

## 常见误区
- **PEM 和 DER 是两种不同的证书。** 它们只是同一个 X.509 结构的两种编码方式。
- **看扩展名就知道格式。** `.crt`、`.cer`、`.pem` 文件都可能是 PEM 或 DER，要看文件内容。
- **X.509 只用于 TLS。** S/MIME 邮件、代码签名、客户端认证用的都是同一格式，用途由扩展决定。

## 相关术语

- [SSL 证书](https://ssl.sh/zh/glossary/ssl-certificate/): SSL 证书是由 CA 签名的 X.509 证书，把公钥与一个或多个域名（或 IP 地址）绑定，供 TLS 客户端验证服务器身份。
- [PEM](https://ssl.sh/zh/glossary/pem/): PEM 是一种把 DER 二进制数据做 Base64 编码、再用 BEGIN 和 END 行包起来的文本格式，是存放证书和私钥最常见的方式。
- [DER](https://ssl.sh/zh/glossary/der/): DER 是 ASN.1 的二进制编码规则，保证每个值只有唯一一种字节表示，X.509 证书和密钥都以它为基础。
- [DN](https://ssl.sh/zh/glossary/distinguished-name/): DN 即可分辨名称，是由 C、O、CN 等属性组成的 X.500 风格结构化名称，用来标识 X.509 证书的主体和颁发者。
- [SAN](https://ssl.sh/zh/glossary/san/): SAN 即主体备用名称，是 X.509 证书中列出其适用的所有域名、IP 地址等身份的扩展，客户端按它校验主机名。
- [基本约束](https://ssl.sh/zh/glossary/basic-constraints/): 基本约束是 X.509 证书扩展，用来声明该证书是否属于 CA，以及其下方还允许出现多少层 CA。
- [证书序列号](https://ssl.sh/zh/glossary/certificate-serial-number/): 证书序列号是 CA 为每张证书分配的正整数，与颁发者名称一起唯一标识一张证书，吊销列表和 OCSP 都靠它定位证书。
- [密钥用途](https://ssl.sh/zh/glossary/key-usage/): 密钥用途是 X.509 证书扩展，限定证书公钥可执行的密码学操作，例如数字签名、密钥加密或签发证书。
