使用实例
TA证书导入工具的CA(cert manager CA)、TA(cert manager TA)均开源至openEuler社区。使用该工具需要用户准备根公钥(用于验签二级证书)、二级证书(用于导入)、TA证书(用于业务TA)、config证书(用于验签业务TA config二进制),各个证书层级关系可参考图1。
- 根公钥负责验签二级证书有效性,需固定编码在cert manager TA代码中。
- 二级证书是被实际导入到TEE侧证书,负责验签业务TA中的TA证书和config证书有效性。
- TA证书和config证书均由用户基于二级证书签发获得。TA证书负责业务TA代码完整性保护;config证书负责config二进制完整性保护,config二进制主要负责TA在TEE侧资源使用限制。
获取并使用TA证书导入工具
- 下载配套iTrustee SDK,已包含cert manager CA、cert manager TA源码。
- 获取iTrustee SDK。
下载地址:https://gitee.com/openeuler/itrustee_sdk.git
代码分支:master
代码提交点:22c68de6cac1810c927a91bf86a40cc07b5005a2
iTrustee SDK已包含cert manager CA、TA源码,代码相对路径如下:
- “cert manager CA: itrustee_sdk/test/CA/certmanager”
- “cert manager TA:itrustee_sdk/test/TA/certmanager”
- iTrustee SDK集成安全函数库。
cd itrustee_sdk/thirdparty/open_source git clone https://gitee.com/openeuler/libboundscheck.git cd libboundscheck make cp lib/libboundscheck.so /usr/lib64
- 以上命令中的路径请根据实际情况予以替换。
- 安全函数库需放到系统动态库搜索路径下。
- 获取iTrustee SDK。
- 设置cert manager TA根公钥。
- 生成根证书。
openssl genrsa -out root.key 4096 openssl req -new -x509 -key root.key -out root.crt -subj "/C=CN/L=F/O=testRootCA/OU=ACS/CN=Root CA" -days 3650
- 提取生成的根公钥。
openssl x509 -in root.crt -pubkey -noout -C
图2 根公钥示例
- 打开“cert_config.h”文件,路径请根据实际情况进行替换。
vim itrustee_sdk/test/TA/cert_manager/include/cert_config.h
- 按“i”键进入编辑模式,替换cert manager TA中的根公钥信息,即g_root_public_key数组内容。
- 按“Esc”键退出编辑模式,输入:wq!并按“Enter”键保存退出文件。
- 生成根证书。
- 编译cert manager CA工具。
cd itrustee_sdk/test/CA/cert_manager make cp certmanager /usr/bin
编译成功后,会在当前目录产生certmanager二进制,需部署到“/usr/bin”目录。该目录由cert manager TA代码指定,可根据实际需要予以替换。
- 编译cert manager TA工具。
cert manager TA同普通TA一样,需先获取华为颁发的TA开发者证书,请参考调测环境TA应用开发者证书申请。
- cert manager作为特权TA,具有证书导入能力,在申请TA开发者证书时需在configs.xml中扩充<sys_verify_ta>和<CERT_Permission>字段。可参考如下configs.xml示例:
<?xml version="1.0" encoding="utf-8"?> <ConfigInfo> <TA_Basic_Info> <service_name>rsa-demo</service_name> <uuid>f68fd704-6eb1-4d14-b218-722850eb3ef0</uuid> </TA_Basic_Info> <TA_Manifest_Info> <instance_keep_alive>false</instance_keep_alive> <stack_size>40960</stack_size> <heap_size>67928064</heap_size> <multi_command>false</multi_command> <multi_session>false</multi_session> <single_instance>true</single_instance> <sys_verify_ta>true</sys_verify_ta> </TA_Manifest_Info> <TA_Control_Info> <CERT_Info> <CERT_Permission>true</CERT_Permission> </CERT_Info> </TA_Control_Info> </ConfigInfo>
- 获取cert manager的TA开发者证书、签发的config二进制后,需将cert manager的TA私钥、config二进制部署到某一路径,例如:
“itrustee_sdk/test/TA/certmanager/cloud/signed_config/config”
“itrustee_sdk/test/TA/certmanager/cloud/TA_cert/private_key.pem”
- 进入部署路径执行编译。
cd itrustee_sdk/test/TA/certmanager/cloud make cp *.sec /usr/bin
cert manager TA编译成功后,会生成{uuid}.sec文件,需部署到“/usr/bin”目录下。该目录由cert manager CA代码指定,可根据实际情况予以修改。
configs.xml中增加了<sys_verify_ta>标签,则对应的manifest.txt里也需要增加如下字段。
gpd.ta.sys_verify_ta: true
- cert manager作为特权TA,具有证书导入能力,在申请TA开发者证书时需在configs.xml中扩充<sys_verify_ta>和<CERT_Permission>字段。可参考如下configs.xml示例:
- 基于2中生成的根证书,生成用于导入的二级证书。
- 生成二级证书CSR请求文件。
openssl genrsa -out second.key 4096 openssl req -new -key second.key -out second.csr -subj "/C=CN/L=F/O=testRootCA/OU=ACS/CN=Secondary CA"
- 准备证书颁发配置文件openssl.cnf,配置文件内容可参考如下。
[ v3_ca ] subjectKeyIdentifier=hash authorityKeyIdentifier=keyid:always,issuer subjectAltName=DNS:localhost,DNS:*.localhost basicConstraints = critical,CA:true keyUsage = cRLSign,keyCertSign
- 生成二级证书文件,其中“-CA”指定根证书路径,“-CAkey”指定根密钥路径,“-extfile”指定证书颁发的配置文件路径。
openssl x509 -req -CA root.crt -CAkey root.key -CAcreateserial -in second.csr -out second.crt -sha256 -extfile openssl.cnf -extensions v3_ca -days 3650
- 将二级证书格式转换为DER格式。
openssl x509 -in second.crt -outform der -out second.der
- 生成二级证书CSR请求文件。
- 运行cert manager CA、TA,实现第三方二级证书导入。
/usr/bin/certmanager import second.der
成功导入后,用户可基于二级证书自行颁发TA证书以及签发config,然后参与TA编译形成业务TA,此时安全OS仅允许加载三方TA(由用户二级证书签发的TA证书)以及系统TA(configs.xml注有<sys_verify_ta>标签)加载运行,原由华为签发的TA证书的TA将会加载失败。
生成业务TA证书
在完成用户二级证书导入后,安全OS将使用导入的二级证书验签后续加载的业务TA。可参考如下步骤生成业务TA证书、config证书以及config二进制,并最终生成可用的业务TA。
- 基于导入的二级证书,生成config证书。
- 生成config证书CSR请求文件。
生成config证书CSR请求文件时,证书主题“CN”字段内容必须为“iTrustee_Config”。
openssl genrsa -out taconfig.key 4096 openssl req -new -key taconfig.key -out cert_req_01.csr -subj "/C=CN/L=F/O=testRootCA/OU=ACS/CN=iTrustee_Config"
- 生成config证书文件,其中“-CA”指定根证书路径,“-CAkey”指定根密钥路径。
openssl x509 -req -in cert_req_01.csr -CA ../second/second.crt -CAkey../second/second.key -CAcreateserial -out taconfig.crt -sha256 -days 3650
- 将config证书格式转换为DER格式。
openssl x509 -in taconfig.crt -outform der -out taconfig.der
- 生成config证书CSR请求文件。
- 基于导入的二级证书,生成业务TA证书。
- 生成业务TA证书CSR请求文件。
生成业务TA证书CSR请求文件,其中“CN”字段格式为“{业务TA uuid}_{业务TA server name}”,请根据实际情况替换。
openssl genrsa -out private_key.pem 4096 openssl req -new -key private_key.pem -out cert_req_01.csr -subj "/C=CN/L=F/O=testRootCA/OU=ACS/CN=87709191-1633-4d4e-b39a-951a59d82fb2_third-demo"
- 生成业务TA证书文件,其中“-CA”指定根证书路径,“-CAkey”指定根密钥路径。
openssl x509 -req -in cert_req_01.csr -CA ../second/second.crt -CAkey../second/second.key -CAcreateserial -out tacert.crt -sha256 -days 3650
- 将config证书格式转换为DER格式。
openssl x509 -in tacert.crt -outform der -out ta_cert.der
- 生成业务TA证书CSR请求文件。
- 准备业务TA TEE侧资源使用配置文件“configs.xml”。
- 新建文件。
vim configs.xml
- 按“i”键进入编辑模式,新增如下内容。
<?xml version="1.0" encoding="utf-8"?> <ConfigInfo> <TA_Basic_Info> <service_name>third-demo</service_name> <uuid>87709191-1633-4d4e-b39a-951a59d82fb2</uuid> </TA_Basic_Info> <TA_Manifest_Info> <instance_keep_alive>false</instance_keep_alive> <stack_size>40960</stack_size> <heap_size>67928064</heap_size> <multi_command>false</multi_command> <multi_session>false</multi_session> <single_instance>true</single_instance> </TA_Manifest_Info> </ConfigInfo>
- 按“Esc”键退出编辑模式,输入:wq!并按“Enter”键保存退出文件。
- 新建文件。
- 基于iTrustee SDK,编译业务TA config二进制。
- 新建csv路径。
mkdir -p itrustee_sdk/build/pack-Config/xml2tlv_tools/csv cp itrustee_sdk/build/signtools/tag_parse_dict.csv itrustee_sdk/build/pack-Config/xml2tlv_tools/csv
- 放置业务TA “configs.xml”文件。
mv configs.xml itrustee_sdk/build/pack-Config/input
- 放置config签名私钥和config证书。
mv taconfig.key itrustee_sdk/build/pack-Config/config_cert/config_cert_private.key mv taconfig.der itrustee_sdk/build/pack-Config/config_cert/
- 放置业务TA证书。
mv ta_cert.der itrustee_sdk/build/pack-Config/ta_cert/
- 编译业务TA config二进制。
cd itrustee_sdk/build/pack-Config bash local_sign.sh
config二进制成功编译后,会放置在“itrustee_sdk/build/pack-Config/output/”目录下。
- 新建csv路径。
- 基于生成的config二进制、业务TA公私钥对,编译业务TA,受用户二级证书签名保护。由用户二级证书保护的业务TA编译、签名方法与华为签名保护的TA应用方法一致;config二进制、TA公私钥对如何参与TA二进制请参考搭建TA和CA应用开发环境。
上述所有步骤涉及的私钥、证书均为演示测试使用,出于安全考虑,不建议实际生产环境中密钥、证书由上述步骤产生;相关密钥、证书的安全使用方法由用户自行设计和负责。
certmanager工具命令参考
TA证书导入使用certmanager工具,其提供证书导入、导入日志查询、证书销毁、证书导出和证书吊销列表导入功能。
- certmanager import {cert.der}
- certmanager destroy
- certmanager export log
- certmanager export cert {cert.der}
使用时要求{cert.der}文件已存在,{cert.der}文件将会保存当前安全OS已导入的证书信息。
- certmanager import_crl {cert.crl}
在未导入第三方二级证书时,可直接导入由华为签发的证书吊销列表;导入第三方证书吊销列表时,要求对应的第三方二级证书已导入。