首页 › 编程开发 › 证书指纹提取
🔧

证书指纹提取

读取 .cer/.crt/.pem/.der/.p7b 证书,算出 MD5/SHA-1/SHA-256 指纹、导出 SPKI 公钥并逐项解析有效期与扩展

拖拽证书文件到此处,或点击选择
支持 .cer / .crt / .pem / .der 的 X.509 证书,可一次选多个文件
PEM 文本与 DER 二进制都能识别,证书链会逐张列出 · 全程在浏览器本地解析,文件不上传

工具介绍

拿到一张证书,最常见的是两个动作:确认它是不是你要的那一张(比对指纹),以及把公钥交出去(导出 PEM)。这两件事原本一条命令就能做完,但手上没有 openssl 环境、或者只是想快速看一眼的时候,直接拖文件更省事。这个工具在浏览器里读文件字节、自己解析 ASN.1 DER,证书内容不发到任何服务器。

能读到什么

  • 三种指纹、四种写法:MD5、SHA-1、SHA-256 同时给出,可按小写无冒号、大写无冒号、大写冒号分隔、小写冒号分隔切换,对照 openssl x509 -fingerprint 与 keytool -printcert 的输出不用手工改格式
  • PEM 与 DER 都认:不靠扩展名判断,先按文本找 -----BEGIN CERTIFICATE-----,找不到再按 DER 结构切段,所以 .cer、.crt、.der 混着拖进来也能读
  • 多证书文件自动拆开:证书链文件和 PKCS#7(.p7b)里的证书会逐个列出并按文件顺序编号,点击即可切换,链里最后一个通常就是站点自己那张
  • 公钥导出:从 SPKI 段直接切出原始 DER 字节,输出 BEGIN PUBLIC KEY PEM、每 64 字符换行的 Base64、或单行 Base64 三种,公钥与证书指纹互不混淆
  • 证书信息逐项解析:版本号、序列号、签名算法、主体与颁发者 DN(按 DER 顺序逐个属性列出)、生效与到期时间(并换算到北京时间,同时给出剩余天数与已过期提示)、公钥算法与位数(RSA 取模数实际位长,EC 给出曲线名)、以及关键扩展的取值
  • 扩展解码:BasicConstraints 的 CA 与 pathLen、KeyUsage 的九个位(附标准英文标识)、ExtendedKeyUsage、SubjectAltName 的 DNS 与 IP 条目、SubjectKeyIdentifier 与 AuthorityKeyIdentifier、CRL 分发点;无法解义的扩展给出名称与字节数,不假装看懂
  • 命令对照区:把当前证书的文件名填进模板,直接给出 openssl 与 keytool 的等价命令,本地复核时照抄即可
  • 无私钥的边界:.p12、.pfx、.keystore、.jks 是含私钥的密钥库,结构与公开证书完全不同,工具会明确拒绝而不是硬解

使用场景

  • 上线前核对服务器上的证书文件和备份里的是不是同一张——比对 SHA-256 指纹比看文件名可靠
  • 浏览器里看到的证书疑似被替换,导出服务器文件算一遍指纹,两边一致才排除中间人
  • 对接方要求提供公钥用于验签,从证书里导出 SPKI 而不是把整张证书发出去
  • 验证 RS256 签名前,先用证书公钥替换 JWKS 里的 n/e 手工比对
  • 看一张证书能不能给别人签发(CA:TRUE 加上 keyCertSign),判断误用中间证书的风险
  • 换证季盘点到期时间,剩余天数直接写在有效期那一行
  • 收到一个只写了 .pem 的文件,先确认它到底是证书、公钥还是私钥

指纹格式对照

写法示例(SHA-1 片段)谁这么输出
大写冒号分隔AA:1B:2C:...openssl -fingerprint、浏览器证书查看器
大写无冒号AA1B2C...keytool 的 SHA1/MD5 行
小写无冒号aa1b2c...代码里做比对、写进配置或工单备注
小写冒号分隔aa:1b:2c:...部分 Windows 证书导出与抓包工具

常见问题

  • 指纹是对什么算的?对整张证书的 DER 编码字节做摘要,不是只对公钥,也不是对 PEM 文本。同一段 DER 无论包成 PEM 还是保持 DER,指纹都一样;一旦 PEM 里的 Base64 被改动过一个字符,指纹必然对不上
  • MD5 指纹还能用吗?作为「两张文件是不是同一张」的比对标识够用,但 MD5 已不能用于抗伪造判断,正式核验请看 SHA-256
  • 为什么提示「内容被截断」?DER 的每个结构都自带长度声明,工具据此判断。如果声明有 1028 字节而文件只有 900 字节,多半是复制粘贴时少了尾部,或者是下载中断——这种证书 openssl 同样会报错
  • 年份怎么还原?X.509 的 UTCTime 只写两位年,按 RFC 5280 约定小于 50 记 20xx、大于等于 50 记 19xx;GeneralizedTime 写四位年。带时区偏移的一律换算成北京时间显示,避免差八小时的误判
  • 导出的公钥能直接给别的程序用吗?能。SPKI 段本身就是完整独立的 DER 结构,包含算法标识与公钥位串,多数语言和库可直接读取 BEGIN PUBLIC KEY
  • 拖进去提示不是证书?工具会分辨内容类型:BEGIN PUBLIC KEY 是裸公钥、BEGIN CERTIFICATE 才是证书,两者结构不同,读错类型的文件不会硬凑出一个结果
  • 没有 https 环境能用吗?能。优先用浏览器原生 WebCrypto 计算摘要,不可用时自动切到内置的纯 JS MD5/SHA-1/SHA-256 实现,本地双击打开网页也能出结果
  • 证书内容会上传吗?不会。文件用 FileReader 读进内存,ASN.1 解析与摘要计算全在浏览器里完成,页面不发任何请求

只想算任意文件的摘要见 文件MD5计算 与 哈希计算器;把单行 Base64 公钥还原成 PEM 或反过来可用 Base64编解码;核对有效期起止时间戳用 时间戳转换;用证书公钥验证签名的令牌结构见 JWT 解析工具。