# 证书指纹是什么？定义、例子与常见误区

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

Source: https://ssl.sh/zh/glossary/certificate-fingerprint/
Last updated: 2026-11-10

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

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

## 例子
```bash
openssl x509 -in cert.pem -noout -fingerprint -sha256
```

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

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

## 相关术语

- [哈希函数](https://ssl.sh/zh/glossary/hash-function/): 哈希函数（密码学哈希函数）把任意长度的输入映射为固定长度的摘要，且在计算上无法逆推输入，也无法找到摘要相同的两个输入。
- [SHA-256](https://ssl.sh/zh/glossary/sha-256/): SHA-256 是 SHA-2 哈希家族中输出 256 位摘要的成员，由 NIST FIPS 180-4 规定，是当今 TLS 证书签名和指纹的标准哈希算法。
- [SHA-1](https://ssl.sh/zh/glossary/sha-1/): SHA-1 是 1995 年发布的 160 位哈希函数，已出现实际可行的碰撞攻击，公开信任的 TLS 证书早已不再允许使用它签名。
- [证书序列号](https://ssl.sh/zh/glossary/certificate-serial-number/): 证书序列号是 CA 为每张证书分配的正整数，与颁发者名称一起唯一标识一张证书，吊销列表和 OCSP 都靠它定位证书。
- [证书锁定](https://ssl.sh/zh/glossary/certificate-pinning/): 证书锁定是客户端侧的一项检查：只有服务器证书链中包含事先配置好的特定证书或公钥时，客户端才接受这次连接。
- [DER](https://ssl.sh/zh/glossary/der/): DER 是 ASN.1 的二进制编码规则，保证每个值只有唯一一种字节表示，X.509 证书和密钥都以它为基础。
- [X.509](https://ssl.sh/zh/glossary/x509/): X.509 是 ITU-T 制定的公钥证书标准格式，其互联网配置规范 RFC 5280 规定了 TLS 所用证书的结构和验证方法。
