SSL 证书解析

粘贴 PEM、Base64,或打开 DER / PKCS #7 文件,查看 SAN、有效期、公钥、扩展和 SCT,并检查证书链的顺序与签名。证书在当前页面内解析,不上传。

  • 在浏览器中处理
  • 数据不离开你的设备
  • 免费 · 无需注册
打开或拖入 PEM、CRT、CER、DER 或 PKCS #7 文件,上限 1 MiB。文件里的私钥块会移除;PKCS #12 文件会被拒绝。
粘贴单张 PEM 证书、整条证书链或不带头尾的 Base64。最多解析前 200 张证书。停止输入 350 毫秒后自动解析。

在当前标签页内解析。私钥块会被跳过,也不会保存。

证书详情 先检查证书链的顺序与签名,再选择证书查看有效期、名称、SAN、公钥、指纹和扩展。输入主机名,与所选证书的 SAN 比较。用结果中的按钮复制 PEM 或建议顺序的证书链。
阅读完整使用指南 SSL 证书解码器:X.509 PEM 字段速查实战指南
示例、说明与常见问题 带实际输出的示例、与同类工具的差别,以及常见问题。

实例:www.baidu.com 返回的证书链

点示例会载入 2026-10-01 用 openssl s_client -showcerts 从 www.baidu.com 取到的 3 张证书。工具给出的结果:

#主题 CN角色由下一张签发
1baidu.com服务器证书签名验证通过
2GlobalSign RSA OV SSL CA 2018中间 CA签名验证通过
3GlobalSign中间 CA颁发者不在输入里

第 3 张是 GlobalSign Root CA - R3 的交叉签名版本,它的颁发者是 CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE。这张老根证书没有发送,客户端信任库里本来就有,所以没有问题。

服务器证书这几项值得看:

  • 主题写成 CN=baidu.com,O=Beijing Baidu Netcom Science Technology Co.\, Ltd.,L=Beijing,ST=Beijing,C=CN。公司名里的逗号按 RFC 4514 转义成 \,,和 openssl x509 -subject -nameopt RFC2253 的输出一致。
  • SAN 有 53 个条目。输入 www.baidu.com 会提示与通配符 *.baidu.com 匹配;通配符只覆盖一级(RFC 9525 §6.3)。
  • 有效期从 2026-07-09 02:32:55 UTC 到 2027-01-24 02:32:55 UTC,工具算出 200 天。两个时间点相差 199 天,但 RFC 5280 把起止两端都算进有效期,多出的 1 秒按 CA/B 论坛 BR §6.3.2 的算法记为 1 天。2026-03-15 起签发的公开信任证书最长 200 天(SC-081 投票),这张正好卡在上限。
  • 3 个证书透明度 SCT,列出日志 ID 和时间戳。

证书链顺序和 Nginx

Nginx 文档要求合并文件里「服务器证书必须在链上的其他证书之前」(Configuring HTTPS servers),TLS 1.3 也规定每张证书后面应是签发它的证书(RFC 8446 §4.4.2)。拼 fullchain.pem 时把顺序弄反,是常见的错误。

把上面 3 张证书倒过来粘贴,工具会提示:顺序不对,或输入里混有不同的链。从服务器证书出发的路径:#3 → #2 → #1。每一级仍显示「签名验证通过」,说明证书是一套的,只是顺序错了。点按建议顺序复制即可得到正确的文件。

