#星光计划2.0#安全子系统之应用签名与验签 原创 精华
【本文正在参与51CTO HarmonyOS技术社区创作者激励计划-星光计划2.0】
@toc
Guide
这是一篇讲解如何生成已经签名的hap包和签名以及验签流程的文章。
一,应用签名与验签的场景
应用开发阶段:保证安装包发布到设备的过程中没有被篡改,应用完整性校验提供了签名工具,签名证书生成规范,公钥等完整的工具支持我们对自己开发的hap安装包进行签名。
应用安装阶段:系统的用户程序框架子系统在接受安装包之后对hap包进行数据解析,通过应用完整性校验模块的API对签名进行验证,校验成功后才允许安装此hap包。应用完整性校验模块在校验签名数据时,会使用系统预置的公钥证书进行校验。
二,应用验签的流程
hap包的组成图如下:
可以看到,经过签名的hap包组成多了签名块组成部分
1.整包验签
整包签名数据块是一个PKCS7格式的签名块(signed data),验签过程包括PKSC7签名验证、哈希比较、证书链验证以及证书链与设备预置根证书的匹配校验。
2.授权文件验签
授权文件数据块是一个PKCS7格式的签名块(signed data),其中PKCS7签名块的内容信息(contentinfo)是授权文件的内容。验签过程包括:PKCS7签名验证、哈希比较、证书链验证以及签发授权文件证书的合法性校验。
3.授权文件内容校验
验签模块将对授权文件内容进行合法性检查。如果授权文件是调试类型,则会比对本机UDID是否在授权文件授权调试的UDID列表中,如果本机UDID在授权文件授权调试的UDID列表中,则会进一步比较授权文件中的调试证书和整包签名使用的证书是否相同,如果相同,则验证通过。
二,应用签名流程
流程图如下:
1.生成密钥和证书请求文件:Build > Generate Key and CSR
1.1 使用DevEcoStudio
1.1.1 如果是首次生成密钥文件*.p12点击new,如果本地已有点击choose existing
1.1.2 选择密钥文件存储路径,设置密码(密码由数字符号和字母组成)
1.1.3 在Gernrete Key填写密钥信息
1.1.4 生成csr证书请求文件*.csr,选择文件存储路径即可
1.1.5 最后在文件存储路径下生成以下两个文件
1.2 使用命令行
1.2.1 用管理员权限打开命令行工具并进到OpenJDK携带的KeyTool工具路径下
1.2.2 执行如下命令生成密钥p12
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
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.2 执行如下命令生成应用证书cer
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执行如下命令:
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,按照下图配置:
可以在build.gradle中查看签名的信息:
编译完成后在下图取出已经签名的hap包:
三,总结流程
如下图:
感谢分享,刚好很需要这方面的讲解