Go to main content

手册页部分 1:用户命令

退出打印视图

更新时间: 2018年8月8日 星期三
 
 

elfsign(1)

名称

elfsign - 对二进制文件签名

用法概要

/usr/bin/elfsign sign [-v] 
-k private_key -c 
certificate_file
     -e elf_object [-d data_range] [-F 
format] [file]...
/usr/bin/elfsign sign [-v] 
-c certificate_file
     -e elf_object -T token_uri [-d data_range] [-F format] [file]...
/usr/bin/elfsign sign [-v] -c certificate_file
	  [-e elf_object] -s signature_file [-d data_range] 
         [-F format|-O oid] [file]
/usr/bin/elfsign verify [-c 
certificate_file] 
     [-v] -e elf_object [file]...
/usr/bin/elfsign list [
-f field] -c 
certificate_file
/usr/bin/elfsign list [
-f field] -e 
elf_object [file]...
/usr/bin/elfsign digest [-o digest_file]
       [-e elf_object] [-F format] [file]
/usr/bin/elfsign data [-o output_file]
       [-e elf_object] [-d data_range] [file]

描述

list

列出单个证书文件或已签名的 elf 目标文件的标准输出信息。选定的字段显示在一行中。如果指定的字段不适用于指定的文件,此命令将终止,且没有标准输出。此子命令的此输出用于供脚本或其他命令使用。

sign

使用给定的私钥和证书文件或签名和证书文件为 elf 目标文件签名。

verify

验证现有的签名目标文件。使用给定的证书,或在 /etc/certs/elfsign/etc/certs 目录中搜索合适的证书(如果未指定 –c)。

digest

在标准输出上以给定格式列显 elf 目标文件的摘要。SHA-256 是缺省格式。

data

将给定数据范围签名的 ELF 数据列显到指定的 output_file 或标准输出。缺省数据范围是解释。

选项

支持以下选项:

–c certificate_file

指定 PEM/PKCS#7 或 ASN.1 BER 格式的 X.509 证书所在的路径。

–d data_range

指定要签名的 ELF 数据的范围。有效的 data_range 选项包括:

current

使用在 ELF 文件签名中找到的数据范围。如果没有签名,则使用缺省数据范围。

interpret

根据文件类型解释已签名的数据。将可重定位的 ELF 文件和内核模块视为与 "relobj" 相同。对于 ELF 可执行文件,对 ELF 头和 ELF 程序段签名。

relobj

已签名的数据是 ELF 头和 ELF 节(不包括签名节)。这是缺省范围。

legacy

已签名的数据是 ELF 节(不包括签名节和 ELF 头)。该选项用于仅对较早发行版的文件签名。

–e elf_object

指定要签名或验证的目标文件所在的路径。

对多个目标文件进行签名或验证时,可多次指定 –e 选项。

–F format

对于 sign 子命令,指定签名的格式。有效的格式选项包括

current

使用在 ELF 文件签名中找到的格式。如果没有签名,则使用缺省格式。

default

使用缺省加密签名算法 rsa_sha256。

rsa_sha256

SHA-256 摘要的 RSA 签名。如果省略 –F 选项,则这是缺省格式。

rsa_sha1

SHA-1 摘要的 RSA 签名。此格式已过时。

rsa_md5_sha1

SHA-1 摘要的 MD5 摘要的 RSA 签名。此格式已过时。

–O oid

指定加密算法的 OID,代替 –F 选项。例如,"-O 1.2.840.113549.1.1.11" 等效于 "-F rsa_sha256"。OID 未经验证。

–f field

对于 list 子命令,指定输出中应显示的字段。

list 子命令支持以下选项:

–f all

列出证书或 ELF 文件中的所有字段。对于 ELF 文件,显示以下签名信息:字节存储顺序、格式、版本、签名者、时间戳、签名和 OID。

证书文件的有效字段说明符包括:

subject

主题 DN(Distinguished Name,标识名)

issuer

签发者 DN

elf 目标文件的有效字段说明符包括:

format

签名的格式

signer

目标文件签名所用证书的主题 DN

time

应用签名的时间,格式采用语言环境的缺省格式。不再使用。

–k private_key

指定不使用 PKCS#11 令牌时的私钥文件位置。此文件为 RSA 私钥文件,其格式为标准 PEM (base64) 或 DER(二进制)格式。

同时指定 –k–T 选项会出错。

–o output_file

指定要使用 data 命令输出的输出文件的路径。

