写点什么

【HarmonyOS NEXT】获取正式应用签名证书的签名信息

作者:冉冉同学
  • 2025-02-19
    山东
  • 本文字数:1326 字

    阅读完需:约 4 分钟

【HarmonyOS NEXT】获取正式应用签名证书的签名信息

1. 背景

在接入微博 SDK 时,发现在微博开放平台中需要填写应用的签名信息。该签名信息需要填写 2 个,一个是 debug【调试】证书对应的应用签名,一个是 release【发布/线上】证书对应的应用签名。




debug 环境下,我们可以通过微博提供的方法获取


new Utility().getSign(true).then(sign => { // true:代表使用appid校验  false: 代表使用证书fingerprint校验      Utils.logger.debug("get sign: " + sign); })
复制代码


或者使用这段代码获取到 signatureInfo.appIdentifier,然后 MD5,即可和上面微博提供的方法获取的值一致


import { bundleManager } from '@kit.AbilityKit'; import { hilog } from '@kit.PerformanceAnalysisKit'; import { BusinessError } from '@kit.BasicServicesKit';  let bundleFlags = bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_SIGNATURE_INFO; try {   bundleManager.getBundleInfoForSelf(bundleFlags).then((data) => {     hilog.info(0x0000, 'testTag', 'getBundleInfoForSelf successfully. Data: %{public}s', JSON.stringify(data));     //data里可以获取到signatureInfo,即应用的签名证书信息   }).catch((err: BusinessError) => {     hilog.error(0x0000, 'testTag', 'getBundleInfoForSelf failed. Cause: %{public}s', err.message);   }); } catch (err) { 生成2048位RSA秘钥  let message = (err as BusinessError).message;   hilog.error(0x0000, 'testTag', 'getBundleInfoForSelf failed: %{public}s', message); }
复制代码


release 环境下,就很特别了,因为 release 证书打出来的包是无法直接安装在手机上的,上面那段代码总不能写到 release 包中,发布应用商店后再通过 log 查看吧 😒

2. 解决方案

直接用使用任意文本编辑器,打开 debug/release 证书的 p7b 文件,搜索 certificate 字段【debug 是 development-certificate,release 是 distribution-certificate】,将证书的内容拷贝存储为 xxx.cer 文件



注意,复制的文本内容需要将\n 替换为回车



替换后的效果



验证提取的证书内容是否有效,可使用这个网站验证 https://www.ssleye.com/ssltool/cer_check.html


3. 通过 keytool 工具获取应用证书签名

keytool 一般在在 DevEco Studio 安装目录下的 jbr/bin 文件夹内,或者你可以通过搜索引擎搜索下载也可以



执行如下命令通过.cer 文件获取证书指纹的 SHA256 值。


keytool -printcert -file xxx.cer
复制代码


将证书指纹中 SHA256 的内容去掉冒号,即为最终要获得的签名指纹



SHA256:9A:9C:2C:D7:1F:B4:F3:85:1C:56:9D:19:FA:04:48:F9:AA:09:A8:A4:6D:D9:1F:F3:90:01:C0:30:08:78:11:A2


SHA256:9A9C2CD71FB4F3851C569D19FA0448F9AA09A8A46DD91FF39001C030087811A2


MD5 之后的值:f0fbcdf1a52ef36f51833ebe01ec65e5


4. 验证手动获取的证书指纹和代码获取的是否一致

4.1 通过微博 SDK 提供的方法获取签名


f0fbcdf1a52ef36f51833ebe01ec65e5


这里通过微博 SDK 方法获取的签名和我们上面手动获取的前面是一致的

4.2 通过 bundleManager.getBundleInfoForSelf 获取的签名信息



这里通过鸿蒙 API 方法获取的签名信息是和微博 SDK 以及我们上面手动获取的前面是一致的

5. 总结

通过上述的验证,通过手动提取 p7b 中的证书内容,在通过 keytool,是可以拿到正式应用签名信息的。

发布于: 刚刚阅读数: 2
用户头像

冉冉同学

关注

还未添加个人签名 2018-05-12 加入

还未添加个人简介

评论

发布
暂无评论
【HarmonyOS NEXT】获取正式应用签名证书的签名信息_鸿蒙_冉冉同学_InfoQ写作社区