• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Hap包签名工具
2
3* 简介
4* 目录
5* 约束
6* 编译构建
7* 说明
8  * 使用说明
9  * 接口说明
10* 相关仓
11
12#### 简介
13
14为了保证OpenHarmony应用的完整性和来源可靠,在应用构建时需要对应用进行签名。经过签名的应用才能在真机设备上安装、运行、和调试。本仓提供了签名工具的源码,包含密钥对生成、CSR文件生成、证书生成、Profile文件签名、Hap包签名等功能。
15
16
17#### 目录
18
19    developtools_hapsigner
20
21    ├── autosign                # 一键签名脚本
22	├── dist                    # SDK预置文件
23    ├── hapsigntool             # 主代码
24          ├──hap_sign_tool      # 主程序入口,完成输入参数的基础校验
25          ├──hap_sign_tool_lib  # 签名工具库,解析命令字和参数列表,实现各模块逻辑功能
26    ├── tools                   # 自动化测试脚本
27
28
29
30#### 约束
31Hap包签名工具基于Java语言开发,需要在Java8以上Java环境运行
32(附:一键签名等脚本文件基于Python语言开发,使用需配置环境python3.x33#### 编译构建
34
35 1. 该工具基于Gradle 7.1编译构建,请确认环境已安装配置Gradle环境,并且版本正确
36
37        gradle -v
38
39 2. 下载代码,命令行打开文件目录至developtools_hapsigner/hapsigntool,执行命令进行编译打包
40
41        gradle build 或者 gradle jar
42
43 3. 编译后得到二进制文件,目录为: ./hap_sign_tool/build/libs/hap-sign-tool.jar
44
45****
46#### 说明
47##### 使用说明
48
49以下说明中使用jar包为编译构建中生成的二进制文件
50
511.命令行签名
52   命令行签名分为profile文件签名和hap包签名。
53
54   (1)签名profile文件的命令实例如下:
55
56
57```shell
58java -jar hap-sign-tool.jar  sign-profile -keyAlias "oh-profile1-key-v1" -signAlg "SHA256withECDSA" -mode "localSign" -profileCertFile "result\profile1.pem" -inFile "app1-profile-release.json" -keystoreFile "result\ohtest.jks" -outFile "result\app1-profile.p7b" -keyPwd "123456" -keystorePwd "123456"
59```
60该命令的参数说明如下:
61
62    sign-profile : ProvisionProfile文件签名
63         ├── -mode              #签名模式,必填项,包括localSign,remoteSign
64         ├── -keyAlias          #密钥别名,必填项
65         ├── -keyPwd            #密钥口令,可选项
66         ├── -profileCertFile   #Profile签名证书(证书链,顺序为最终实体证书-中间CA证书-根证书),必填项
67         ├── -inFile            #输入的原始Provision Profile文件,必填项
68         ├── -signAlg           #签名算法,必填项,包括SHA256withECDSA / SHA384withECDSA
69         ├── -keystoreFile      #密钥库文件,localSign模式时为必填项,JKS或P12格式
70         ├── -keystorePwd       #密钥库口令,可选项
71         ├── -outFile           #输出签名后的Provision Profile文件,p7b格式,必填项
72
73
74
75(2)签名Hap包的命令实例如下:
76
77
78```shell
79java -jar hap-sign-tool.jar sign-app -keyAlias "oh-app1-key-v1" -signAlg "SHA256withECDSA" -mode "localSign" -appCertFile "result\app1.pem" -profileFile "result\app1-profile.p7b" -inFile "app1-unsigned.zip" -keystoreFile "result\ohtest.jks" -outFile "result\app1-unsigned.hap" -keyPwd "123456" -keystorePwd "123456"
80```
81该命令的参数说明如下:
82
83    sign-app : hap应用包签名
84         ├── -mode              #签名模式,必填项,包括localSign,remoteSign
85         ├── -keyAlias          #密钥别名,必填项
86         ├── -keyPwd            #密钥口令,可选项
87         ├── -appCertFile       #应用签名证书文件(证书链,顺序为最终实体证书-中间CA证书-根证书),必填项
88         ├── -profileFile       #签名后的Provision Profile文件名,p7b格式,必填项
89         ├── -profileSigned     #指示profile文件是否带有签名,1表示有签名,0表示没有签名,默认为1。可选项
90         ├── -inForm            #输入的原始文件的格式,zip格式或bin格式,默认zip格式;可选项
91         ├── -inFile            #输入的原始APP包文件,zip格式或bin格式,必填项
92         ├── -signAlg           #签名算法,必填项,包括SHA256withECDSA / SHA384withECDSA
93         ├── -keystoreFile      #密钥库文件,localSign模式时为必填项,JKS或P12格式
94         ├── -keystorePwd       #密钥库口令,可选项
95         ├── -outFile           #输出签名后的包文件,必填项
96
97
982.一键签名
99
100
101为降低学习成本,提高开发效率,本项目还将基于应用签名工具提供一键签名脚本,免于输入繁杂的参数命令,脚本内容包括生成密钥对、最终实体证书、签名profile包、签名hap包的命令。
102脚本以及配置文件位于目录autosign下:
103
104 - create_root.sh/create_root.bat
105 - create_appcert_sign_profile.sh/create_appcert_sign_profile.bat
106 - sign_hap.sh/sign_hap.bat
107 - createAppCertAndProfile.config
108 - createRootAndSubCert.config
109 - signHap.config
110
111使用指导:
1121. 准备依赖环境python3.5以上
1132. 准备签名工具jar包:hap-sign-tool.jar(参照上文编译生成的产物)
1143. 准备待签名的应用hap包和Provision profile模板文件
1154. 使用文本编辑器编辑createAppCertAndProfile.config,signHap.config修改配置文件中的配置信息:common.keyPwdcommon.issuerKeyPwd 参数值改成自己定义的口令信息
1165. Linux运行create_appcert_sign_profile.sh、Windows运行create_appcert_sign_profile.bat生成签名所需文件
1176. Linux运行sign_hap.sh、Windows运行sign_hap.bat对hap包进行签名
118
119 > 说明:如需自定义生成密钥库文件,根CA,中间CA证书,profile签名证书,可执行以下步骤
120 1.使用文本编辑器编辑createRootAndSubCert.config修改配置文件中的配置信息:common.keyPwdcommon.issuerKeyPwd 参数值改成自己定义的口令信息
121 2.Linux运行 create_root.sh、Windows运行create_root.bat生成所需密钥库文件,根CA,中间CA证书,profile签名证书
122
123
124****
125##### 接口说明
1261.生成密钥对
127
128     generate-keypair : 生成密钥对
129         ├── -keyAlias          # 密钥别名,必填项
130         ├── -keyPwd            # 密钥口令,可选项
131         ├── -keyAlg            # 密钥算法,必填项,包括RSA/ECC
132         ├── -keySize           # 密钥长度,必填项,RSA算法的长度为2048/3072/4096,ECC算法的长度NIST-P-256/NIST-P-384
133         ├── -keystoreFile      # 密钥库文件,必填项,JKS或P12格式
134         ├── -keystorePwd       # 密钥库口令,可选项
135
1362.生成证书签名请求
137
138    generate-csr : 生成证书签名请求
139         ├── -keyAlias          # 密钥别名,必填项
140         ├── -keyPwd            # 密钥口令,可选项
141         ├── -subject           # 证书主题,必填项
142         ├── -signAlg           # 签名算法,必填项,包括SHA256withRSA / SHA384withRSA / SHA256withECDSA / SHA384withECDSA
143         ├── -keystoreFile      # 密钥库文件,必填项,JKS或P12格式
144         ├── -keystorePwd       # 密钥库口令,可选项
145         ├── -outFile           # 输出文件,可选项,如果不填,则直接输出到控制台
146
1473.生成根CA/中间CA证书
148
149    generate-ca : 生成根CA/中间CA证书,如果密钥不存在,一起生成密钥
150         ├── -keyAlias                        # 密钥别名,必填项
151         ├── -keyPwd                          # 密钥口令,可选项
152         ├── -keyAlg                          # 密钥算法,必填项,包括RSA/ECC
153         ├── -keySize                         # 密钥长度,必填项,RSA算法的长度为2048/3072/4096,ECC算法的长度NIST-P-256/NIST-P-384
154         ├── -issuer                          # 颁发者的主题,可选项,如果不填,表示根CA
155         ├── -issuerKeyAlias                  # 颁发者的密钥别名,可选项,如果不填,表示根CA
156         ├── -issuerKeyPwd                    # 颁发者的密钥口令,可选项
157         ├── -subject                         # 证书主题,必填项
158         ├── -validity                        # 证书有效期,可选项,默认为3650天
159         ├── -signAlg                         # 签名算法,必填项,包括SHA256withRSA / SHA384withRSA / SHA256withECDSA / SHA384withECDSA
160         ├── -basicConstraintsPathLen         # 路径长度,可选项,默认为0
161         ├── -issuerKeystoreFile              # 签发者密钥库文件,可选项,JKS或P12格式
162         ├── -issuerKeystorePwd               # 签发者密钥库口令,可选项
163         ├── -keystoreFile                    # 密钥库文件,必填项,JKS或P12格式
164         ├── -keystorePwd                     # 密钥库口令,可选项
165         ├── -outFile                         # 输出文件,可选项,如果不填,则直接输出到控制台
166
1674.生成应用调试/发布证书
168
169    generate-app-cert : 生成应用调试/发布证书
170         ├── -keyAlias                        # 密钥别名,必填项
171         ├── -keyPwd                          # 密钥口令,可选项
172         ├── -issuer                          # 颁发者的主题,必填项
173         ├── -issuerKeyAlias                  # 颁发者的密钥别名,必填项
174         ├── -issuerKeyPwd                    # 颁发者的密钥口令,可选项
175         ├── -subject                         # 证书主题,必填项
176         ├── -validity                        # 证书有效期,可选项,默认为3650天
177         ├── -signAlg                         # 签名算法,必填项,包括SHA256withECDSA / SHA384withECDSA;
178         ├── -keystoreFile                    # 密钥库文件,必填项,JKS或P12格式
179         ├── -keystorePwd                     # 密钥库口令,可选项
180         ├── -issuerKeystoreFile              # 签发者密钥库文件,可选项,JKS或P12格式
181         ├── -issuerKeystorePwd               # 签发者密钥库口令,可选项
182         ├── -outForm                         # 输出证书文件的格式,包括 cert / certChain,可选项,默认为certChain
183         ├── -rootCaCertFile                  #  outForm为certChain时必填,根CA证书文件
184         ├── -subCaCertFile                   #  outForm为certChain时必填,中间CA证书文件
185         ├── -outFile                         #  输出证书文件(证书或证书链),可选项,如果不填,则直接输出到控制台
186
1875.生成profile调试/发布证书
188
189    generate-profile-cert : 生成profile调试/发布证书
190         ├── -keyAlias                        # 密钥别名,必填项
191         ├── -keyPwd                          # 密钥口令,可选项
192         ├── -issuer                          # 颁发者的主题,必填项
193         ├── -issuerKeyAlias                  # 颁发者的密钥别名,必填项
194         ├── -issuerKeyPwd                    # 颁发者的密钥口令,可选项
195         ├── -subject                         # 证书主题,必填项
196         ├── -validity                        # 证书有效期,可选项,默认为3650天
197         ├── -signAlg                         # 签名算法,必填项,包括SHA256withECDSA / SHA384withECDSA;
198         ├── -keystoreFile                    # 密钥库文件,必填项,JKS或P12格式
199         ├── -keystorePwd                     # 密钥库口令,可选项
200         ├── -issuerKeystoreFile              # 签发者密钥库文件,可选项,JKS或P12格式
201         ├── -issuerKeystorePwd               # 签发者密钥库口令,可选项
202         ├── -outForm                         # 输出证书文件的格式,包括 cert / certChain,可选项,默认为certChain
203         ├── -rootCaCertFile                  #  outForm为certChain时必填,根CA证书文件
204         ├── -subCaCertFile                   #  outForm为certChain时必填,中间CA证书文件
205         ├── -outFile                         #  输出证书文件(证书或证书链),可选项,如果不填,则直接输出到控制台
206
2076.通用证书生成,可以生成自定义证书
208
209    generate-cert : 通用证书生成,可以生成自定义证书
210          ├── -keyAlias                          # 密钥别名,必填项
211          ├── -keyPwd                            # 密钥口令,可选项
212          ├── -issuer                            # 颁发者的主题,必填项
213          ├── -issuerKeyAlias                    # 颁发者的密钥别名,必填项
214          ├── -issuerKeyPwd                      # 颁发者的密钥口令,可选项
215          ├── -subject                           # 证书主题,必填项
216          ├── -validity                          # 证书有效期,可选项,默认为1095天
217          ├── -keyUsage                          # 密钥用法,必选项,包括digitalSignature, nonRepudiation, keyEncipherment,
218          ├                                        dataEncipherment, keyAgreement, certificateSignature, crlSignature,
219          ├                                        encipherOnly和decipherOnly,如果证书包括多个密钥用法,用逗号分隔
220          ├── -keyUsageCritical                  # keyUsage是否为关键项,可选项,默认为是
221          ├── -extKeyUsage                       # 扩展密钥用法,可选项,包括clientAuthentication,serverAuthentication,
222          ├                                        codeSignature,emailProtection,smartCardLogin,timestamp,ocspSignature
223          ├── -extKeyUsageCritical               # extKeyUsage是否为关键项,可选项,默认为否
224          ├── -signAlg                           # 签名算法,必填项,包括SHA256withRSA/SHA384withRSA/SHA256withECDSA/SHA384withECDSA
225          ├── -basicConstraints                  # 是否包含basicConstraints,可选项,默认为否
226          ├── -basicConstraintsCritical          # basicConstraints是否包含为关键项,可选项,默认为否
227          ├── -basicConstraintsCa                # 是否为CA,可选项,默认为否
228          ├── -basicConstraintsPathLen           # 路径长度,可选项,默认为0
229          ├── -issuerKeystoreFile                # 签发者密钥库文件,可选项,JKS或P12格式
230          ├── -issuerKeystorePwd                 # 签发者密钥库口令,可选项
231          ├── -keystoreFile                      # 密钥库文件,必填项,JKS或P12格式
232          ├── -keystorePwd                       # 密钥库口令,可选项
233          ├── -outFile                           # 输出证书文件,可选项,如果不填,则直接输出到控制台
234
2357.ProvisionProfile文件签名
236
237    sign-profile : ProvisionProfile文件签名
238          ├── -mode            # 签名模式,必填项,包括localSign,remoteSign
239          ├── -keyAlias        # 密钥别名,必填项
240          ├── -keyPwd          # 密钥口令,可选项
241          ├── -profileCertFile # Profile签名证书(证书链,顺序为最终实体证书-中间CA证书-根证书),必填项
242          ├── -inFile          # 输入的原始Provision Profile文件,必填项
243          ├── -signAlg         # 签名算法,必填项,包括SHA256withECDSA / SHA384withECDSA
244          ├── -keystoreFile    # 密钥库文件,localSign模式时为必填项,JKS或P12格式
245          ├── -keystorePwd     # 密钥库口令,可选项
246          ├── -outFile         # 输出签名后的Provision Profile文件,p7b格式,必填项
247
2488.ProvisionProfile文件验签
249
250     verify-profile : ProvisionProfile文件验签
251           ├── -inFile       # 已签名的Provision Profile文件,p7b格式,必填项
252           ├── -outFil       # 验证结果文件(包含验证结果和profile内容),json格式,可选项;如果不填,则直接输出到控制台
253
2549.hap应用包签名
255
256     sign-app : hap应用包签名
257          ├── -mode          # 签名模式,必填项,包括localSign,remoteSign,remoteResign
258          ├── -keyAlias      # 密钥别名,必填项
259          ├──-keyPwd         # 密钥口令,可选项
260          ├── -appCertFile   # 应用签名证书文件(证书链,顺序为最终实体证书-中间CA证书-根证书),必填项
261          ├── -profileFile   # 签名后的Provision Profile文件名,profileSigned为1时为p7b格式,profileSigned为0时为json格式,必填项
262          ├── -profileSigned # 指示profile文件是否带有签名,1表示有签名,0表示没有签名,默认为1。可选项
263          ├── -inForm        # 输入的原始文件的格式,zip格式或bin格式,默认zip格式,可选项
264          ├── -inFile        # 输入的原始APP包文件,zip格式或bin格式,必填项
265          ├── -signAlg       # 签名算法,必填项,包括SHA256withECDSA / SHA384withECDSA
266          ├── -keystoreFile  # 密钥库文件,localSign模式时为必填项,JKS或P12格式
267          ├── -keystorePwd   # 密钥库口令,可选项
268          ├── -outFile       # 输出签名后的包文件,必填项
269
27010.hap应用包文件验签
271
272      verify-app : hap应用包文件验签
273         ├── -inFile          # 已签名的应用包文件,zip格式或bin格式,必填项
274         ├── -outCertchain    # 签名的证书链文件,必填项
275         ├── -outProfile      # 应用包中的profile文件,必填项
276
277
278
279
280#### 相关仓
281   不涉及