安全子系統(tǒng)之應(yīng)用簽名與驗簽
51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)
Guide
這是一篇講解如何生成已經(jīng)簽名的hap包和簽名以及驗簽流程的文章。
一,應(yīng)用簽名與驗簽的場景
應(yīng)用開發(fā)階段:保證安裝包發(fā)布到設(shè)備的過程中沒有被篡改,應(yīng)用完整性校驗提供了簽名工具,簽名證書生成規(guī)范,公鑰等完整的工具支持我們對自己開發(fā)的hap安裝包進行簽名。
應(yīng)用安裝階段:系統(tǒng)的用戶程序框架子系統(tǒng)在接受安裝包之后對hap包進行數(shù)據(jù)解析,通過應(yīng)用完整性校驗?zāi)K的API對簽名進行驗證,校驗成功后才允許安裝此hap包。應(yīng)用完整性校驗?zāi)K在校驗簽名數(shù)據(jù)時,會使用系統(tǒng)預(yù)置的公鑰證書進行校驗。
二,應(yīng)用驗簽的流程
hap包的組成圖如下:

可以看到,經(jīng)過簽名的hap包組成多了簽名塊組成部分
1.整包驗簽
整包簽名數(shù)據(jù)塊是一個PKCS7格式的簽名塊(signed data),驗簽過程包括PKSC7簽名驗證、哈希比較、證書鏈驗證以及證書鏈與設(shè)備預(yù)置根證書的匹配校驗。
2.授權(quán)文件驗簽
授權(quán)文件數(shù)據(jù)塊是一個PKCS7格式的簽名塊(signed data),其中PKCS7簽名塊的內(nèi)容信息(contentinfo)是授權(quán)文件的內(nèi)容。驗簽過程包括:PKCS7簽名驗證、哈希比較、證書鏈驗證以及簽發(fā)授權(quán)文件證書的合法性校驗。
3.授權(quán)文件內(nèi)容校驗
驗簽?zāi)K將對授權(quán)文件內(nèi)容進行合法性檢查。如果授權(quán)文件是調(diào)試類型,則會比對本機UDID是否在授權(quán)文件授權(quán)調(diào)試的UDID列表中,如果本機UDID在授權(quán)文件授權(quán)調(diào)試的UDID列表中,則會進一步比較授權(quán)文件中的調(diào)試證書和整包簽名使用的證書是否相同,如果相同,則驗證通過。
二,應(yīng)用簽名流程
流程圖如下:

1.生成密鑰和證書請求文件:Build > Generate Key and CSR
1.1 使用DevEcoStudio
1.1.1 如果是首次生成密鑰文件*.p12點擊new,如果本地已有點擊choose existing

1.1.2 選擇密鑰文件存儲路徑,設(shè)置密碼(密碼由數(shù)字符號和字母組成)

1.1.3 在Gernrete Key填寫密鑰信息

1.1.4 生成csr證書請求文件*.csr,選擇文件存儲路徑即可

1.1.5 最后在文件存儲路徑下生成以下兩個文件

1.2 使用命令行
1.2.1 用管理員權(quán)限打開命令行工具并進到OpenJDK攜帶的KeyTool工具路徑下

1.2.2 執(zhí)行如下命令生成密鑰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 執(zhí)行如下命令生成證書請求文件csr
- keytool -certreq -alias “myApplicaiton_ohos” -keystore d:\key\myApplication_ohos.p12 -storetype pkcs12 -file d:\key\myApplication_ohos.csr
2.生成應(yīng)用證書文件
2.1 將keytool加到系統(tǒng)環(huán)境變量并進到Sdk\toolchains\lib目錄下

2.2 執(zhí)行如下命令生成應(yīng)用證書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.生成應(yīng)用Profile文件
在Sdk\toolchains\lib目錄下執(zhí)行如下命令生成profile文件p7b執(zhí)行如下命令:
- 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.配置應(yīng)用簽名信息
打開File > Project Structure,按照下圖配置:

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

編譯完成后在下圖取出已經(jīng)簽名的hap包:

三,總結(jié)流程
如下圖:

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)