背景
BMC支持组件接入认证能力,在支持SPDM协议的组件上电接入后,基于SPDM协议对该组件进行身份验证并进行呈现。
需要实现相关Redfish接口,用于呈现可信根信息和完整性校验信息
关联ISSUE
评审点
1、在 /redfish/v1/Chassis/{ChassisId} 中增加标准响应信息 TrustedComponents
2、新增标准接口 /redfish/v1/Chassis/{ChassisId}/TrustedComponents
3、新增标准接口 /redfish/v1/Chassis/{ChassisId}/TrustedComponents/{TrustedComponentId}
4、新增标准接口 /redfish/v1/Chassis/{ChassisId}/TrustedComponents/{TrustedComponentId}/Certificates
5、新增标准接口 /redfish/v1/Chassis/{ChassisId}/TrustedComponents/{TrustedComponentId}/Certificates/{CertificateId}
6、新增标准接口 /redfish/v1/ComponentIntegrity
7、新增标准接口 /redfish/v1/ComponentIntegrity/{ComponentIntegrityId}
8、新增标准接口 /redfish/v1/ComponentIntegrity/{ComponentIntegrityId}/Actions/ComponentIntegrity.SPDMGetSignedMeasurements
详细描述
1、在 /redfish/v1/Chassis/{ChassisId} 中增加标准响应信息 TrustedComponents
URI:/redfish/v1/Chassis/{ChassisId}
变更类型:新增属性
操作类型:GET
| 属性名称 | 取值类型 | 取值范围 | 默认值 | 操作权限 | 是否频繁变化并需要屏蔽变化事件 | 约束 |
|---|---|---|---|---|---|---|
| TrustedComponents { | object | 只读,ReadOnly | 否 | |||
| @odata.id | string(uri) | 只读,ReadOnly | 否 | |||
| } |
2、新增标准接口 /redfish/v1/Chassis/{ChassisId}/TrustedComponents
URI:/redfish/v1/Chassis/{ChassisId}/TrustedComponents
变更类型:新增URI
操作类型:GET
| 属性名称 | 取值类型 | 取值范围 | 默认值 | 操作权限 | 是否频繁变化并需要屏蔽变化事件 | 约束 |
|---|---|---|---|---|---|---|
| @odata.id | string(uri) | 只读,ReadOnly | 否 | |||
| @odata.type | string | 只读,ReadOnly | 否 | |||
| Name | string | 只读,ReadOnly | 否 | |||
| Members@odata.count | number | 只读,ReadOnly | 否 | |||
| Members[{ | array(object) | 只读,ReadOnly | 否 | |||
| @odata.id | string(uri) | 只读,ReadOnly | 否 | |||
| }] |
3、新增标准接口 /redfish/v1/Chassis/{ChassisId}/TrustedComponents/{TrustedComponentId}
URI:/redfish/v1/Chassis/{ChassisId}/TrustedComponents/{TrustedComponentId}
变更类型:新增URI
操作类型:GET
| 属性名称 | 取值类型 | 取值范围 | 默认值 | 操作权限 | 是否频繁变化并需要屏蔽变化事件 | 约束 |
|---|---|---|---|---|---|---|
| @odata.id | string(uri) | 只读,ReadOnly | 否 | |||
| @odata.type | string | 只读,ReadOnly | 否 | |||
| Description | string | 只读,ReadOnly | 否 | |||
| Id | string | 只读,ReadOnly | 否 | |||
| Name | string | 只读,ReadOnly | 否 | |||
| Links{ | object | 只读,ReadOnly | 否 | |||
| ComponentIntegrity[{ | array(object) | 只读,ReadOnly | 否 | |||
| @odata.id | string(uri) | 只读,ReadOnly | 否 | |||
| }] | ||||||
| ComponentProtected[{ | array(object) | 只读,ReadOnly | 否 | |||
| @odata.id | string(uri) | 只读,ReadOnly | 否 | |||
| }]} | ||||||
| Certificates{ | object | 只读,ReadOnly | 否 | |||
| @odata.id | string(uri) | 只读,ReadOnly | 否 | |||
| } | ||||||
| FirmwareVersion | string | 只读,ReadOnly | 否 | |||
| Manufacturer | string | 只读,ReadOnly | 否 | |||
| Model | string | 只读,ReadOnly | 否 | |||
| SerialNumber | string | 只读,ReadOnly | 否 | |||
| UUID | string | 只读,ReadOnly | 否 | |||
| TrustedComponentType | string | “Discrete”,“Integrated” | 只读,ReadOnly | 否 | ||
| Status{ | object | 只读,ReadOnly | 否 | |||
| Health | string | 只读,ReadOnly | 否 | |||
| State | string | 只读,ReadOnly | 否 | |||
| } |
4、新增标准接口 /redfish/v1/Chassis/{ChassisId}/TrustedComponents/{TrustedComponentId}/Certificates
URI:/redfish/v1/Chassis/{ChassisId}/TrustedComponents/{TrustedComponentId}/Certificates
变更类型:新增URI
操作类型:GET
| 属性名称 | 取值类型 | 取值范围 | 默认值 | 操作权限 | 是否频繁变化并需要屏蔽变化事件 | 约束 |
|---|---|---|---|---|---|---|
| @odata.id | string(uri) | 只读,ReadOnly | 否 | |||
| @odata.type | string | 只读,ReadOnly | 否 | |||
| Name | string | 只读,ReadOnly | 否 | |||
| Members@odata.count | number | 只读,ReadOnly | 否 | |||
| Members[{ | array(object) | 只读,ReadOnly | 否 | |||
| @odata.id | string(uri) | 只读,ReadOnly | 否 | |||
| }] |
5、新增标准接口 /redfish/v1/Chassis/{ChassisId}/TrustedComponents/{TrustedComponentId}/Certificates/{CertificateId}
URI:/redfish/v1/Chassis/{ChassisId}/TrustedComponents/{TrustedComponentId}/Certificates/{CertificateId}
变更类型:新增URI
操作类型:GET
| 属性名称 | 取值类型 | 取值范围 | 默认值 | 操作权限 | 是否频繁变化并需要屏蔽变化事件 | 约束 |
|---|---|---|---|---|---|---|
| @odata.id | string(uri) | 只读,ReadOnly | 否 | |||
| @odata.type | string | 只读,ReadOnly | 否 | |||
| Id | string | 只读,ReadOnly | 否 | |||
| Name | string | 只读,ReadOnly | 否 | |||
| Fingerprint | string | 只读,ReadOnly | 否 | |||
| FingerprintHashAlgorithm | string | “TCG_ALG_SHA256” | 只读,ReadOnly | 否 | ||
| SPDM{ | object | 只读,ReadOnly | 否 | 仅SPDM证书存在该项 | ||
| SlotId | number | 只读,ReadOnly | 否 | 仅SPDM证书存在该项 | ||
| } | ||||||
| CertificateString | string | 只读,ReadOnly | 否 | |||
| CertificateType | string | “PEM”,“PEMchain” | 只读,ReadOnly | 否 | ||
| Subject{ | object | 只读,ReadOnly | 否 | |||
| CommonName | string | 只读,ReadOnly | 否 | |||
| OrganizationalUnit | string | 只读,ReadOnly | 否 | |||
| Organization | string | 只读,ReadOnly | 否 | |||
| City | string | 只读,ReadOnly | 否 | |||
| State | string | 只读,ReadOnly | 否 | |||
| Country | string | 只读,ReadOnly | 否 | |||
| } | ||||||
| Issuer{ | object | 只读,ReadOnly | 否 | |||
| CommonName | string | 只读,ReadOnly | 否 | |||
| OrganizationalUnit | string | 只读,ReadOnly | 否 | |||
| Organization | string | 只读,ReadOnly | 否 | |||
| City | string | 只读,ReadOnly | 否 | |||
| State | string | 只读,ReadOnly | 否 | |||
| Country | string | 只读,ReadOnly | 否 | |||
| } | ||||||
| ValidNotBefore | string | 只读,ReadOnly | 否 | |||
| ValidNotAfter | string | 只读,ReadOnly | 否 | |||
| SerialNumber | string | 只读,ReadOnly | 否 | |||
| SignatureAlgorithm | string | 只读,ReadOnly | 否 | |||
| KeyUsage | array(string) | “ClientAuthentication”,“CodeSigning”,“CRLSigning”,“DataEncipherment”,“DecipherOnly”,“DigitalSignature”,“EmailProtection”,“EncipherOnly”,“KeyAgreement”,“KeyCertSign”,“KeyEncipherment”,“NonRepudiation”,“OCSPSigning”,“ServerAuthentication”,“Timestamping” | 只读,ReadOnly | 否 |
6、新增标准接口 /redfish/v1/ComponentIntegrity
URI:/redfish/v1/ComponentIntegrity
变更类型:新增URI
操作类型:GET
| 属性名称 | 取值类型 | 取值范围 | 默认值 | 操作权限 | 是否频繁变化并需要屏蔽变化事件 | 约束 |
|---|---|---|---|---|---|---|
| @odata.id | string(uri) | 只读,ReadOnly | 否 | |||
| @odata.type | string | 只读,ReadOnly | 否 | |||
| Name | 只读,ReadOnly | 否 | ||||
| Members@odata.count | number | 只读,ReadOnly | 否 | |||
| Members[{ | array(object) | 只读,ReadOnly | 否 | |||
| @odata.id | string(uri) | 只读,ReadOnly | 否 | |||
| }] |
7、新增标准接口 /redfish/v1/ComponentIntegrity/{ComponentIntegrityId}
URI:/redfish/v1/ComponentIntegrity/{ComponentIntegrityId}
变更类型:新增URI
操作类型:GET
| 属性名称 | 取值类型 | 取值范围 | 默认值 | 操作权限 | 是否频繁变化并需要屏蔽变化事件 | 约束 |
|---|---|---|---|---|---|---|
| @odata.id | string(uri) | 只读,ReadOnly | 否 | |||
| @odata.type | string | 只读,ReadOnly | 否 | |||
| Id | string | 只读,ReadOnly | 否 | |||
| Name | string | 只读,ReadOnly | 否 | |||
| Description | string | 只读,ReadOnly | 否 | |||
| ComponentIntegrityType | string | “SPDM” | 只读,ReadOnly | 否 | ||
| ComponentIntegrityTypeVersion | string | 只读,ReadOnly | 否 | |||
| LastUpdated | string | 只读,ReadOnly | 否 | |||
| TargetComponentURI | string(uri) | 只读,ReadOnly | 否 | |||
| Status{ | object | 只读,ReadOnly | 否 | |||
| Health | string | 只读,ReadOnly | 否 | |||
| State | string | 只读,ReadOnly | 否 | |||
| } | ||||||
| SPDM{ | object | 只读,ReadOnly | 否 | |||
| IdentityAuthentication{ | object | 只读,ReadOnly | 否 | |||
| ResponderAuthentication{ | object | 只读,ReadOnly | 否 | |||
| ComponentCertificate{ | object | 只读,ReadOnly | 否 | |||
| @odata.id | string(uri) | 只读,ReadOnly | 否 | |||
| }}} | ||||||
| MeasurementSet{ | object | 只读,ReadOnly | 否 | |||
| MeasurementSpecification | string | “DMTF” | 只读,ReadOnly | 否 | ||
| MeasurementSummaryType | string | “TCB” | 只读,ReadOnly | 否 | ||
| MeasurementSummaryHashAlgorithm | string | 只读,ReadOnly | 否 | |||
| MeasurementSummary | string | 只读,ReadOnly | 否 | |||
| Measurements[{ | array(object) | 只读,ReadOnly | 否 | |||
| MeasurementIndex | number | 只读,ReadOnly | 否 | |||
| MeasurementHashAlgorithm | string | 只读,ReadOnly | 否 | |||
| Measurement | string | 只读,ReadOnly | 否 | |||
| LastUpdated | string | 只读,ReadOnly | 否 | |||
| PartofSummaryHash | boolean | 只读,ReadOnly | 否 | |||
| MeasurementType | string | “FirmwareConfiguration”,“HardwareConfiguration”,“ImmutableROM”,“MeasurementManifest”,“MutableFirmware”,“MutableFirmwareSecurityVersionNumber”,“MutableFirmwareVersion” | 只读,ReadOnly | 否 | 仅当MeasurementSpecification为DMTF时该属性需要呈现 | |
| SecurityVersionNumber | string | 只读,ReadOnly | 否 | 仅当MeasurementType为MutableFirmwareSecurityVersionNumber时该属性需要呈现 | ||
| }]}} | ||||||
| Actions{ | object | 只读,ReadOnly | 否 | |||
| #ComponentIntegrity.SPDMGetSignedMeasurements{ | object | 只读,ReadOnly | 否 | |||
| target | string(uri) | /redfish/v1/ComponentIntegrity/{ComponentIntegrityId}}/Actions/ComponentIntegrity.SPDMGetSignedMeasurements | 只读,ReadOnly | 否 | ||
| @Redfish.ActionInfo | string(uri) | 只读,ReadOnly | 否 | |||
| }} |
8、新增标准接口 /redfish/v1/ComponentIntegrity/{ComponentIntegrityId}/Actions/ComponentIntegrity.SPDMGetSignedMeasurements
URI:/redfish/v1/ComponentIntegrity/{ComponentIntegrityId}/Actions/ComponentIntegrity.SPDMGetSignedMeasurements
变更类型:新增URI
操作类型:POST
操作权限:SecurityMgmt
请求参数:
| 属性名称 | 取值类型 | 取值范围 | 默认值 | 约束 | 说明 |
|---|---|---|---|---|---|
| MeasurementIndices | array(number) | [1~255] | [255] | 非必需参数 | 参数可选填如下几个使用方式:1、[1~254] 中的一个或多个唯一值;2、[255];3、无此参数,默认使用 [255] |
| SlotId | number | 0~7 | 0 | 非必需参数 | 参数可选填如下几个使用方式:1、0~7:指定使用特定槽位标识符的证书;2、无此参数,默认使用 0 |
| Nonce | string | 长度64 | 非必需参数 | 有此参数时应遵循标准:\^0-9a-fA-F{64}$;无此参数时由业务侧自行生成随机数 |
响应参数:
| 属性名称 | 取值类型 | 取值范围 | 默认值 | 约束 | 说明 |
|---|---|---|---|---|---|
| Certificate{ | object | 仅当请求参数SlotId为0~7时该属性可呈现 | 一个指向与SPDM槽位标识符对应的证书的链接,该证书可用于验证签名。仅当请求参数SlotId为0~7时该属性可呈现 | ||
| @odata.id | string | 指向与SPDM槽位标识符对应的证书链接 | |||
| } | |||||
| Version | string | SPDM协商版本号 | |||
| PublicKey | string | 仅当请求参数SlotId为15时该属性才呈现 | 可用于验证签名的公钥。仅当请求参数SlotId为15时该属性才呈现,当前不支持 | ||
| HashingAlgorithm | string | SPDM协商的哈希算法 | |||
| SigningAlgorithm | string | SPDM协商的签名算法 | |||
| SignedMeasurements | string | 基于Nonce和指定测量块计算得到的签名摘要的Base64字符串 |
评审结论
1、同意在 /redfish/v1/Chassis/{ChassisId} 中增加标准响应信息 TrustedComponents
uri:/redfish/v1/ComponentIntegrity/{ComponentIntegrityId}
type:GET
2、同意新增标准资源 TrustedComponents 呈现可信部件集合,资源实现详见详细描述章节
uri:/redfish/v1/Chassis/{ChassisId}/TrustedComponents
type:GET
3、同意新增标准资源 TrustedComponent 呈现可信部件信息,资源实现详见详细描述章节
uri:/redfish/v1/Chassis/{ChassisId}/TrustedComponents/{TrustedComponentId}
type:GET
4、同意新增标准资源 Certificates 呈现可信部件的证书集合,资源实现详见详细描述章节
uri:/redfish/v1/Chassis/{ChassisId}/TrustedComponents/{TrustedComponentId}/Certificates
type:GET
5、同意新增标准资源 Certificate 呈现可信部件的证书信息,资源实现详见详细描述章节
uri:/redfish/v1/Chassis/{ChassisId}/TrustedComponents/{TrustedComponentId}/Certificates/{CertificateId}
type:GET
6、同意新增标准资源 ComponentIntegrity 呈现完整性报告集合,资源实现详见详细描述章节
uri:/redfish/v1/ComponentIntegrity
type:GET
7、同意新增标准资源 ComponentIntegrity 呈现完整性报告信息,资源实现详见详细描述章节
uri:/redfish/v1/ComponentIntegrity/{ComponentIntegrityId}
type:GET
8、同意新增标准接口 SPDMGetSignedMeasurements 用于获取挑战响应,资源实现详见详细描述章节
uri:/redfish/v1/ComponentIntegrity/{ComponentIntegrityId}/Actions/ComponentIntegrity.SPDMGetSignedMeasurements
type:POST