我通过如下方式制作反向过渡包:
①manifest按照制作过渡包的方法进行配置,bmcgo.conf中的伙伴模式为false
②将华为rootca.der放到opt/bmc/trust/partner/下
如此出包会生成一个自身是华为签名,同时升级时给华为证书开了后门的包。
然后我使用hpm_resign给这个包重签名,如此该包就成了我们自签名包,同时该包可以升级华为签名包。
那么,正常情况下,这个包可做的升级操作为:
①从自签名包升级到该包
②从该包升级到自签名包
③从该包升级到华为包
然而实际情况是①和③可以,②会报无效的升级包
也就是说明通过hpm_signer重签名包和通过配置manifest.yml生成自签名包实际上并不一样。能否讲解一下升级时固件校验流程以说明重签名和自签名的差异
xuhaijun
(xuhaijun)
2
升级会使用内置的根证书校验hpm包的cms签名,有两个根证书可供选择:一个是/opt/bmc/trust/partner/rootca.der(以下叫B根),另外一个是由镜像构建时打包到镜像中的签名根(以下叫A根)。
当你使用伙伴根重签名并不会修改hpm包里面的A根,使用华为构建流程制作的hpm包预置的A根是华为根,另外一个你导入的B根也是华为根,所以你的环境上只有华为根,当然不能升级自签名包。
在12月16号的security-sig会议中,有说升级相关的签名:
有两个签名和升级相关:hpm头的签名(A根),opt/bmc/trust/partner/下的签名(B根)。
从这里我理解通过hpm_resign重签名改的就是A根,为什么说“使用伙伴根重签名并不会修改hpm包里面的A根”呢?
我理解的是,他这里重签名只是修改hpm包的外壳,当我们升级时重签名的部分相当于一把锁,环境中的A根和B根相当于钥匙,当匹配到时就会升级成功。@xuhaijun 是这样吗
Larry_Li
(LiJiang)
6
2 个赞