搭建步骤
CA应用需要REE侧Patch才能实现与TEE侧的TA应用通信,REE侧Patch与TEE OS固件包存在版本配套关系,请参考表1。本文以openEuler 20.03 LTS SP1和最新的TEE OS 1.5.0为例介绍REE侧Patch的编译、部署。
TEE OS hpm固件版本 |
itrustee_tzdriver配套代码tag |
itrustee_client配套代码tag |
libboundscheck配套代码分支 |
---|---|---|---|
1.1.0 <= version < 1.2.0 |
v1.0.0 |
v1.0.0 |
master |
1.2.0 |
v1.2.0 |
v1.2.0 |
master |
1.3.0 <= version < 1.4.0 |
v1.3.0 |
v1.3.0 |
master |
1.4.0 |
v1.5.0 |
v1.5.0 |
master |
1.5.0(2280 VF机型2.0.0) |
master |
master |
master |
itrustee_tzdriver和itrustee_client代码仓的master分支始终匹配最新TEE OS版本,上述表格可能因延迟未能及时更新,若仓中有TEE OS对应版本的tag标签,则建议使用对应tag标签的源码。
(可选)安装TrustZone License
如果服务器iBMC中“许可证管理”显示“Kunpeng accelerator SEC Function”已处于开启状态且未过期,可跳过本部分操作;否则请参考以下步骤完成TrustZone许可证导入使能“SEC特性”。
请联系华为业务负责人申请TrustZone许可证。获取许可证后,请参考以下步骤完成服务器许可证安装。
- 登录iBMC,依次选择 。
- 单击“安装”,上传申请的TrustZone许可证。
安装完毕后,iBMC显示“Kunpeng accelerator SEC Function”处于开启状态。
配置BIOS
重启服务器,进入BIOS打开TrustZone特性开关,并配置TEE侧安全内存大小。
- 重启服务器,进入BIOS。
- 依次选择 。
- 打开TEE开关,根据需要配置TEE侧安全内存大小。
- 安全内存大小选取不合理,可能会导致BIOS启动TEE OS失败,服务器无法使能TrustZone功能。
- 安全内存大小选取请参考安全内存规格说明章节。
- 保存BIOS配置,重启服务器,进入REE侧普通系统。
获取iTrustee Patch包
- 获取itrustee_client源码。
下载地址:https://gitee.com/openeuler/itrustee_client
代码分支:master
- 获取itrustee_tzdriver源码。
下载地址:https://gitee.com/openeuler/itrustee_tzdriver
代码分支:master
- 获取libboundscheck源码。
下载地址:https://gitee.com/openeuler/libboundscheck
代码分支:master
- 将下载、解压缩后libboundscheck源码分别放置在“itrustee_client/”目录和“itrustee_tzdriver/”目录下,并修改文件夹名称为libboundscheck,层级目录如下所示。
- 安装编译依赖。
1
yum install openssl-devel zlib-devel kernel-devel
- 编译itrustee_tzdriver。
1
cd itrustee_tzdriver && make
- 编译tzdriver.ko内核模块依赖内核头文件,itrustee_tzdriver/Makefile指定了内核头文件路径。
一般情况下内核头文件位于“/usr/src/kernels/<内核版本>”下,若编译脚本未匹配到正确路径,则需要根据实际情况予以替换。请注意,编译使用的内核头文件版本必须与tzdriver.ko最终运行环境的内核版本保持一致,否则可能会出现因内核版本差异导致tzdriver.ko加载失败的情况。可使用uname -r命令查看当前运行环境的内核版本。
- itrustee_tzdriver/Makefile指定了mailbox池大小配置。其中单个mailbox池大小为4MB,例如设定mailbox池总大小为32MB,则修改Makefile中“MAILBOX_POOL_COUNT”宏定义为8。
- 编译tzdriver.ko内核模块依赖内核头文件,itrustee_tzdriver/Makefile指定了内核头文件路径。
- 编译itrustee_client。
1
cd itrustee_client && make
编译完成后,会生成dist目录,存放生成的可执行二进制和动态库。
- 部署itrustee_client。
1 2 3 4 5 6 7
cp -rf dist/*.so /usr/lib64 && ldconfig cp -rf dist/teecd /usr/bin cp -rf dist/tlogcat /usr/bin # 可选 cp -rf dist/tee_teleport /usr/bin cp -rf dist/agentd /usr/bin
- libboundscheck.so和libteec.so为Patch驱动依赖库,需放在“/usr/lib64”目录。针对一些默认不带“/usr/lib64”目录的操作系统,需要新建“/usr/lib64”目录,并加入到系统动态库默认搜索路径中。
- tlogcat提供REE侧查看TEE侧日志输出的能力,teecd为REE侧用户态守护进程,tlogcat、teecd需要放在“/usr/bin”目录。
- tee_teleport可将REE侧Python/Java程序推送到TEE侧运行,并获取相应执行结果。非高级语言使用场景可不部署。
- agentd提供容器内可信应用安全存储和日志存储功能,需部署在容器内“/usr/bin”目录下。非容器使用场景可不部署。
- mailbox用于CA/TA通信参数传递,影响全局CA/TA并发上限,可根据实际业务需要配置mailbox池大小。当前版本mailbox池大小配置上限为128MB,即“MAILBOX_POOL_COUNT”宏定义最大为32。
(可选)部署SEC驱动
TEE OS 1.3.0版本起,SEC驱动需独立加载。低版本TEE OS可跳过此部分操作。
- 获取SEC驱动。在发布的TEE OS固件包里会包含与本版本匹配的SEC驱动,若部署不匹配的SEC驱动,可能影响TEE OS功能。
下载固件包提取SEC驱动文件“kunpeng_sec_drv.sec”。
- 部署SEC驱动文件。
mkdir -p /var/itrustee/tee_dynamic_drv/crypto/ cp kunpeng_sec_drv.sec /var/itrustee/tee_dynamic_drv/crypto/
- SEC驱动部署路径由itrustee_client的Makefile文件中的DYNAMIC_CRYPTO_DRV_DIR宏指定,如果需要更换部署路径,需重新编译itrustee_client。
- 启动teecd进程时,会自动加载SEC驱动,SEC驱动未成功加载将影响TEE OS功能。因此需要在启动teecd前部署SEC驱动,若先启动了teecd,可关闭teecd,重新部署SEC启动后,再启动teecd。
加载REE侧模块
- 加载tzdriver.ko内核模块。
1 2
cd itrustee_tzdriver/ insmod tzdriver.ko && lsmod | grep tzdriver
tzdriver.ko加载后不支持卸载,仅支持服务器下电再启动的方式将其恢复为未加载状态。
- 加载teecd守护进程。
1 2
nohup /usr/bin/teecd & ps aux | grep teecd
- teecd必须以绝对路径运行,即“/usr/bin/teecd”,“&”符号表示后台执行。
- 建议添加nohup命令,防止会话关闭导致teecd退出,影响其他会话里的CA/TA运行。
- 查看TEE侧日志输出,确认REE侧已具备与TEE侧通信能力。
- 查看当前日志信息。
1
tlogcat
- 查看当前TEE OS具体版本信息。
tlogcat -v
- 查看TEE日志存储路径为“/var/log/tee”。
tlogcat -f
- 查看当前日志信息。
检查TrustZone环境
为了方便客户确认TrustZone环境搭建是否正确,华为提供了TEE状态检查工具对于环境进行检查。
- 获取TEE状态检测工具。
从表2获取的固件压缩包里包含了TEE状态检测工具。在里面的tee_check目录下有如下文件。
- 将文件拷贝到如下目录,完成tee-check工具的部署。
mkdir -p /vendor/bin/ /data/tee-check cp -rf tee-check /vendor/bin/ cp -rf 35397f0d-26ef-476c-b955-4806f2c6454a.sec /data/tee-check cp -rf teeos.txt /var/itrustee/version/
- 运行插件工具。
/vendor/bin/tee-check