---
title: 使用实例
description: "TA证书导入工具的CA（cert manager CA）、TA（cert manager TA）均开源至openEuler社区。使用该工具需要用户准备根公钥（用于验签二级证书）、二级证书（用于导入）、TA证书（用于业务TA）、config证书（用于验签业务TA config二进制），各个证书层级关系可参考图1。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengboostkithistory/240RC2/confidt/kunpengtrustzone_20_0032.html
sourcePath: /source/zh/kunpengboostkithistory/240RC2/confidt/kunpengtrustzone_20_0032.html
indexId: 288457e24f9ada23048c6d0ba71643c4714b3b393899aa1fbd443e4b07c7945278
---
# 使用实例

TA证书导入工具的CA（cert manager CA）、TA（cert manager TA）均开源至openEuler社区。使用该工具需要用户准备根公钥（用于验签二级证书）、二级证书（用于导入）、TA证书（用于业务TA）、config证书（用于验签业务TA config二进制），各个证书层级关系可参考图1。

图1 TA二级证书导入证书关系

- 根公钥负责验签二级证书有效性，需固定编码在cert manager TA代码中。
- 二级证书是被实际导入到TEE侧证书，负责验签业务TA中的TA证书和config证书有效性。
- TA证书和config证书均由用户基于二级证书签发获得。TA证书负责业务TA代码完整性保护；config证书负责config二进制完整性保护，config二进制主要负责TA在TEE侧资源使用限制。

#### 获取并使用TA证书导入工具

1. 下载配套iTrustee SDK，已包含cert manager CA、cert manager TA源码。

  a. 获取iTrustee SDK。
下载地址：https://gitee.com/openeuler/itrustee_sdk.git(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”
  b. 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
```


    以上命令中的路径请根据实际情况予以替换。 安全函数库需放到系统动态库搜索路径下。

2. 设置cert manager TA根公钥。

  a. 生成根证书。

```
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
```


  b. 提取生成的根公钥。

```
openssl x509 -in root.crt -pubkey -noout -C
```


    图2 根公钥示例

  c. 打开“cert_config.h”文件，路径请根据实际情况进行替换。

```
vim
itrustee_sdk/test/TA/cert_manager/include/
cert_config.h
```


  d. 按“i”键进入编辑模式，替换cert manager TA中的根公钥信息，即g_root_public_key数组内容。
  e. 按“Esc”键退出编辑模式，输入:wq!并按“Enter”键保存退出文件。
3. 编译cert manager CA工具。

```
cd
itrustee_sdk/test/CA/cert_manager
make
cp certmanager /usr/bin
```


  编译成功后，会在当前目录产生certmanager二进制，需部署到“/usr/bin”目录。该目录由cert manager TA代码指定，可根据实际需要予以替换。

4. 编译cert manager TA工具。
cert manager TA同普通TA一样，需先获取华为颁发的TA开发者证书，请参考调测环境TA应用开发者证书申请。

  a. 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>
```


  b. 获取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”

  c. 进入部署路径执行编译。

```
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

5. 基于2中生成的根证书，生成用于导入的二级证书。
  a. 生成二级证书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"
```


  b. 准备证书颁发配置文件openssl.cnf，配置文件内容可参考如下。

```
[ v3_ca ]
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid:always,issuer
subjectAltName=DNS:localhost,DNS:*.localhost
basicConstraints = critical,CA:true
keyUsage = cRLSign,keyCertSign
```


  c. 生成二级证书文件，其中“-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
```


  d. 将二级证书格式转换为DER格式。

```
openssl x509 -in second.crt -outform der -out second.der
```


6. 运行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。

1. 基于导入的二级证书，生成config证书。

  a. 生成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"
```


  b. 生成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
```


  c. 将config证书格式转换为DER格式。

```
openssl x509 -in taconfig.crt -outform der -out taconfig.der
```


2. 基于导入的二级证书，生成业务TA证书。

  a. 生成业务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"
```


  b. 生成业务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
```


  c. 将config证书格式转换为DER格式。

```
openssl x509 -in tacert.crt -outform der -out ta_cert.der
```


3. 准备业务TA TEE侧资源使用配置文件“configs.xml”。

  a. 新建文件。

```
vim configs.xml
```


  b. 按“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>
```


  c. 按“Esc”键退出编辑模式，输入:wq!并按“Enter”键保存退出文件。
4. 基于iTrustee SDK，编译业务TA config二进制。

  a. 新建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
```


  b. 放置业务TA“configs.xml”文件。

```
mv configs.xml itrustee_sdk/build/pack-Config/input
```


  c. 放置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/
```


  d. 放置业务TA证书。

```
mv ta_cert.der itrustee_sdk/build/pack-Config/ta_cert/
```


  e. 编译业务TA config二进制。

```
cd itrustee_sdk/build/pack-Config
bash local_sign.sh
```


    config二进制成功编译后，会放置在“itrustee_sdk/build/pack-Config/output/”目录下。

5. 基于生成的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}
  命令功能：导入吊销证书列表。

  在未导入第三方二级证书时，可直接导入由华为签发的证书吊销列表；导入第三方证书吊销列表时，要求对应的第三方二级证书已导入。
