创建并激活根证书
本章节将指导用户编写CMS签名依赖的证书文件,并激活用户根证书,生成用户根证书文件user.xer和证书吊销列表文件user.crl。建议将本章节生成的各类证书文件保存至固定的文件夹,可以在CANN 6.0.RC1及更新版本中各类证书有效期内实现安全启动功能时一直使用。

- 登录Linux服务器并执行如下命令切换至root用户。
su - root
- 进入Linux服务器任意目录,比如/root/sign,在该目录下创建并编写CMS签名依赖的各类证书。
- 生成一级CA根证书(非首次创建CMS签名时,可跳过该步骤)。
- 执行vi x509_rootcaG2.cnf命令生成并编写x509_rootcaG2.cnf文件,将如下内容加入到该文件中。
[ req ] default_bits = 4096 distinguished_name = req_distinguished_name prompt = no string_mask = utf8only x509_extensions = extensions [ req_distinguished_name ] C = CN O = Test CN = RootCA G2 #emailAddress = cmscbb@huawei.com [ extensions ] subjectKeyIdentifier = hash authorityKeyIdentifier = keyid:always, issuer basicConstraints = CA:TRUE keyUsage = cRLSign, keyCertSign
执行:wq!保存该文件。
- 执行如下命令创建一级CA根证书。其中-days 36500表示一级CA根证书有效期为100年。
openssl req -new -sigopt rsa_padding_mode:pss -sigopt rsa_pss_saltlen:-1 -nodes -utf8 -sha256 -days 36500 -batch -x509 -config x509_rootcaG2.cnf -outform PEM -out rootcaG2.pem -keyout rootca_priG2_pri.pem
openssl x509 -in rootcaG2.pem -inform pem -outform der -out rootcaG2.der
- 执行vi x509_rootcaG2.cnf命令生成并编写x509_rootcaG2.cnf文件,将如下内容加入到该文件中。
- 生成二级CA签名证书。
- 执行vi x509_signca.cnf命令生成并编写x509_signca.cnf文件,将如下内容加入到该文件中。
[ req ] default_bits = 4096 distinguished_name = req_distinguished_name prompt = no string_mask = utf8only x509_extensions = extensions [ req_distinguished_name ] C = CN O = Test CN = Signing Certificate CA G2 #emailAddress = cmscbb@huawei.com [ extensions ] subjectKeyIdentifier = hash authorityKeyIdentifier = keyid, issuer basicConstraints = CA:TRUE keyUsage = cRLSign, keyCertSign extendedKeyUsage = codeSigning
执行:wq!保存该文件。
- 执行如下命令创建二级CA签名证书。其中-days 3650表示二级CA签名证书有效期为10年。
openssl genrsa -out signca_pri.pem 4096
openssl req -new -config x509_signca.cnf -out signca.csr -key signca_pri.pem
openssl x509 -req -in signca.csr -sigopt rsa_padding_mode:pss -sigopt rsa_pss_saltlen:-1 -CA rootcaG2.pem -CAkey rootca_priG2_pri.pem -CAcreateserial -out signca.pem -days 3650 -extensions extensions -extfile x509_signca.cnf
openssl x509 -in signca.pem -inform pem -outform der -out signca.der
- 执行vi x509_signca.cnf命令生成并编写x509_signca.cnf文件,将如下内容加入到该文件中。
- 生成二级CA时间戳证书。
- 执行vi x509_tsca.cnf命令生成并编写x509_tsca.cnf文件,将如下内容加入到该文件中。
[ req ] default_bits = 4096 distinguished_name = req_distinguished_name prompt = no string_mask = utf8only x509_extensions = extensions [ req_distinguished_name ] C = CN O = Test CN = Timestamp Certificate CA G2 #emailAddress = cmscbb@huawei.com [ extensions ] subjectKeyIdentifier = hash authorityKeyIdentifier = keyid:always, issuer basicConstraints = CA:TRUE keyUsage = cRLSign, keyCertSign extendedKeyUsage = critical, timeStamping [ tsa ] default_tsa = tsa_config1 [ tsa_config1 ] serial = ./serial crypto_device = builtin #certs = ./certs/tsa.pem signer_digest = sha256 default_policy = 1.2.3.4.1 other_policies = 1.2.3.4.5.6, 1.2.3.4.5.7 digests = sha256, sha384, sha512 ess_cert_id_chain = no ess_cert_id_alg = sha256
执行:wq!保存该文件。
- 执行如下命令创建二级CA时间戳证书。其中-days 3650表示二级CA时间戳证书有效期为10年。
openssl genrsa -out tsca_pri.pem 4096
openssl req -new -config x509_tsca.cnf -out tsca.csr -key tsca_pri.pem
openssl x509 -req -sigopt rsa_padding_mode:pss -sigopt rsa_pss_saltlen:-1 -in tsca.csr -CA rootcaG2.pem -CAkey rootca_priG2_pri.pem -CAcreateserial -out tsca.pem -days 3650 -extensions extensions -extfile x509_tsca.cnf
openssl x509 -in tsca.pem -inform pem -outform der -out tsca.der
- 执行vi x509_tsca.cnf命令生成并编写x509_tsca.cnf文件,将如下内容加入到该文件中。
- 生成三级签名证书。
- 执行vi x509_signcert.cnf命令生成并编写x509_signcert.cnf文件,将如下内容加入到该文件中。
[ req ] default_bits = 4096 distinguished_name = req_distinguished_name prompt = no string_mask = utf8only x509_extensions = extensions [ req_distinguished_name ] C = CN O = Test CN = Signing Certificate G2 #emailAddress = cmscbb@huawei.com [ extensions ] subjectKeyIdentifier = hash authorityKeyIdentifier = keyid, issuer basicConstraints = CA:FALSE keyUsage = critical, nonRepudiation, digitalSignature extendedKeyUsage = codeSigning
执行:wq!保存该文件。
- 执行如下命令创建三级签名证书。其中-days 3650表示三级签名证书有效期为10年。
openssl genrsa -out signcert_pri.pem 4096
openssl req -new -config x509_signcert.cnf -out signcert.csr -key signcert_pri.pem
openssl x509 -req -sigopt rsa_padding_mode:pss -sigopt rsa_pss_saltlen:-1 -in signcert.csr -CA signca.pem -CAkey signca_pri.pem -CAcreateserial -out signcert.pem -days 3650 -extensions extensions -extfile x509_signcert.cnf
openssl x509 -in signcert.pem -inform pem -outform der -out signcert.der
- 执行vi x509_signcert.cnf命令生成并编写x509_signcert.cnf文件,将如下内容加入到该文件中。
- 生成三级时间戳证书。
- 执行vi x509_tsa.cnf命令生成并编写x509_tsa.cnf文件,将如下内容加入到该文件中。
[ req ] default_bits = 4096 distinguished_name = req_distinguished_name prompt = no string_mask = utf8only x509_extensions = extensions [ req_distinguished_name ] C = CN O = Test CN = Timestamp Certificate G2 #emailAddress = cmscbb@huawei.com [ extensions ] subjectKeyIdentifier = hash authorityKeyIdentifier = keyid, issuer basicConstraints = critical, CA:FALSE keyUsage = critical, nonRepudiation, digitalSignature extendedKeyUsage = critical, timeStamping [ tsa ] default_tsa = tsa_config1 [ tsa_config1 ] serial = ./serial crypto_device = builtin #certs = ./certs/tsa.pem signer_digest = sha256 default_policy = 1.2.3.4.1 other_policies = 1.2.3.4.5.6, 1.2.3.4.5.7 digests = sha256, sha384, sha512 ess_cert_id_chain = no ess_cert_id_alg = sha256
执行:wq!保存该文件。
- 执行如下命令创建三级时间戳证书。其中-days 3650表示三级时间戳证书有效期为10年。
openssl genrsa -out ts_pri.pem 4096
openssl req -new -config x509_tsa.cnf -out ts.csr -key ts_pri.pem
openssl x509 -req -sigopt rsa_padding_mode:pss -sigopt rsa_pss_saltlen:-1 -in ts.csr -CA tsca.pem -CAkey tsca_pri.pem -CAcreateserial -out ts.pem -days 3650 -extensions extensions -extfile x509_tsa.cnf
openssl x509 -in ts.pem -inform pem -outform der -out ts.der
- 执行vi x509_tsa.cnf命令生成并编写x509_tsa.cnf文件,将如下内容加入到该文件中。
- 生成吊销列表文件。
- 执行vi x509_crl.cnf命令生成并编写一级CA吊销列表所需x509_crl.cnf文件,将如下内容加入到该文件中。
[ ca ] default_ca=CA_default [ CA_default ] database=./index crlnumber=./crlnumber private_key=./rootca_priG2_pri.pem crl_extensions=crl_ext default_days=365 default_crl_days=30 default_md=default preserve=no [ crl_ext ] authorityKeyIdentifier=keyid
- 执行vi signcrl.cnf命令生成并编写三级签名证书吊销列表所需signcrl.cnf文件,将如下内容加入到该文件中。
[ ca ] default_ca=CA_default [ CA_default ] database=./index crlnumber=./crlnumbersign private_key=./signca_pri.pem crl_extensions=crl_ext default_days=365 default_crl_days=30 default_md=default preserve=no [ crl_ext ] authorityKeyIdentifier=keyid
- 执行vi tscrl.cnf命令生成并编写三级时间戳证书吊销列表所需tscrl.cnf文件,将如下内容加入到该文件中。
[ ca ] default_ca=CA_default [ CA_default ] database=./index crlnumber=./crlnumberts private_key=./tsca_pri.pem crl_extensions=crl_ext default_days=365 default_crl_days=30 default_md=default preserve=no [ crl_ext ] authorityKeyIdentifier=keyid
- 执行如下命令生成吊销列表文件。
echo unique_subject=no > index.attr
echo 01 > crlnumber
echo 05 > crlnumbersign
echo 09 > crlnumberts
openssl ca -gencrl -key rootca_priG2_pri.pem -cert rootcaG2.pem -out crl.pem -config x509_crl.cnf -sigopt rsa_padding_mode:pss -sigopt rsa_pss_saltlen:-1
openssl crl -in crl.pem -inform pem -outform der -out rootG2.crl
openssl ca -gencrl -key signca_pri.pem -cert signca.pem -out signcrl.pem -config signcrl.cnf -sigopt rsa_padding_mode:pss -sigopt rsa_pss_saltlen:-1
openssl crl -in signcrl.pem -inform pem -outform der -out sign.crl
openssl ca -gencrl -key tsca_pri.pem -cert tsca.pem -out tscrl.pem -config tscrl.cnf -sigopt rsa_padding_mode:pss -sigopt rsa_pss_saltlen:-1
openssl crl -in tscrl.pem -inform pem -outform der -out ts.crl
- 执行vi x509_crl.cnf命令生成并编写一级CA吊销列表所需x509_crl.cnf文件,将如下内容加入到该文件中。
- 用户的一级CA根证书rootcaG2.der需要华为进行CMS签名。进行签名前,需要执行如下命令对用户根证书进行预处理,生成摘要信息文件usrcert.ini(非首次创建CMS签名时,可跳过该步骤)。
python3 /usr/local/software/driver/source/vendor/hisi/tools/signtool/image_pack/esbc_header.py -raw_img ./rootcaG2.der -out_img ./user.der -version 1.1.1.1.1 -nvcnt 0 -tag usrcert -platform hi1910p
digest=`sha256sum user.der | awk '{print $1}'`
echo "usrcert, ${digest};" > ./usrcert.ini
- 将上述步骤生成的usrcert.ini发送至华为工程师获取签名文件usrcert.ini.cms和usrcert.ini.crl。之后执行如下命令生成用户根证书文件user.xer文件(非首次创建CMS签名时,可跳过该步骤)。
python3 /usr/local/software/driver/source/vendor/hisi/tools/signtool/image_pack/image_pack.py -raw_img ./user.der -out_img ./user.xer -cms ./usrcert.ini.cms -ini ./usrcert.ini -crl ./usrcert.ini.crl --addcms -version 1.1.1.1.1 -platform hi1910p --pss
- 执行如下命令生成用户吊销列表文件user.crl。
cat rootG2.crl sign.crl ts.crl signca.der tsca.der > user.crl
经过以上操作获取到用户根证书文件user.xer和用户吊销列表文件user.crl。