FreeBSD软件包回购-如何进行手动签名验证?


11

我正在尝试在FreeBSD软件包网站上验证软件包的签名。

wget http://pkg.freebsd.org/FreeBSD:11:amd64/latest/digests.txz
tar xf digests.txz

这给了三个文件:digestsdigests.pub digests.sig
我认为digests.sig是该文件的签名digestsdigests.pub的公钥。但是我试图确认:

openssl dgst -verify digests.pub -signature digests.sig digests

得到消息

Verification Failure

我认为我出了点问题-谁能告诉我我所缺少的吗?

编辑:基于对源代码的搜寻,我认为重要的功能是在这里找到的,称为openssl库中的rsa_verify_cert_cb调用RSA_verify。但是我还没有弄清楚到底是什么,或者是否可以使用openssl命令行工具来调用该函数。


这看起来很相关list.freebsd.org/pipermail/freebsd-ports/2014-February/…但是,类似于此处提到的命令的命令 openssl rsautl -pubin -inkey digests.pub -verify -in digests.sig -asn1parse 似乎也不匹配。
SauceCode '16

...也就是说,似乎与sha256sum digests
SauceCode

Answers:


1

由于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文件中的八位字节字符串与手动生成的哈希值)

  1. 使用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

  2. 现在计算文件的SHA256 digests

    sha256 -q digests
    8db18c93bea414fd8a281f5f3795b2ca4be51479c18b225ff87b8aa957ec2c5d
    
  3. 最后使用echo命令计算此字符串的SHA256 并与以下方法返回的值进行比较openssl rsautl
    echo -n 8db18c93bea414fd8a281f5f3795b2ca4be51479c18b225ff87b8aa957ec2c5d | sha256
    acc6acbecd5e61636282624bba77376e0bfaeaef6e1021016264062fd0f16022
    

注意步骤3中的值如何与步骤1中的值匹配,因此文件digests有效。


0

该消息表明公用密钥与您下载的文件不匹配。根据dgst -verify filename 的联机帮助页,使用“ filename”中的公钥验证签名。输出为“ Verification OK”或“ Verification Failure”。最可能的原因是文件在下载过程中被损坏。我会尝试再次下载它,如果它仍然无法通过检查,则表明下载链接已损坏(但是由于它来自freebsd网站,所以我怀疑这仅仅是下载错误。即使如此,我仍然会验证新的下载只是为了安全起见)。如果您的网络连接速度慢/不可靠,则可能需要尝试几次才能正确下载。如果您需要检查有关命令的信息,


这是前一阵子,但是我很自信,因为我尝试了几次,所以它不是下载错误(或下载失窃)。
SauceCode
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.