X.509 证书解析
把证书文本或二进制文件摊开来看:主体、颁发者、有效期、序列号、公钥、扩展和指纹逐项列出,一条证书链里的每一张分开显示。只读内容,不做签名校验。
也支持拖一个 .pem、.crt、.cer 或 .der 文件到这个面板里;DER 是二进制,读入后不走文本框,直接按字节解析。
手上没有证书文本的话,可以拿本站的证书试试:openssl s_client -connect yjdb.com:443 -showcerts,或者用浏览器打开任意 HTTPS 站点、在地址栏的锁图标里导出证书。
使用说明
PEM 和 DER 装的是同一份 ASN.1 结构,区别只在编码外壳。PEM 把 DER 的二进制做一遍 Base64,再补上 BEGIN CERTIFICATE 和 END CERTIFICATE 两行,纯文本、方便复制粘贴;DER 是原始二进制。因为内核一样,同一张证书的两种写法算出来的 SHA-256 指纹完全相同,页面在输入 DER 时会先按字节解析,输入 PEM 时先拆出 Base64 块再解码成字节,两条路最后都落到同一个解析器上。
解析不等于验证。这里做的是「读」:把证书里写着的字段原样翻译出来,包括主体、颁发者、有效期、公钥和扩展。没有做的是「验」:不检查签名是否由颁发者的私钥产生、不查颁发者的根证书在不在本地信任库里、不请求 CRL 或 OCSP 查吊销状态、也不核对访问的域名和 SAN 是否匹配。所以一张完全不受信任的自签名证书,在这里同样能解析得很漂亮。
这就解释了为什么证书链经常「不受信任」。信任是自下而上成立的:每张证书都要由上一级的私钥签名,一路查到本地信任库里已有的根证书为止,任何一环断了整条链就不成立。常见断点有四种:根证书不在系统的信任库里(自建 CA 最典型);服务器只发叶子证书、没把中间证书一并发出来,客户端拼不出完整链条;中间证书过了有效期;以及证书被吊销但客户端还在用缓存的吊销状态。这几种情况在解析器看来字段都是完整的,问题出在验证阶段。
几个容易看错的字段值得单独说。有效期有两个时间点,编码上有 UTCTime 和 GeneralizedTime 的分界,前者只写两位年份、以 2050 年为界,所以跨这个时间点解析要当心;序列号是颁发者自己给的编号,不是哈希,十六进制和十进制只是同一段字节的两种写法,和 CA 打交道时通常用十六进制那串。SAN 里的每一个 DNS 和 IP 才是浏览器真正拿来做域名匹配的依据,CN 早就不参与匹配了。SKI 与 AKI 是解决链上找父节点的:一张证书的 AKI 应该等于它上级证书的 SKI,两个扩展正好能互相印证。
指纹是对整张证书的 DER 字节做哈希,改一个字节指纹就全变,所以常用来核对下载到的证书和官方公布的是不是同一张,也用于固定证书和证书透明日志里的索引。核对时认准 SHA-256,逐段比对,别只看开头几位。日常排查 HTTPS 问题大多是翻这一页的几个字段:看 SAN 有没有把 www 也写进去、看到期时间还剩多少天、看链上是不是少发了中间证书。需要生成证书请求用CSR 生成,想核对私钥和证书是否配对用RSA 密钥检查,RSA 密钥想转成 JWK 用PEM 与 JWK 互转,不清楚手上这个文件到底是什么用文件类型识别。
常见问题
解析成功就说明这张证书可信吗?
不代表。这一页只读证书里写了什么,不做签名校验,也不去查签发者的根证书是否受信任、证书是否被吊销,所以自签发的证书一样能解析成功。要判断可信度得把证书链交给浏览器或系统去验证,解析结果只是那次验证的输入。
证书还没过期,浏览器却报警告,为什么?
过期只是众多条件里的一条。浏览器还会检查签发者是不是受信任的根、访问的域名有没有出现在 SAN 里、签名是否有效、证书是否被吊销、算法是否还在接受范围内。任何一条不满足都会报警告,和这张证书还剩多少天没有关系。
自签名证书能用在生产环境吗?
对内的系统可以用,但要把根证书装到每一台客户端上,否则访问时一定会报警告。对外的网站不建议:访客不会为你的站点安装根证书,而让用户点过警告等于关掉了整条信任链的保护。对外场景用公开 CA 签发的免费证书更稳妥。
PEM 和 DER 有什么区别?
内容是同一份 ASN.1 结构,区别只在编码外壳。PEM 把 DER 的二进制做一遍 Base64,再用 BEGIN CERTIFICATE 和 END CERTIFICATE 两行包起来,是纯文本、方便复制粘贴;DER 是原始二进制,扩展名常是 .der 或 .cer,不能直接贴进聊天窗口。
为什么浏览器只认 SAN 不认 CN?
这是后来的规范要求。早期证书靠 CN 匹配域名,但一个 CN 只能写一个名字,也不适合塞通配和 IP。现在主流浏览器只看 SAN 里的 DNS 与 IP 项,CN 只当显示用的标签,所以证书里写了 CN 却没配 SAN,访问照样会报不受信任。
指纹有什么用?为什么有两个?
指纹是对整张证书的 DER 字节做哈希得到的固定长度摘要,用来唯一标识一张证书,常用于和别处核对、或者在固定证书的场景里做比对。SHA-1 只有 20 字节,理论上存在碰撞风险,现在只适合用来核对;SHA-256 更安全,比对时建议用它。
为什么 ECDSA 证书也能解析?
解析走的是通用 ASN.1 结构,不依赖公钥算法的具体内容,所以 RSA、ECDSA、Ed25519 都能读出主体、有效期和扩展。区别落在公钥那一栏:RSA 证书显示模数位数,EC 证书显示曲线名。只有真正验证签名时,才必须按算法分别处理。