术语表

证书指纹 (Fingerprint,Thumbprint)

最后核实

定义

证书指纹是对证书 DER 编码计算出的哈希值(通常用 SHA-256),用来唯一标识一张证书,它本身并不存储在证书里。

证书指纹(Windows 中称为 Thumbprint)由查看证书的一方自行计算:把证书的 DER 字节输入 哈希函数,例如 SHA-256,得到的摘要就是指纹。由于哈希覆盖了包括 CA 签名在内的所有字段,证书有任何变化,指纹都会不同;即使名称和密钥完全相同,只要序列号不同,两张证书的指纹也不同。

为什么重要

指纹用来精确指代某一张证书:核对服务器实际下发的证书是否就是你部署的那张、在应用程序中把某张证书加入白名单、在证书透明度查询工具里检索证书,或者通过电话、内部通讯等其他渠道确认一张自签名证书。注意每次续期指纹都会变化,所以把证书指纹写死在客户端的做法会在换证时失效;改为对公钥做 证书固定(SPKI 哈希),则能在沿用同一密钥续期时继续有效。在 App 里做证书校验前,务必想清楚续期和换 CA 时怎么办。

例子

openssl x509 -in cert.pem -noout -fingerprint -sha256

输出是一串用冒号分隔的 32 字节十六进制值。

常见误区

  • 指纹写在证书里,并由 CA 签名。 它是本地计算出来的,证书查看器只是为了方便而显示。
  • 显示 SHA-1 指纹说明证书用的是 SHA-1。 指纹算法由查看工具决定,与证书本身的签名算法无关。
  • 同一证书的 PEM 和 DER 文件指纹不同。 指纹基于 DER 编码计算,两者结果相同。

延伸阅读