蓝香蕉代码 |【鸿蒙电脑开发命令行-签名篇与本机hdc shell】
(二进制签名工具),是用于在OpenHarmony PC/2in1设备上对二进制文件进行代码签名的工具,支持通过命令行的方式对标准ELF文件进行代码签名或打印已签名ELF的证书信息。工具,我们在前面编译C/C++中就使用到了终端,终端中自带了一些命令行,但是不能满足我们使用,很多开发常用的命令工具都需要通过其他来源搞定,我们主要使用。按照官方指导,需要准备证书请求文件,但是只讲了在DevEco中生
鸿蒙电脑开发命令行-签名篇与本机hdc shell
目录
鸿蒙电脑命令行
鸿蒙电脑提供了终端工具,我们在前面编译C/C++中就使用到了终端,终端中自带了一些命令行,但是不能满足我们使用,很多开发常用的命令工具都需要通过其他来源搞定,我们主要使用DevBox补充命令,我们先看看这两个工具提供的命令如何查看
系统自带的终端
打开系统的终端,在右上角点击?进入用户手册,可以查看命令,不太好的是,无法直接搜索
DevBox包含的命令
DevBox包含的命令比较多,常见的基础编译开发工具相对较全,也支持命令搜索,但是这些命令仍需要在系统的终端中使用
签名
知道了如何使用命令,我们来看下如何针对二进制进行签名
签名工具binart-sign-tool
在官方指导中,我们可以看到Binary Sign Tool (二进制签名工具),是用于在OpenHarmony PC/2in1设备上对二进制文件进行代码签名的工具,支持通过命令行的方式对标准ELF文件进行代码签名或打印已签名ELF的证书信息。在研究后官方文档后,关键点在-selfSign这个参数,支持自签名和证书签名两种行为,我们这里讲下两种签名方式的使用
工具获取
首先是工具获取
Linux/Mac/Windows等交叉编译环境
在非鸿蒙电脑上,需要通过OpenHarmony构建流水线获取
cd ~
wget https://cidownload.openharmony.cn/version/Master_Version/ohos-sdk-full_ohos/20250819_020817/version-Master_Version-ohos-sdk-full_ohos-20250819_020817-ohos-sdk-full_ohos.tar.gz
tar -zvxf version-Master_Version-ohos-sdk-full_ohos-20250819_020817-ohos-sdk-full_ohos.tar.gz
cd ~/ohos-sdk/linux
unzip native-linux-x64-6.0.0.46-Beta1.zip
unzip toolchains-linux-x64-6.0.0.46-Beta1.zip
其中native-linux-x64-6.0.0.46-Beta1.zip解压所在的父目录的全路径为 后续所需要的sdk路径,如:/home/ohos-sdk/linux
工具均在toolchains/lib/binary-sign-tool 、toolchains/hdc 等路径,大家find一下就好,记得指定环境变量。
鸿蒙电脑
在鸿蒙电脑上比较简单,直接升级到对应系统版本后,直接安装应用即可
- 设备:我使用的MateBook Pro已经升级到
6.0.0.115版本,建议升级到该版本以上 - Java:应用市场:BiShengJDK17-OH
- 工具链:应用市场:DevBox



自签名
binary-sign-tool sign -inFile "unsigned.elf" -outFile "signed.elf" -selfSign "1"
假定我们编译好了一个在鸿蒙上的可执行文件(ELF),我们可以通过这个方式进行签名,以我们常说的tree命令举例,编译好的二进制进行自签名如下
binary-sign-tool sign -inFile tree -outFile tree -selfSign "1"
这样生成的二进制就可以在鸿蒙设备上运行了,这个二进制可以放到任意鸿蒙电脑上,在终端中./tree执行即可
如下面这个签名后的文件,通过华为分享到鸿蒙电脑中
在增加了可执行权限后,即可执行二进制(首次执行需要弹窗允许,后续不需要)
chmod +x binname
./binname


