安全子系統之應用簽名與驗簽
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包:

三,總結流程
如下圖:
