下载
中文
注册

创建并激活根证书

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

  • 创建根证书前,用户需确保本地环境已安装符合所在组织安全要求的Openssl(Openssl版本需在1.1及以上,若版本不满足要求,请升级Openssl版本,建议安装最新且无漏洞版本)。
  • 以下示例步骤中生成的各级CA证书、签名证书、吊销列表包含有效期信息,用户可以根据产品生命周期调整对应文件的有效期,若48生成的各类文件任一超出有效期,则需要重新生成各类证书文件和开放态文件系统CMS签名文件,并重新部署文件系统。
  1. 登录Linux服务器并执行如下命令切换至root用户。

    su - root

  2. 进入Linux服务器任意目录,比如/root/sign,在该目录下创建并编写CMS签名依赖的各类证书。
  3. 生成一级CA根证书(非首次创建CMS签名时,可跳过该步骤)。
    1. 执行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!保存该文件。

    2. 执行如下命令创建一级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

  4. 生成二级CA签名证书。
    1. 执行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!保存该文件。

    2. 执行如下命令创建二级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

  5. 生成二级CA时间戳证书。
    1. 执行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!保存该文件。

    2. 执行如下命令创建二级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

  6. 生成三级签名证书。
    1. 执行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!保存该文件。

    2. 执行如下命令创建三级签名证书。其中-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

  7. 生成三级时间戳证书。
    1. 执行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!保存该文件。

    2. 执行如下命令创建三级时间戳证书。其中-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

  8. 生成吊销列表文件。
    • 37生成的各类文件需要在吊销列表的有效期内签发开放文件系统的CMS签名文件,否则将验证失败,需要重新生成CMS签名并部署文件系统。
    • default_days=365表示颁发证书的有效期为365天,default_crl_days=30表示30天发布一次证书吊销列表。其中default_days需大于等于default_crl_days的值,用户可以根据产品生命周期自行调整default_daysdefault_crl_days字段,修改吊销列表文件的有效期。
    1. 执行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
    2. 执行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
    3. 执行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
    4. 执行如下命令生成吊销列表文件。

      touch index

      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

  9. 用户的一级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

  10. 将上述步骤生成的usrcert.ini发送至华为工程师获取签名文件usrcert.ini.cmsusrcert.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

  11. 执行如下命令生成用户吊销列表文件user.crl。

    cat rootG2.crl sign.crl ts.crl signca.der tsca.der > user.crl

    经过以上操作获取到用户根证书文件user.xer和用户吊销列表文件user.crl