TA证书导入工具的CA(cert manager CA)、TA(cert manager TA)均开源至openEuler社区。使用该工具需要用户准备根公钥(用于验签二级证书)、二级证书(用于导入)、TA证书(用于业务TA)、config证书(用于验签业务TA config二进制),各个证书层级关系可参考图1。
下载地址:https://gitee.com/openeuler/itrustee_sdk.git
代码分支:master
代码提交点:22c68de6cac1810c927a91bf86a40cc07b5005a2
iTrustee SDK已包含cert manager CA、TA源码,代码相对路径如下:
cd itrustee_sdk/thirdparty/open_source git clone https://gitee.com/openeuler/libboundscheck.git cd libboundscheck make cp lib/libboundscheck.so /usr/lib64
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
vim itrustee_sdk/test/TA/cert_manager/include/cert_config.h
cd itrustee_sdk/test/CA/cert_manager make cp certmanager /usr/bin
编译成功后,会在当前目录产生certmanager二进制,需部署到“/usr/bin”目录。该目录由cert manager TA代码指定,可根据实际需要予以替换。
cert manager TA同普通TA一样,需先获取华为颁发的TA开发者证书,请参考调测环境TA应用开发者证书申请。
<?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>
“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
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"
[ v3_ca ] subjectKeyIdentifier=hash authorityKeyIdentifier=keyid:always,issuer subjectAltName=DNS:localhost,DNS:*.localhost basicConstraints = critical,CA:true keyUsage = cRLSign,keyCertSign
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
openssl x509 -in second.crt -outform der -out second.der
/usr/bin/certmanager import second.der
成功导入后,用户可基于二级证书自行颁发TA证书以及签发config,然后参与TA编译形成业务TA,此时安全OS仅允许加载三方TA(由用户二级证书签发的TA证书)以及系统TA(configs.xml注有<sys_verify_ta>标签)加载运行,原由华为签发的TA证书的TA将会加载失败。
在完成用户二级证书导入后,安全OS将使用导入的二级证书验签后续加载的业务TA。可参考如下步骤生成业务TA证书、config证书以及config二进制,并最终生成可用的业务TA。
生成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"
openssl x509 -req -in cert_req_01.csr -CA ../second/second.crt -CAkey../second/second.key -CAcreateserial -out taconfig.crt -sha256 -days 3650
openssl x509 -in taconfig.crt -outform der -out taconfig.der
生成业务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"
openssl x509 -req -in cert_req_01.csr -CA ../second/second.crt -CAkey../second/second.key -CAcreateserial -out tacert.crt -sha256 -days 3650
openssl x509 -in tacert.crt -outform der -out ta_cert.der
vim configs.xml
<?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>
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
mv configs.xml itrustee_sdk/build/pack-Config/input
mv taconfig.key itrustee_sdk/build/pack-Config/config_cert/config_cert_private.key mv taconfig.der itrustee_sdk/build/pack-Config/config_cert/
mv ta_cert.der itrustee_sdk/build/pack-Config/ta_cert/
cd itrustee_sdk/build/pack-Config bash local_sign.sh
config二进制成功编译后,会放置在“itrustee_sdk/build/pack-Config/output/”目录下。
上述所有步骤涉及的私钥、证书均为演示测试使用,出于安全考虑,不建议实际生产环境中密钥、证书由上述步骤产生;相关密钥、证书的安全使用方法由用户自行设计和负责。
TA证书导入使用certmanager工具,其提供证书导入、导入日志查询、证书销毁、证书导出和证书吊销列表导入功能。
使用时要求{cert.der}文件已存在,{cert.der}文件将会保存当前安全OS已导入的证书信息。
在未导入第三方二级证书时,可直接导入由华为签发的证书吊销列表;导入第三方证书吊销列表时,要求对应的第三方二级证书已导入。