Safe Haven 中文文档 下载 App

Safe Haven APK 签名校验工具,apksigner verify 指纹比对

为什么要验证 APK 签名

Safe Haven 自己在服务端做了签名锁定(Signing-Key Pinning)——首次扫描记录签名哈希、后续每次复扫都比对。但用户在安装前自己也可以验证一遍,特别是在以下场景:

需要什么工具

Android SDK Build Tools 里的 apksigner 工具。安装 Android Studio 后 Build Tools 会自带,或者单独下载:

命令所在路径:

Android/Sdk/build-tools/{version}/apksigner

Windows 上通常是:

C:\Users\{user}\AppData\Local\Android\Sdk\build-tools\{version}\apksigner.bat

Linux / macOS 上:

$ANDROID_HOME/build-tools/{version}/apksigner

怎么验证一个 APK

apksigner verify --print-certs app.apk

这个命令会:

  1. 校验 APK 签名是否完整有效
  2. 打印证书链
  3. 打印 SHA-256 指纹

正常输出会显示:

Verified using scheme v2
Signer #1 certificate DN: CN=ColourSwift, OU=Development, O=ColourSwift Technologies
Signer #1 certificate SHA-256 digest: 9c67f4224888f60e093cf7eab9b194e6d4cd73bb11313638c47b17f0d5f34ec4
Signer #1 certificate source of truth for verify: YES

如果输出里出现 ERROR: APK Signature Scheme v2 not found 或 DOES NOT VERIFY,说明:

Safe Haven 官方客户端的签名指纹

Safe Haven 客户端(com.colourswift.safehaven)由 ColourSwift 官方签名,SHA-256 证书指纹:

9c67f4224888f60e093cf7eab9b194e6d4cd73bb11313638c47b17f0d5f34ec4

怎么比对

  1. 用 apksigner verify --print-certs 打印你拿到的 APK 的指纹
  2. 和上面这个指纹逐字比对
  3. 完全一致 → 官方签名,可以放心安装
  4. 不一致 → 不是官方版本,来源存疑

签名哈希 vs APK 文件哈希

这两个容易搞混:

哈希类型算的是什么用途
APK SHA-256整个 APK 文件的哈希判断文件有没有被篡改(哪怕改一个字节哈希就变)
签名证书 SHA-256APK 签名用的证书的哈希判断签名是否来自正确的签名者(同一个开发者的所有 APK 证书哈希都一样)

Safe Haven 的签名锁定用的是签名证书哈希(后者),不是 APK 文件哈希。因为 APK 文件哈希每次版本更新必然变,但同一个开发者的证书哈希应该保持稳定。

apksigner 的 scheme

Android 有三种 APK 签名方案:

Safe Haven 客户端用的是 v2 scheme(Verified using scheme v2)。v1 签名在某些场景下可以被绕过,所以 v2 是主流安全方案。

其他验证方式

不想装 Android SDK 也能验证:

方法 A:GitHub Release 页面

从 GitHub Releases 下载的 APK,Release Notes 里可能会贴出 SHA-256 哈希(APK 文件哈希,不是签名哈希)。用 certutil -hashfile app.apk SHA256(Windows)或 shasum -a 256 app.apk(Linux/macOS)比对。

方法 B:Safe Haven 客户端内查看

在 Safe Haven 客户端里,每个应用详情页会展示当前记录的签名哈希和APK SHA-256。如果你已经装了这个应用,可以用第三方工具(比如 ApkInfo、Signature Verifier 等)查看本地安装版本的签名哈希,和客户端展示的比对。

签名校验防住了什么

签名防得住:

签名防不住: