keytool 查看 Keystore 的 MD5 与证书指纹:命令、报错与一键速查

先给结论:看 Keystore 指纹就一条命令,但必须加 -v 参数——不加 -v 只列出 alias 名字,根本不显示 MD5 / SHA1 / SHA256。想单独拿到 MD5,再用 keytool -exportcert 配合 openssl 一步导出最稳,比在终端里肉眼找字符串靠谱。下面按「先看 alias → 再看指纹 → 单独取 MD5」的顺序来。

一、先搞清楚要查什么

一个 .keystore / .jks 文件里可以放多个密钥对,每个密钥对叫一个 alias(别名)。第三方平台要的「签名指纹」指的是某个 alias 对应证书的指纹,不是整个文件。所以任何命令都得先知道 alias 叫什么。

  • SHA1 / SHA256:现在绝大多数平台(Google Play、微信开放平台新版、华为等)要这个。
  • MD5:老接口还在要,尤其一些早期 SDK 和旧版微信开放平台;新项目基本不用。
  • alias:证书昵称,导出和查指纹都要带它。

二、前置:keytool 在哪

keytool 随 JDK 一起装,在 JDK 的 bin 目录下。如果命令行直接敲 keytool 报「不是内部或外部命令」,要么没装 JDK,要么没把 JDK 的 bin 加进 PATH。

# 直接用完整路径(Windows 示例,按你本机 JDK 版本改)
"C:\Program Files\Java\jdk1.8.0_xxx\bin\keytool.exe" -list -keystore your.keystore

# macOS / Linux 一般装了 JDK 就能直接用
keytool -list -keystore your.keystore

实在找不到,先进 JDK 安装目录的 bin 文件夹,在那里打开命令行再执行。

三、第一步:列出所有 alias

不确定 alias 名时,先列出来(只需要 keystore 密码):

keytool -list -keystore your.keystore

输入 keystore 密码后,会打印类似 your_alias, 2026-03-05, PrivateKeyEntry 这样的行,前面的 your_alias 就是要用的别名。

四、第二步:查看某个 alias 的完整指纹(含 MD5 / SHA1 / SHA256)

加 -v 才会输出指纹,这是最容易漏的一步:

keytool -list -v -keystore your.keystore -alias your_alias

输出里会有三段:

MD5:  12:34:56:78:...
SHA1: AB:CD:EF:...
SHA256: ...

如果只写 keytool -list -keystore your.keystore -alias your_alias(没 -v),终端只回一行 alias 信息,看不到任何指纹——很多人卡在这。

五、单独拿 MD5:keytool 导出 + openssl 解析

想直接拿到一行 MD5,不必在 -v 输出里肉眼找,用导出证书再交给 openssl 最干净:

# 导出该 alias 的证书,再用 openssl 打印 MD5 指纹
keytool -exportcert -alias your_alias -keystore your.keystore -file cert.cer
openssl x509 -in cert.cer -noout -fingerprint -md5

# 一行流式写法(不需要落地 cert.cer 文件)
|  |  |
| --- | --- |
keytool -exportcert -alias your_alias -keystore your.keystore | openssl x509 -noout -fingerprint -md5

把 -md5 换成 -sha1 或 -sha256 就能拿对应的指纹。注意 keytool 导出的是 DER 格式,openssl x509 默认就能读,不用额外转。

六、两种密码别搞混

Keystore 有两个密码概念,报错常常源于此:

  • keystore 密码:打开整个文件用的。
  • key(alias)密码:这个 alias 自己的密码,生成时很多人设成和 keystore 密码一样。

上面所有命令默认用 keystore 密码;若 key 密码不同,要补 -keypass 你的key密码。生成时如果两密码设成一样,这里就不用管。

七、六个常见报错对照

现象原因处理
keytool 不是内部或外部命令没装 JDK 或没配 PATH用 JDK/bin 下的完整路径执行;或把 JDK/bin 加入系统 PATH
Keystore was tampered with, or password was incorrectkeystore 密码输错,或文件被改动损坏确认密码(区分大小写);确认文件没传坏;老文件可能用的是旧格式
别名 <x> 不存在alias 名写错先跑「第三步」的 -list 看真实 alias,原样复制
java.io.IOException: Invalid keystore format文件不是 keystore,或路径指错确认路径下是真正的 .keystore/.jks;别把 .cer 或 p12 当 keystore 传
bash: openssl: command not found没装 OpenSSLWindows 装 Git 自带 openssl;macOS/Linux 一般自带;或用 -v 输出里肉眼取指纹
Android 后台填了 SHA1 仍校验失败填错 alias 的指纹,或用了 debug 签名而非发布签名确认填的是发布 keystore 对应 alias 的指纹;debug 和 release 是两套

八、FAQ

Q:jks 和 keystore 有区别吗? 本质是一类东西,都是 Java 的密钥库格式,.jks 是更常见的扩展名。命令完全互通,不用纠结后缀。

Q:MD5 和 SHA1 到底填哪个? 看平台要求。Google Play、新版微信/华为基本要 SHA1 或 SHA256;只有少数老接口还单独要 MD5。不确定就把 SHA1 和 MD5 都准备好,按平台表单填。

Q:怎么确认线上 APK 的签名和我本地 keystore 一致? 用 keytool -printcert -jarfile app-release.apk 直接读 APK 里的证书指纹,和本地 keystore 的 -v 输出对比,一致才说明签名没换。

Q:密码忘了怎么办? keystore 密码没有找回机制,忘了就只能换新的 keystore 重新签名——这也意味着要重新走各平台的签名校验流程,所以密码一定存好。相关流程见站内《Windows 提交 IPA 到 App Store》里的签名与发布部分。

小结

查 Keystore 指纹就三步:-list 看 alias → -list -v 看完整指纹 → 需要单独 MD5 就用 -exportcert 配 openssl 一步导出。记住 -v 是显示指纹的前提,密码分 keystore 和 key 两种,alias 名写错是最常见的低级错误。需要把签名接入发布流程的,回到《Windows 提交 IPA 到 App Store》按步骤走即可。

相关推荐

相关文章
评论(0)
发表评论