arch
(Evan(bx))
1
在分析 CSR/EEPROM 出包代码时,对 EEPROM 签名用的 eeprom_self_sign.priv_pem 有些疑问,想确认下官方/社区推荐用法。
我目前看到的情况是:
- bingo build 的 CSR/EEPROM 出包入口在 bmcgo/functional/csr_build.py
- EEPROM 本地签名配置是:
[eeprom_self_sign]
priv_pem=/path/to/private_key.pem
- 代码里会直接用:
ecdsa.SigningKey.from_pem(…)
对 EEPROM 待签数据做签名
4. EEPROM 这条链路里没有看到:
- rootca_der
- rootca_crl
- signer.pem
- cert_id
- signed.cms
- hpm_verify
- 同时仓库里带了一个 ECC demo,会生成:
- private_key.pem
- device_desc_pubkey.bin
基于这些代码,我目前的理解是:
- HPM/rootfs/uboot 的 CMS 签名,走的是 rootca.der + signer.pem + rootca.crl 这套证书链,社区公开示例看起来是 RSA/RSA-PSS
- 但 CSR/EEPROM 这条签名链路,更像是单独的 ECC 裸签名模型
- priv_pem 看起来不像是 signer.pem/rootca 这套证书链里的私钥,而像是另一对 EEPROM/设备描述验签公私钥中的私钥
想帮忙确认几个问题:
- eeprom_self_sign.priv_pem 对应的到底是什么?
- 是某张证书对应的私钥?
- 还是单独的一对 ECC keypair 中的私钥?
- 如果是证书体系,它对应的是哪张证书?
- 终端证书?
- 某个 device description 证书?
- 还是并不走证书链,只走预置公钥?
- 仓库 demo 里生成的 device_desc_pubkey.bin 在正式产品链路里是否就是 EEPROM/CSR 验签使用的公钥材料?
- 如果想把 EEPROM 签名从本地 priv_pem 迁到 SignServer,是否应该新建一个 Plain Signer worker,并导入与 priv_pem 对应的那把 EC 私钥,而不是复用现有 HPM/CMS 的 signer.pem / rootca 体系?
CSR出包不在BMC的交付范围,估计要找产品硬件项目支持咨询哦。
arch
(Evan(bx))
4
我看用重签名是能用的,但是重签名是rsa的。社区这个是ecc。所以有点怀疑。如果确实有差异,那我们自己也可以直接做csr整包的签名
您好,希望以下回答能解决您的疑惑:
- 在CSR出包过程中,hpm包自身使用的是CMS签名,一个CSR包中会有一个或多个可以被烧录到eeprom中的.bin文件,这些.bin文件也是需要进行签名并会进行验签的,所以这个确实是一个独立于hpm包签名的ECC签名私钥
- 它的验签需要将对应的公钥文件放置在BMC环境上的
/opt/bmc/trust/partner/device_desc_pubkey.bin路径中,则自发现机制能够通过这个公钥对签名后的.bin文件进行验签。
- 生成的公私对就是分别用来在开发环境签名,在BMC环境中验签的材料
- 如您所说,如果要把EEPROM迁移到服务器签名方案,需要额外创建一个后端接口用于EEPROM签名,不能直接复用HPM/CMS体系
如果需要进行服务器签名,可以参考demo文件夹中的sign_server.py实现,创建一个签名后端,注意需要进行额外的安全处理。希望这能解决您的问题,如果没能解决或者还有其他疑问请您回复。
arch
(Evan(bx))
6
哦,是这样,看了下,csr包确实是有 外层hpm签名,我们没有适配,我们这边会适配一下pr到社区。
1 个赞
arch
(Evan(bx))
7
目前适配好了CSR 整包签名,已经提了issue和pr,适配到26.06
这句话意思是要在manifest下的放置吗,也就是以后manifest以后就固定这里要有个公钥文件是bin格式的吗
是的,可以在manifest的rootfs文件夹下增加对应的路径和文件,也可以在rootfs_user组件的dist/user_conf/rootfs/opt/bmc路径下配置
arch
(Evan(bx))
9
这我有个疑问,这个是唯一性的吗??不同的csr 签名的hpm 理论上,ecc的公钥也不一样,那完整性校验是校验失败也没影响吗?理论上别的伙伴的csr,我们重签之后是不是还要做ecc???
有影响,会导致对应的EEPROM无法加载,ECC公钥是在BMC环境中的,预期的使用方式是生成一对公私钥,公钥直接放在代码仓,私钥用来创建签名服务器,然后就不做更改,这样不存在ECC公钥不一样的问题,同一个公私钥对用来做全部CSR的签名和验签,不是每次创建CSR包都重新生成和配置一遍公私钥对