【已评审】支持用于查询固件完整性保护证书的资源协作接口与Redfish接口

背景

在伙伴签名场景,SP需要使用整机厂商的签名证书,完成对签名固件的校验。需要将整机厂商的签名证书,同步到SP侧,让SP使用此证书对固件进行签名校验。

触发原因

新需求

关联issue

【需求】支持用于查询固件完整性保护证书的资源协作接口与Redfish接口

决策点

1、新增资源协作路径
path:/bmc/kepler/Managers/:ManagerId/FirmwareIntegrity/Certificates/:CertificateId
interface:bmc.kepler.CertificateService.Certificate
变化类型:新增path
应用场景:用于初始化时收集厂商的签名证书,并将资源呈现出来
详细说明:默认存在一本证书,可能会存在两本证书。第一本证书为当前固件中存在的证书,第二本为客户自定义导入的证书。若需要获取该证书的信息,需要对两个ID进行遍历获取。

2、新增资源协作接口
path:
(原有)/bmc/kepler/Managers/:ManagerId/Certificates/:CertificateId
(原有)/bmc/kepler/Managers/:ManagerId/NetworkProtocol/HTTPS/Certificates/:CertificateId
(原有)/bmc/kepler/AccountService/MultiFactorAuth/ClientCertificate/Certificates/:CertificateId
(新增)/bmc/kepler/Managers/:ManagerId/FirmwareIntegrity/Certificates/:CertificateId
interface:bmc.kepler.CertificateService.Certificate
变化类型:新增方法
应用场景:用于查询证书时获取对应证书的公钥文本

属性名称 变化类型 请求签名 响应签名 读写&权限 持久化 变化通知 接口说明 接口约束
GetCertificateString 新增方法 s ReadOnly 新增Get方法,不涉及持久化 不涉及 获取当前证书的公钥文本信息

响应签名:s
证书公钥文本信息

3、变更Redfish接口
uri:/redfish/v1/UpdateService
变化类型:新增Oem属性
操作类型:GET
应用场景:用于SP在固件升级前获取整机厂商的签名证书和吊销列表,对固件包进行验签
详细描述:
Oem/{{OemIdentifier}}/FirmwareIntegrity/Certificates,类型为对象数组,每个对象代表一个用于固件完整性校验的签名证书。若当前不存在该类证书,则该资源呈现为空数组。
Oem/{{OemIdentifier}}/FirmwareIntegrity/CertificateRevocationLists,类型为对象数组,每个对象代表一个用于固件完整性校验的吊销列表。若当前不存在该类吊销列表,则该资源呈现为空数组。

属性名称 取值类型(string/integer/number/object/array/null) 取值范围 默认值 操作权限(仅针对当前说明的操作类型,可选值为UserMgmt/BasicSetting/KVMMgmt/VMMMgmt/SecurityMgmt/PowerMgmt/DiagnoseMgmt/ReadOnly/ConfigureSelf) 是否频繁变化并需要屏蔽变化事件 约束 说明
Oem { object ReadOnly
{{OemIdentifier}} { object ReadOnly
FirmwareIntegrity { object ReadOnly
Certificates [{ array(object) ReadOnly
CertificateString string ReadOnly
}]
CertificateRevocationLists [{ array(object) ReadOnly
CRLString string ReadOnly
}]}}}

接口样例:

{
    ....
    "Oem": {
        "{{OemIdentifier}}": {
            ....
            "FirmwareIntegrity": {
                "Certificates": [
                    {
                        "CertificateString": "-----BEGIN CERTIFICATE-----....-----END CERTIFICATE-----"
                    },
                    {
                        "CertificateString": "-----BEGIN CERTIFICATE-----....-----END CERTIFICATE-----"
                    }
                ],
                "CertificateRevocationLists": [
                    {
                        "CRLString": "-----BEGIN X509 CRL-----....-----END X509 CRL-----"
                    },
                    {
                        "CRLString": "-----BEGIN X509 CRL-----....-----END X509 CRL-----"
                    }
                ]
            }
        }
    }
}

评审结论

决策点1:同意新增资源协作接口路径 /bmc/kepler/Managers/:ManagerId/FirmwareIntegrity/Certificates/:CertificateId,用于呈现固件签名证书,具体如下:
path:/bmc/kepler/Managers/:ManagerId/FirmwareIntegrity/Certificates/:CertificateId
interface:bmc.kepler.CertificateService.Certificate

决策点2:同意在 bmc.kepler.CertificateService.Certificate 接口下新增方法 GetCertificateString 用于获取证书的公钥文本,具体如下:
path:
/bmc/kepler/Managers/:ManagerId/Certificates/:CertificateId
/bmc/kepler/Managers/:ManagerId/NetworkProtocol/HTTPS/Certificates/:CertificateId
/bmc/kepler/AccountService/MultiFactorAuth/ClientCertificate/Certificates/:CertificateId
/bmc/kepler/Managers/:ManagerId/FirmwareIntegrity/Certificates/:CertificateId
interface:bmc.kepler.CertificateService.Certificate
方法名称:GetCertificateString
方法权限:ReadOnly
请求签名:无
响应签名:s,表示证书公钥文本信息,响应文本格式如下:
“-----BEGIN CERTIFICATE-----…-----END CERTIFICATE-----”

决策点3:同意扩展 GET /redfish/v1/UpdateService 接口,新增 Oem 属性用于呈现固件完整性校验签名证书和吊销列表,不支持 PATCH 或 POST,具体如下:
1、Oem/{{OemIdentifier}}/FirmwareIntegrity/Certificates,类型为对象数组
每个对象中有一个属性CertificateString,类型为字符串,代表一个用于固件完整性校验的签名证书的公钥文本。
若当前固件中不存在证书,则该资源呈现为空数组。

2、Oem/{{OemIdentifier}}/FirmwareIntegrity/CertificateRevocationLists,类型为对象数组。
每个对象中含有一个属性CRLString,类型为字符串,代表一个用于固件完整性校验的吊销列表的X509文本。
若当前固件中不存在吊销列表,则该资源呈现为空数组。

遗留问题

建议:

  1. 资源协作接口的GetContent方法名称调整为GetCertificateString
  2. Redfish接口获取证书数据的接口标识一下证书对象为标准Redfish资源对象

已调整对资源的说明
已调整资源协作方法名