X.509 (X.509 v3 证书)
定义
X.509 是 ITU-T 制定的公钥证书标准格式,其互联网配置规范 RFC 5280 规定了 TLS 所用证书的结构和验证方法。
X.509 规定了证书里包含什么、如何签名。一张 v3 证书由“待签名部分”和签发者的签名组成,待签名部分包括版本、序列号、签名算法、颁发者名称、有效期、主体名称、主体公钥,以及 SAN、基本约束 等扩展。整个结构用 ASN.1 描述、DER 编码;常见的 -----BEGIN CERTIFICATE----- 形式即 PEM,只是把 DER 字节做了 Base64 编码。
为什么重要
浏览器、OpenSSL、Java keytool 等所有检查或验证证书的工具读取的都是同一套 X.509 字段,弄懂这些字段,报错信息就容易看懂了:域名写在 SAN 中,信任判断依赖颁发者和各类扩展,有效期字段决定是否提示过期。字段的具体约束和路径验证算法以 RFC 5280 为准。国密 SM2 证书同样沿用 X.509 结构,只是签名算法和公钥算法不同。阿里云、腾讯云按 Nginx、Apache、IIS 等服务器类型提供不同格式的下载包,里面装的也是同一张 X.509 证书。
例子
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 邮件、代码签名、客户端认证用的都是同一格式,用途由扩展决定。