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]
列出单个证书文件或已签名的 elf 目标文件的标准输出信息。选定的字段显示在一行中。如果指定的字段不适用于指定的文件,此命令将终止,且没有标准输出。此子命令的此输出用于供脚本或其他命令使用。
使用给定的私钥和证书文件或签名和证书文件为 elf 目标文件签名。
验证现有的签名目标文件。使用给定的证书,或在 /etc/certs/elfsign 和 /etc/certs 目录中搜索合适的证书(如果未指定 –c)。
在标准输出上以给定格式列显 elf 目标文件的摘要。SHA-256 是缺省格式。
将给定数据范围签名的 ELF 数据列显到指定的 output_file 或标准输出。缺省数据范围是解释。
支持以下选项:
指定 PEM/PKCS#7 或 ASN.1 BER 格式的 X.509 证书所在的路径。
指定要签名的 ELF 数据的范围。有效的 data_range 选项包括:
使用在 ELF 文件签名中找到的数据范围。如果没有签名,则使用缺省数据范围。
根据文件类型解释已签名的数据。将可重定位的 ELF 文件和内核模块视为与 "relobj" 相同。对于 ELF 可执行文件,对 ELF 头和 ELF 程序段签名。
已签名的数据是 ELF 头和 ELF 节(不包括签名节)。这是缺省范围。
已签名的数据是 ELF 节(不包括签名节和 ELF 头)。该选项用于仅对较早发行版的文件签名。
指定要签名或验证的目标文件所在的路径。
对多个目标文件进行签名或验证时,可多次指定 –e 选项。
对于 sign 子命令,指定签名的格式。有效的格式选项包括
使用在 ELF 文件签名中找到的格式。如果没有签名,则使用缺省格式。
使用缺省加密签名算法 rsa_sha256。
SHA-256 摘要的 RSA 签名。如果省略 –F 选项,则这是缺省格式。
SHA-1 摘要的 RSA 签名。此格式已过时。
SHA-1 摘要的 MD5 摘要的 RSA 签名。此格式已过时。
指定加密算法的 OID,代替 –F 选项。例如,"-O 1.2.840.113549.1.1.11" 等效于 "-F rsa_sha256"。OID 未经验证。
对于 list 子命令,指定输出中应显示的字段。
list 子命令支持以下选项:
列出证书或 ELF 文件中的所有字段。对于 ELF 文件,显示以下签名信息:字节存储顺序、格式、版本、签名者、时间戳、签名和 OID。
证书文件的有效字段说明符包括:
主题 DN(Distinguished Name,标识名)
签发者 DN
elf 目标文件的有效字段说明符包括:
签名的格式
目标文件签名所用证书的主题 DN
应用签名的时间,格式采用语言环境的缺省格式。不再使用。
指定不使用 PKCS#11 令牌时的私钥文件位置。此文件为 RSA 私钥文件,其格式为标准 PEM (base64) 或 DER(二进制)格式。
同时指定 –k 和 –T 选项会出错。
指定要使用 data 命令输出的输出文件的路径。
指定访问令牌设备所用的 PIN 保存在哪个文件中。如果未在 pin_file 中提供 PIN,elfsign 将提示您输入 PIN。
指定 –P 选项而不指定 –T 选项会出错。
指定二进制或 base64 编码格式的签名文件的路径。签名文件是使用私钥和由 elf 目标文件的 "elfsign data" 子命令创建的文件单独创建的。
指定持有私钥的 PKCS#11 令牌设备的 URI,URI 由 pktool 提供。可以通过 token_uri 指定令牌标签、令牌密钥标签和 PIN 文件;令牌密钥标签(目标文件)是必需的输入属性。
同时指定 –T 和 –k 选项会出错。
请求提供更为详细的信息。附加输出包括签名者和为目标文件签名的时间(如果签名格式中包含签名时间)。此输出不是稳定的可解析输出。
支持下列操作数:
要签名、验证或列出的一个或多个 elf 对象。必须至少指定一个 elf 目标文件,要么通过 –e 选项指定,要么在所有其他选项后指定。
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
将返回以下退出值:
|
未使用 –c 标志时,供 verify 子命令搜索的目录。
有关下列属性的说明,请参见 attributes(7):
|
elfsign 命令及其子命令是 "Committed"(已确定)。尽管应用程序不应依赖于 elfsign 的输出格式,但 list 子命令的输出格式仍为 "Committed"(已确定)。