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

1. 背景

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


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

typescript 复制代码
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,是可以拿到正式应用签名信息的。

相关推荐
来来走走7 分钟前
Flutter开发 网络请求
android·flutter
Warren983 小时前
Lua 脚本在 Redis 中的应用
java·前端·网络·vue.js·redis·junit·lua
mCell4 小时前
JavaScript 运行机制详解:再谈 Event Loop
前端·javascript·浏览器
独行soc7 小时前
2025年渗透测试面试题总结-18(题目+回答)
android·python·科技·面试·职场和发展·渗透测试
雨白7 小时前
登录和授权:Cookie与Authorization Header机制详解
android
帧栈8 小时前
开发避坑指南(27):Vue3中高效安全修改列表元素属性的方法
前端·vue.js
森之鸟8 小时前
DevEco Studio 6.0.0 元服务页面跳转失败
鸿蒙
max5006008 小时前
基于桥梁三维模型的无人机检测路径规划系统设计与实现
前端·javascript·python·算法·无人机·easyui
前端世界8 小时前
HarmonyOS 实战:用 @Observed + @ObjectLink 玩转多组件实时数据更新
华为·harmonyos
excel8 小时前
使用函数式封装绘制科赫雪花(Koch Snowflake)
前端