背景
在伙伴签名场景,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文本。
若当前固件中不存在吊销列表,则该资源呈现为空数组。