只粘贴服务器证书时,卡片会写明颁发者不在输入里,并给出 AIA 里的下载地址。浏览器常会借助它补全缺失的中间证书,但 Java 默认关闭这一功能,Go 的 TLS 也不做(golang/go#31773),应在服务器上补齐。

工具检查哪些问题

  • 外层与 tbsCertificate 内的签名算法是否一致(RFC 5280 §4.1.1.2)。
  • 序列号是否为正数、是否超过 20 字节(§4.1.2.2);时间是否带秒和 Z,2049 年及以前是否用 UTCTime(§4.1.2.5)。
  • 无法识别的关键扩展、重复扩展(§4.2)。
  • 没有 SAN:浏览器不再看 CN,Chrome 从 58 版起移除了 CN 匹配。
  • SHA-1 / MD5 签名、不足 2048 位的 RSA 密钥。
  • 颁发者是否为 CA、是否有 keyCertSign、是否超出路径长度限制。

公钥长度按密钥本身计算:P-521 显示 521 位。指纹卡片给出 DER 的 SHA-256、SHA-1、MD5,以及公钥(SPKI)的 SHA-256 Base64 值,也就是 RFC 7469 的 pin-sha256 格式,Android 的网络安全配置和 OkHttp 证书固定都用这种格式。

支持的输入

  • PEM:CERTIFICATE、旧写法 X509 CERTIFICATE、OpenSSL 的 TRUSTED CERTIFICATE;块前后的文字、CRLF 换行、多余空格都会忽略。
  • 没有 BEGIN / END 行的纯 Base64。
  • 二进制 DER 文件和 PKCS #7(.p7b),载入后会转成 PEM 显示在输入框里。
  • CSR、公钥、CRL 会被识别并说明,不会当成证书。CSR 请用 CSR 解码器。

出错时会指出位置,例如复制时丢了一行 Base64:「第 0 字节处的 Certificate 需要 2543 字节,但只剩 2495 字节」。

与常见工具的差异

2026-10-01 用同一组证书实测:

工具在哪里解析粘贴 4 张证书的链
MySSL 证书查看把证书提交到服务器(/api/v1/tools/cert_decode)只显示第 1 张
SSL Shopper把证书提交到服务器提示无法解析
本工具当前页面内4 张全部解析,并检查顺序和签名

MySSL 把 2026-09-26 22:49:11 UTC 显示为「2026-09-27 06:49:11」,换算成了北京时间但没有标时区,对照 openssl 输出时容易看错。

限制

  • 没有信任库,不查 OCSP / CRL 吊销,也不连接服务器。在线取证书链可以用 openssl s_client -connect 域名:443 -showcerts;查记录用 DNS 查询,看响应头用 HTTP Header 分析器。
  • 签名验证用 Web Crypto:RSA(PKCS #1 v1.5、PSS)、P-256 / P-384 / P-521 的 ECDSA,以及浏览器支持时的 Ed25519。国密 SM2、ML-DSA、Ed448、DSA 的签名会解析,但标为未验证。
  • 名称约束只显示,不套用到服务器证书的域名上。
  • 文件不超过 1 MB,一次最多 200 张证书。

FAQ

证书会上传到服务器吗?

不会。解析由页面里的 JavaScript DER 解析器完成,指纹和签名验证用浏览器自带的 Web Crypto。页面本身和其他 ZeroTool 页面一样加载 Google Analytics 与 AdSense,但它们拿不到你粘贴的内容。

能直接粘贴 Nginx 用的 fullchain.pem 吗?

可以。输入里的每张证书都会解析,工具会检查每张证书后面是否紧跟着签发它的证书,并用下一张证书的公钥验证签名。顺序不对时可以一键按正确顺序复制。

文件里同时有私钥怎么办?

PRIVATE KEY、RSA PRIVATE KEY、EC PRIVATE KEY 等私钥块会被跳过,不解析;含私钥的输入也不会保存到浏览器。.pfx / .p12(PKCS #12)文件不会被打开,请先用 openssl pkcs12 -nokeys 导出证书。

显示的时间是北京时间吗?

不是。所有时间都按 UTC 显示,旁边附上证书里的原始编码(如 260709023255Z)。北京时间要再加 8 小时。

工具能判断浏览器是否信任这张证书吗?

不能。工具没有信任库,也不查吊销状态,只判断你粘贴的链是否完整、顺序是否正确、签名是否对得上。信任与否请用 openssl verify 或操作系统的证书库确认。