在 Matter 配网和操作中,为了信息交互的安全,在配网时,Commissioner自身需要完整的证书,同时需要向设备安装操作证书。
Matter 证书包含:
-
RCA: 根证书
-
ICA: 中间证书,可选
-
NOC: 操作证书(注意有以下两种操作证书)
- MTRDeviceController操作证书: MTRDeviceController 使用的 NOC
- 设备操作证书:发送给设备的NOC
MTRDeviceController初始化
必须要的参数
ipk: 16字节,对 fabric 有效,随机数。
VendorID: 厂商ID
keyPair: 基于 RCA 或者 commissioner NOC(如果指定的话) 的公私钥对。还要用私钥实现相关加密方法。
证书签发方式
在 Apple 提供的 Matter.framework 框架中,提供三种不同的证书签发方案。
-
本地自动签发(开源中DarWin 示例工程方案),只需要指定FabricID 即可完成整个证书的自动签发,缺点:本设备有效,同步难。
-
本地指定 RCA, ICA,NOC(以上三个证书可以本地保存,也可以云端请求),后续自动根据证书参数生成设备 NOC. 缺点:不安全
-
所有证书云端签发: Commissioner初始化之前,从云端获取RCA, ICA,NOC。自行实现 nocChinIsser ,根据 CSR 信息由云端生成设备的 NOC。缺点:依赖网络和云端证书。
还需要指定 paa 列表,可以参考dcl (csa-iot.org)否则会出现设备不信任回调。
节点操作凭证过程
设备节点操作证书是基于 CSR 信息签发。可以由本地默认签发,也可以通过服务器签发。
服务器签发
服务器签发需要自定义签发器,并且遵守MTROperationalCertificateIssuer
并回调设备节点操作证书。
- (void)issueOperationalCertificateForRequest:(MTROperationalCSRInfo *)csrInfo
attestationInfo:(MTRDeviceAttestationInfo *)attestationInfo
controller:(MTRDeviceController *)controller
completion:(void (^)(MTROperationalCertificateChain * _Nullable info,
NSError * _Nullable error))completion API_AVAILABLE(ios(16.4)){
// 基于csr信息 在云端或者自行签发设备的操作证书。
}
为MTRDeviceController设置操作证书签发器
// iOS 16.4
MTRDeviceControllerStartupParams * params = [[MTRDeviceControllerStartupParams alloc] initWithIPK:ipk operationalKeypair:keypair operationalCertificate:nocCertificate intermediateCertificate:icaCertificate rootCertificate:rootCertificate];
//xxxIssuer *issuer = 签发器实体
//dispatch_queue_t nocIssuerQueue = 签发队列
[params setOperationalCertificateIssuer:issuer];
[params setOperationalCertificateIssuerQueue:nocIssuerQueue];