容器内远程证明
TEE OS从1.4.0起,为支持容器内的远程证明,新增了qca_daemon、libqca-report、QTA-report,其中libqca-report和QTA-report可从itrustee_sdk仓中获取源码,qca_daemon由用户根据自身业务进行相应开发。以下将对容器内的远程证明流程进行简要概述。
- 参见窗口1和窗口2在host侧完成AK密钥和证书的生成及保存。
- 参见容器部署支持启动容器,并启动qca_daemon。此时qca_daemon可通过sock等方式与host上的RA Service建立连接。并获取容器id和容器的nsid,并传递给RA Service。
- 容器id和nsid可由qca_daemon获取,传给RA Service;也可由RA Service在host侧获取,只要可以获取到容器id和nsid即可。
- 容器内获取容器ID和NSID的简单命令如下。
cat /proc/self/cgroup | head -1 |cut -d/ -f3 ls -l /proc/1/ns/ | grep "pid ->" | awk -F"[][]" '{print $2}'
- RA Service将容器信息json序列化后,调用QCA lib的RegisterContainer接口,完成容器信息的注册。
- 容器内启动待验证的TA。
- RA Client发起远程证明挑战。需要携带待证明TA所在的容器信息,如容器ID、容器类型等。
- RA Service接收到请求后,根据容器ID将请求转发到对应容器里的qca_daemon。
- qca_daemon调用容器里的libqca-report发起证明请求。
证明过程中,容器里的QTA-report会自动向host上的QTA验证容器的nsid是否与注册时的一致。然后调用TEE OS接口获取度量报告,并将容器ID、容器类型、QTA-report的度量值写入到ta_attrs字段。
- qca_daemon将度量报告返回给RA Service,然后返回给RA Client。
- RA client对度量报告进行验签,确认报告的完整性。