安全子系统之应用签名与验签

系统
这是一篇讲解如何生成已经签名的hap包和签名以及验签流程的文章。

[[442372]]

想了解更多内容,请访问:

51CTO和华为官方合作共建的鸿蒙技术社区

https://harmonyos.51cto.com

Guide

这是一篇讲解如何生成已经签名的hap包和签名以及验签流程的文章。

一,应用签名与验签的场景

应用开发阶段:保证安装包发布到设备的过程中没有被篡改,应用完整性校验提供了签名工具,签名证书生成规范,公钥等完整的工具支持我们对自己开发的hap安装包进行签名。

应用安装阶段:系统的用户程序框架子系统在接受安装包之后对hap包进行数据解析,通过应用完整性校验模块的API对签名进行验证,校验成功后才允许安装此hap包。应用完整性校验模块在校验签名数据时,会使用系统预置的公钥证书进行校验。

二,应用验签的流程

hap包的组成图如下:

#星光计划2.0#安全子系统之应用签名与验签-鸿蒙HarmonyOS技术社区

可以看到,经过签名的hap包组成多了签名块组成部分

1.整包验签

整包签名数据块是一个PKCS7格式的签名块(signed data),验签过程包括PKSC7签名验证、哈希比较、证书链验证以及证书链与设备预置根证书的匹配校验。

2.授权文件验签

授权文件数据块是一个PKCS7格式的签名块(signed data),其中PKCS7签名块的内容信息(contentinfo)是授权文件的内容。验签过程包括:PKCS7签名验证、哈希比较、证书链验证以及签发授权文件证书的合法性校验。

3.授权文件内容校验

验签模块将对授权文件内容进行合法性检查。如果授权文件是调试类型,则会比对本机UDID是否在授权文件授权调试的UDID列表中,如果本机UDID在授权文件授权调试的UDID列表中,则会进一步比较授权文件中的调试证书和整包签名使用的证书是否相同,如果相同,则验证通过。

二,应用签名流程

流程图如下:

#星光计划2.0#安全子系统之应用签名与验签-鸿蒙HarmonyOS技术社区

1.生成密钥和证书请求文件:Build > Generate Key and CSR

1.1 使用DevEcoStudio

1.1.1 如果是首次生成密钥文件*.p12点击new,如果本地已有点击choose existing

#星光计划2.0#安全子系统之应用签名与验签-鸿蒙HarmonyOS技术社区

1.1.2 选择密钥文件存储路径,设置密码(密码由数字符号和字母组成)

#星光计划2.0#安全子系统之应用签名与验签-鸿蒙HarmonyOS技术社区

1.1.3 在Gernrete Key填写密钥信息

#星光计划2.0#安全子系统之应用签名与验签-鸿蒙HarmonyOS技术社区

1.1.4 生成csr证书请求文件*.csr,选择文件存储路径即可

#星光计划2.0#安全子系统之应用签名与验签-鸿蒙HarmonyOS技术社区

1.1.5 最后在文件存储路径下生成以下两个文件

#星光计划2.0#安全子系统之应用签名与验签-鸿蒙HarmonyOS技术社区

1.2 使用命令行

1.2.1 用管理员权限打开命令行工具并进到OpenJDK携带的KeyTool工具路径下

#星光计划2.0#安全子系统之应用签名与验签-鸿蒙HarmonyOS技术社区

1.2.2 执行如下命令生成密钥p12

  1. keytool -genkeypair -alias “myApplication_ohos” -keyalg EC -sigalg SHA256withECDSA -dname “C=CN,O=HUAWEI,OU=HUAWEI IDE,CN=myApplication_ohos” -keystore d:\key\myApplication_ohos.p12 -storetype pkcs12 -validity 9125 -storepass 123456Abc -keypass 123456Abc 

1.2.3 执行如下命令生成证书请求文件csr

  1. keytool -certreq -alias “myApplicaiton_ohos” -keystore d:\key\myApplication_ohos.p12 -storetype pkcs12 -file d:\key\myApplication_ohos.csr 

2.生成应用证书文件

2.1 将keytool加到系统环境变量并进到Sdk\toolchains\lib目录下

#星光计划2.0#安全子系统之应用签名与验签-鸿蒙HarmonyOS技术社区

2.2 执行如下命令生成应用证书cer

  1. keytool -gencert -alias “OpenHarmony Application CA” -infile d:\key\myApplication_ohos.csr -outfile d:\key\myApplication_ohos.cer -keystore OpenHarmony.p12 -sigalg SHA384withECDSA -storepass 123456 -ext KeyUsage:“critical=digitalSignature” -validity 3650 -rfc 

3.生成应用Profile文件

在Sdk\toolchains\lib目录下执行如下命令生成profile文件p7b执行如下命令:

  1. java -jar provisionsigtool.jar sign --in UnsgnedReleasedProfileTemplate.json --out d:\key\myApplication_ohos_Provision.p7b --keystore OpenHarmony.p12 --storepass 123456 --alias “OpenHarmony Application Profile Release” --sigAlg SHA256withECDSA --cert OpenHarmonyProfileRelease.pem --validity 365 --developer-id ohosdeveloper --bundle-name myApplication_ohos --distribution-certificate d:\key\myApplication_ohos.cer 

4.配置应用签名信息

打开File > Project Structure,按照下图配置:

#星光计划2.0#安全子系统之应用签名与验签-鸿蒙HarmonyOS技术社区

可以在build.gradle中查看签名的信息:

#星光计划2.0#安全子系统之应用签名与验签-鸿蒙HarmonyOS技术社区

编译完成后在下图取出已经签名的hap包:

#星光计划2.0#安全子系统之应用签名与验签-鸿蒙HarmonyOS技术社区

三,总结流程

如下图:

#星光计划2.0#安全子系统之应用签名与验签-鸿蒙HarmonyOS技术社区

 想了解更多内容,请访问:

51CTO和华为官方合作共建的鸿蒙技术社区

https://harmonyos.51cto.com

 

责任编辑:姜华 来源: 鸿蒙社区
相关推荐

2021-11-18 10:28:03

鸿蒙HarmonyOS应用

2024-01-01 09:08:52

API签名验签

2020-07-20 07:46:01

程序员加签验签

2023-03-01 14:55:09

2020-04-14 11:43:54

Python加密解密授权认证

2023-03-10 18:34:31

2014-09-22 13:31:46

Linux

2022-05-12 12:47:07

SPI主设备通信

2022-05-15 22:34:32

SPI 控制器SPI 子系统

2022-02-16 15:48:26

ACTS应用XTS子系统鸿蒙

2022-02-16 15:39:30

ACTS应用XTS子系统鸿蒙

2021-06-07 08:13:11

LinuxIDLE 子系统

2021-12-07 00:10:25

C# 微信支付

2023-02-26 23:13:24

存储LinuxRAID

2022-01-26 15:16:24

utilsOpenHarmon鸿蒙

2020-11-08 16:16:12

Linux硬盘RAID

2023-04-12 15:31:11

系统服务管理鸿蒙

2016-10-17 08:49:15

WindowsLinuxArch Linux

2022-01-06 16:17:58

鸿蒙HarmonyOS应用

2022-02-17 20:57:07

OpenHarmon操作系统鸿蒙
点赞
收藏

51CTO技术栈公众号