–P pin_file

指定访问令牌设备所用的 PIN 保存在哪个文件中。如果未在 pin_file 中提供 PIN,elfsign 将提示您输入 PIN。

指定 –P 选项而不指定 –T 选项会出错。

–s signature_file

指定二进制或 base64 编码格式的签名文件的路径。签名文件是使用私钥和由 elf 目标文件的 "elfsign data" 子命令创建的文件单独创建的。

–T token_uri

指定持有私钥的 PKCS#11 令牌设备的 URI,URI 由 pktool 提供。可以通过 token_uri 指定令牌标签、令牌密钥标签和 PIN 文件;令牌密钥标签(目标文件)是必需的输入属性。

同时指定 –T–k 选项会出错。

–v

请求提供更为详细的信息。附加输出包括签名者和为目标文件签名的时间(如果签名格式中包含签名时间)。此输出不是稳定的可解析输出。

操作数

支持下列操作数:

file

要签名、验证或列出的一个或多个 elf 对象。必须至少指定一个 elf 目标文件,要么通过 –e 选项指定,要么在所有其他选项后指定。

示例

示例 1 使用某个文件中的密钥/证书为 ELF 目标文件签名
example$ elfsign sign -k myprivatekey -c mycert -e lib/libmylib.so.1
示例 2 验证 elf 目标文件的签名

example$ elfsign verify -c mycert -e lib/libmylib.so.1
elfsign: verification of lib/libmylib.so.1 passed
示例 3 为指定数据范围的目标文件签名

这将是证书 DN 的前缀:ORCL

example$ elfsign sign -d relobj -k myprivatekey -c mycert
          -e lib/libmylib.so.1
示例 4 确定有关目标文件的信息

example$ elfsign list -f format -e lib/libmylib.so.1
rsa_md5_sha1

example$ elfsign list -f signer -e lib/libmylib.so.1
CN=VENDOR, OU=Software Development, O=Vendor Inc.
示例 5 使用令牌 URI 为 ELF 目标文件签名
example$ elfsign sign -c mycert -e lib/libmylib.so.1  
          -T 'pkcs11:token=Sun Software PKCS#11 softtoken; 
          object=mykey;pinfile=/path/to/pinfile'
示例 6 使用令牌 URI 和交互式 PIN 为 ELF 目标文件签名
example$ elfsign sign -c mycert -e lib/libmylib.so.1 \
          -T 'pkcs11:token=Sun Software PKCS#11 softtoken;object=mykey'
Enter PIN for Sun Software PKCS#11 softtoken:
示例 7 使用签名文件为 ELF 目标文件签名

创建包含要从 ELF 目标文件签名的数据的文件。

example$ elfsign data -o /path/to/data_file -e /lib/libmylib.so.1

使用 openssl 命令创建私钥和证书文件。

example$ openssl genrsa -out /path/to/private_key 2048
example$ openssl req -new -x509 -days 999 -key /path/to/private_key
     -out /path/to/certificate_file

使用 openssl 命令创建签名文件。

example$ openssl dgst -sha256 -binary /path/to/data_file
           >/path/to/digest_file
example$ openssl rsautl -sign -in /path/to/digest_file
           -out /path/to/signature_file -inkey /path/to/private_key

使用该签名文件为 ELF 目标文件签名。

example$ elfsign sign -c /path/to/certificate_file
           -s /path/to/signature_file -e /lib/libmylib.so.1

退出状态

将返回以下退出值:

含义
子命令
0
操作成功
sign/verify
1
参数无效
2
无法验证 ELF 目标文件
verify
3
无法打开 ELF 目标文件
sign/verify
4
无法装入证书或证书无效
sign/verify
5
无法装入私钥,私钥无效或令牌标签无效
sign
6
无法添加签名
sign
7
尝试验证未签名的目标文件或目标文件不是 ELF 文件
verify

文件

/etc/certs/elfsign
/etc/certs

未使用 –c 标志时,供 verify 子命令搜索的目录。

属性

有关下列属性的说明,请参见 attributes(7)

属性类型
属性值
可用性
developer/base-developer-utilities
接口稳定性
请参见下文。

elfsign 命令及其子命令是 "Committed"(已确定)。尽管应用程序不应依赖于 elfsign 的输出格式,但 list 子命令的输出格式仍为 "Committed"(已确定)。

另请参见

date(1)pktool(1)attributes(7)cryptoadm(8)