由于Internet上没有用于手动FreeBSD软件包验证的“如何做”,这就是我所发现的。
技巧是openssl rsautl
输出中的八位字节字符串实际上是文件的SHA256哈希字符串的哈希。
例如,下载current http://pkg.freebsd.org/FreeBSD:12:amd64/latest/digests.txz
,解压缩并执行以下操作:
方法1(使用的单线openssl dgst
)
tr -d '\n'
从标准输入中删除新行很重要,因此它不包含在的字符串输入中openssl dgst
。
sha256 -q digests | tr -d '\n' | openssl dgst -verify digests.pub -signature digests.sig
该命令应该输出Verified OK
。
方法2(视觉比较.sig文件中的八位字节字符串与手动生成的哈希值)
使用OpenSSL实用程序从digests.sig转储内容
openssl rsautl -pubin -inkey digests.pub -verify -in digests.sig -asn1parse
0:d=0 hl=2 l= 49 cons: SEQUENCE
2:d=1 hl=2 l= 13 cons: SEQUENCE
4:d=2 hl=2 l= 9 prim: OBJECT :sha256
15:d=2 hl=2 l= 0 prim: NULL
17:d=1 hl=2 l= 32 prim: OCTET STRING
0000 - ac c6 ac be cd 5e 61 63-62 82 62 4b ba 77 37 6e .....^acb.bK.w7n
0010 - 0b fa ea ef 6e 10 21 01-62 64 06 2f d0 f1 60 22 ....n.!.bd./..`"
在这里,您可以看到嵌入式对象是SHA256哈希,其值是acc6acbecd5e61636282624bba77376e0bfaeaef6e1021016264062fd0f16022
。
现在计算文件的SHA256 digests
:
sha256 -q digests
8db18c93bea414fd8a281f5f3795b2ca4be51479c18b225ff87b8aa957ec2c5d
- 最后使用
echo
命令计算此字符串的SHA256 并与以下方法返回的值进行比较openssl rsautl
:
echo -n 8db18c93bea414fd8a281f5f3795b2ca4be51479c18b225ff87b8aa957ec2c5d | sha256
acc6acbecd5e61636282624bba77376e0bfaeaef6e1021016264062fd0f16022
注意步骤3中的值如何与步骤1中的值匹配,因此文件digests
有效。
openssl rsautl -pubin -inkey digests.pub -verify -in digests.sig -asn1parse
似乎也不匹配。