App指南之:搞定公钥与签名

218 阅读5分钟

各位开发者伙伴们!大家好,很多刚接触APP开发的小伙伴,都会被APP备案的各种“奇葩”要求搞得头大🤯 特别是那个“公钥”和“签名MD5/SHA-1值”,每次都得翻半天资料,一不小心就掉坑里。

别慌!今天我决定把压箱底的干货掏出来,整理成一篇“保姆级”教程。无论你是安卓老兵还是iOS专家,跟着这篇文章走,保证你分分钟搞定这些烦人的信息,把宝贵的时间还给代码!🚀

image.png

流程概览:一张图看懂所有步骤

在开始之前,咱们先上“地图”,免得在技术细节里迷路。我把整个流程绘制成了一张图,建议收藏备用!

graph TD
    subgraph "安卓 (Android) 签名与公钥"
        A["1. 准备好签名文件 (.keystore)"] --> B{"2. 获取签名指纹 (MD5)"};
        B -- "✅ 推荐方法" --> C["使用Jadx GUI工具打开APK<br>直接查看签名信息"];
        B -- "备用方法 (JDK 8+ 可能无效)" --> D["执行 keytool -list 命令"];
        A --> F["3. 使用 keytool 导出证书 (.crt)"];
        F --> G{"4. 安装 OpenSSL (如果需要)"};
        G --> H["5. 使用 openssl 提取公钥"];
    end

    subgraph "苹果 (iOS) 签名与公钥"
        I["1. 打开'钥匙串访问'应用"] --> J["2. 找到你的发布证书"];
        J --> K["3. 查看详情, 复制SHA-1指纹"];
        J --> L["4. 右键导出证书 (.cer)"];
        L --> M["5. 使用 openssl 提取公钥"];
    end

    S["开始备案"] --> A;
    S --> I;
    C --> Z["🎉 填入备案系统"];
    D --> Z;
    H --> Z;
    K --> Z;
    M --> Z;

第一部分:安卓 (Android) 篇 - 坑多?不怕!

安卓这边因为环境多样性,坑确实不少,我们一个一个来填平。

1. APP包名 (Package Name)

这个最简单,就是你项目 build.gradle 文件里的 applicationId,直接复制就行。

2. 签名MD5值 (Signature MD5 Value)

这是第一个大坑!很多人发现用官方命令拿不到MD5了。

传统方法(JDK 8+ 可能失效 ⚠️)

传统上我们用 keytool 命令:

keytool -list -v -keystore [你的签名文件.keystore] -alias [你的别名]

但如果你用的是JDK 8以上的版本,大概率是看不到MD5指纹的,因为官方觉得它不够安全就给“优化”掉了。

image.png

终极解决方案:Jadx大法 (强烈推荐 👍)

别再折腾旧版JDK了!我给兄弟们推荐一个神器:Jadx。这是一个强大的反编译工具,查看签名信息简直是小菜一碟。

  1. 下载 Jadx: 前往 Jadx GitHub Releases 下载最新版。
  2. 构建APK: 在Android Studio里正常构建你的 release 版APK安装包。
  3. 打开APK: 运行Jadx,直接把你的APK文件拖进去。
  4. 查找签名: 在左侧导航栏找到 APK signature 或者在顶部菜单栏 Tools -> APK signature,点开它。你会看到一个无比清晰的证书信息列表,MD5、SHA-1、SHA-256应有尽有!截图保存,随时取用!

3. 公钥 (Public Key)

获取公钥分两步:先导出证书,再提取公钥。

第一步:导出证书文件

还是用 keytool 命令,这次我们是导出证书。

keytool -export -rfc -keystore [你的签名文件.keystore] -alias [你的别名] -file certificate.crt

执行后,你会在当前目录下得到一个 certificate.crt 文件。

第二步:提取公钥 (需要OpenSSL)

接下来用 openssl 命令从证书里把公钥“揪”出来。

openssl x509 -in certificate.crt -pubkey -noout

执行成功后,终端会打印出以 -----BEGIN PUBLIC KEY----- 开头的一大段文本,把它完整地(包括首尾标记) 复制下来,这就是备案要的公钥!

Windows上没有 openssl 命令怎么办?

别担心,几行命令搞定安装。

方法一:使用 Chocolatey (推荐) 打开 PowerShell (管理员权限),运行:

# 如果没有安装Chocolatey,先运行这句来安装
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('[https://community.chocolatey.org/install.ps1](https://community.chocolatey.org/install.ps1)'))

# 然后安装OpenSSL
choco install openssl

安装后重启终端即可使用 openssl 命令。

方法二:手动下载安装

  1. 访问 Win32/Win64 OpenSSL 官方二进制文件下载页
  2. 下载适合你系统的版本(Light版就足够了)。
  3. 安装后,记得把它的 bin 目录(例如 C:\Program Files\OpenSSL-Win64\bin)添加到系统的 PATH 环境变量里。

第二部分:苹果 (iOS) 篇 - 优雅且直接

相比安卓,iOS这边要统一和简单得多,基本都是图形化操作。

1. Bundle ID

这个不用多说,Xcode项目 General -> Identity -> Bundle Identifier,复制即可。

2. 签名SHA-1值 (Signature SHA-1 Value)

  1. 在你的Mac上,按 Command + 空格,搜索并打开 “钥匙串访问 (Keychain Access)” 应用。
  2. 左上角选“登录”,左下角选“我的证书”。
  3. 在列表中找到你的苹果发布证书,通常叫 Apple Distribution: ...
  4. 双击它,在弹出的详情窗口里,找到 “SHA-1 指纹”,复制那串十六进制码。
  5. 格式化:把所有空格和冒号都去掉,变成一串连续的字符。例如:
    • 原始值: D1 38 45 FC ... A1 A2
    • 备案需要: D13845FC...A1A2

3. 公钥 (Public Key)

同样是两步走,操作更简单。

  1. 导出证书: 在“钥匙串访问”里,右键点击你的发布证书,选择 “导出...”
  2. 保存文件: 格式选择 “证书 (.cer)”,保存到桌面。
  3. 提取公钥: 打开Mac的“终端”应用,运行 openssl 命令(Mac自带,无需安装):
    # 假设你把证书保存在桌面
    openssl x509 -in ~/Desktop/your_cert_name.cer -pubkey -noout
    
  4. 同样,将输出的 -----BEGIN PUBLIC KEY----- 整块内容复制下来即可。

总结

好了,各位伙伴,到这里,备案需要的所有签名和公钥信息应该都到手了。总结一下关键点:

  • 安卓MD5:别死磕 keytool,直接用 Jadx 看APK,省时省力。
  • Windows OpenSSL:用 Chocolatey 一键安装,告别环境变量配置烦恼。
  • iOS:所有操作都在 “钥匙串访问” 里,图形化界面,清晰明了。

希望这篇“接地气”的指南能帮你扫清备案路上的障碍。如果觉得有用,别忘了点赞、分享给更多需要的朋友!👍 下次再见!