以上签名动作无论在哪个平台上进行的,都可以直接运行,这样对于使用来说就相对方便了一些。
证书签名
针对证书签名,我的理解是在需要特定权限时,自签名无法解决,需要通过证书签名(申请二进制证书流程)以下是我进行操作尝试的流程(以鸿蒙电脑举例,都是一样的)
准备好证书请求文件
按照官方指导,需要准备证书请求文件,但是只讲了在DevEco中生成,如果没有安装DevEco则比较麻烦,因此,我们参考流水线的KeyTool流程通过命令的方式生成请求文件
生成.p12密钥库文件
keytool -genkeypair -alias "gdbkey" -keyalg EC -sigalg SHA256withECDSA -dname "C=CN,O=HUAWEI,OU=HUAWEI IDE,CN=gdbkey" -keystore gdbkey.p12 -storetype pkcs12 -validity 9125 -storepass 1qaz2wsx -keypass 1qaz2wsx
参数含义如下
"-genkeypair": "生成密钥对,包括公钥和私钥,并将其存储到密钥库中",
"-alias": "指定密钥对的别名,用于标识密钥库中的密钥条目",
"-keyalg": "指定密钥算法,如EC(椭圆曲线算法)",
"-sigalg": "指定签名算法,如SHA256withECDSA",
"-dname": "指定证书主题信息(Distinguished Name),包含国家、组织等信息",
"-keystore": "指定密钥库文件名,用于存储密钥和证书",
"-storetype": "指定密钥库类型,如PKCS12",
"-validity": "指定证书有效期(天数),如9125天",
"-storepass": "指定密钥库密码,用于保护密钥库的完整性",
"-keypass": "指定密钥密码,用于保护私钥"
我们关注以下部分
- “-genkeypair”: “生成密钥对”,
- “-alias”: “密钥别名”, 我们决定 gdbkey
- “-keyalg”: “密钥算法”,
- “-sigalg”: “签名算法”,
- “-dname”: “证书主题信息”, 我们决定最后一段 CN=
gdbkey - “-keystore”: “密钥库文件名”, 我们决定 gdbkey.p12
- “-storetype”: “密钥库类型”,
- “-validity”: “有效期(天)”,
- “-storepass”: “密钥库密码”, 我们决定(切记) 密钥xxxxxxxx
- “-keypass”: “密钥密码” 我们决定(切记) 密钥xxxxxxxx
结果如下:我们生成了一个名为gdbkey.p12的密钥库文件
解释下keytool命令,keytool 是 Java 开发工具包(JDK)自带的命令行工具,用于管理密钥库、数字证书和公钥/私钥对,因此这里需要安装JDK
生成.csr证书签名请求文件
同样的使用keytool命令生成请求文件
keytool -certreq -alias "gdbkey" -keystore gdbkey.p12 -storetype pkcs12 -file gdbkey.csr
生成请求文件参数比较简单
- “-certreq”: “生成证书签名请求(CSR)”,
- “-alias”: “密钥别名”,
- “-keystore”: “密钥库文件名”,
- “-storetype”: “密钥库类型”,
- “-file”: “输出CSR文件名”
这里按照前面创建.p12文件给的参数即可,注意要输入生成.p12是注册的密钥
注意:.p12和.csr文件千万别丢
申请证书
目前证书受限开放,可以通过官网中工单申请体验

后续按照官方指导即可
这是申请好的证书,点击下载就行了
证书签名
下载好的.cer证书放到同一级目录中后,即可进行二进制签名
如同DevEco打包应用一样,签名使用的profile是一个json文件,我们使用以下module.json,存放一个DEBUGGER权限,签名给gdb用于调试
{
"requestPermissions": [
{
"name": "ohos.permission.kernel.DEBUGGER"
}
],
"debug-info" : {
"device-id-type": "udid",
"device-ids": [
""
]
}
}
这里证书签名时,只能通过debug的方式(正式的应该只有企业等拥有,我只有调试权限),因此要查看我的设备的udid进行绑定
获取udid
- 如果是在非鸿蒙电脑上操作,按照官方指导部署好hdc工具;
- 如果是鸿蒙电脑,安转好DevBox
- 然后按照以下操作打开开发者模式和调试模式
- 进入设备设置
- 进入关于本机
- 多次点击版本号
- 打开开发者模式
- 进入系统设置
- 找到并打开开发人员选项
- 启用USB调试
非鸿蒙电脑
执行hdc shell bm get --udid 直接获取
鸿蒙电脑(hdc shell 使用方式)
- 打开无线调试,记住无线调试中的端口号,下图中的
42251位置
- 链接无线调试并通过hdc shell 获取udid(当然,这样也可以直接使用hdc shell,像在windwos上用hdc shell 一样)
hdc tconn 127.0.0.1:<port> #本机链接

补充profile信息
将获取到的udid填入device-ids字段中,保存
{
"requestPermissions": [
{
"name": "ohos.permission.kernel.DEBUGGER"
}
],
"debug-info" : {
"device-id-type": "udid",
"device-ids": [
"5BXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX6E03290"
]
}
}
对二进制进行签名
把准备好的二进制放到证书、profile同目录下,我们这里以我们本地编译好的gdb为例,
指定cer、p12、keyPwd、keystorePwd、输入文件和输出文件(ELF),然后执行以下命令即可签名
binary-sign-tool sign -keyAlias "gdbkey" -signAlg "SHA256withECDSA" -appCertFile "gdbkey.cer" -inFile "gdb" -keystoreFile "gdbkey.p12" -outFile "gdb" -keyPwd "1qaz2wsx" -keystorePwd "1qaz2wsx" -moduleFile "module.json"

然后我们增加执行权限chmod +x gdb,我们验证下功能,用clang编译一个helloworld,很简单相信大家都会做
使用签名后的gdb,./gdb helloworld,确定运行
此时可以看到,通过证书签名的方式,gdb也可以运行成功
这次我们讲了两种二进制签名方式,同时也说明了在鸿蒙电脑上如何使用hdc命令,相信随着环境逐步完善,会有更多的场景可以使用
附录
应用及环境相关工具开源应用
GitNext
BiShengJDKInstaller
bishengjdk-8
bishengjdk-17
DevPython-OH
DevBox
DevNode-OH
更多推荐





所有评论(0)