下载
中文
注册

配置自动生成证书

若用户开启MindIE Server的TLS认证功能(HTTPS或GRPC)时,通信客户端需要校验服务端证书的IP,由于PodIP的动态性,需要在Pod启动时生成具有PodIP别名的服务证书,以实现MindIE Server中PD节点间的通信,以及MindIE MSMindIE Server的证书认证和校验。MindIE提供证书生成能力,具体操作步骤如下所示。

建议用户在运行环境中的各个计算节点准备和配置证书,提升服务安全性。

操作步骤

此方法只适用于使用自签名CA证书进行证书签发的场景。

需要按照以下方法准备MindIE Server、MindIE Controller和MindIE Coordinator三套证书。

  1. 准备自签名CA证书和加密私钥及导入。

    准备MindIE Server服务端数据面和管理面的CA证书和加密私钥

    1. 执行以下命令生成配置文件。
      cat > ca.conf <<-EOF

      配置文件ca.conf示例如下,其中req_distinguished_name中的字段需要自行配置:

      [ req ]
      distinguished_name    = req_distinguished_name
      prompt                = no
      
      [ req_distinguished_name ]
      C                     = CN
      ST                    = Sichuan
      L                     = Chengdu
      O                     = Huawei
      OU                    = Ascend
      CN                    = MindIE
      
      [ v3_ca ]
      subjectKeyIdentifier = hash
      authorityKeyIdentifier = keyid:always,issuer
      basicConstraints = critical, CA:true
      keyUsage = critical, digitalSignature, cRLSign, keyCertSign
      EOF
    2. 执行以下命令创建格式为PKCS#1的PKI私钥ca.key.pem。
      openssl genrsa -aes256 -out ca.key.pem 4096
    3. 根据回显输入私钥口令,然后按回车键。
      Enter pass phrase for ca.key.pem:
      Verifying - Enter pass phrase for ca.key.pem:

      出于安全考虑,以及后续导入证书的要求,用户输入的私钥口令的复杂度必须符合以下要求:

      • 口令长度至少8个字符;
      • 口令必须包含如下至少两种字符的组合:
        • 至少一个小写字母;
        • 至少一个大写字母;
        • 至少一个数字;
        • 至少一个特殊字符。
    4. 执行以下命令赋予ca.key.pem私钥文件可读权限。
      chmod 400 ca.key.pem
    5. 执行以下命令检查是否存在ca.key.pem私钥文件,并查看私钥内容。
      openssl rsa -in ca.key.pem

      根据回显输入1.c设置的私钥口令,然后按回车键,当显示私钥内容时表示ca.key.pem私钥文件生成成功。

    6. 执行以下命令创建CSR文件,根据回显输入1.c设置的私钥口令,然后按回车键。
      openssl req -out ca.csr -key ca.key.pem -new -config ca.conf -batch
    7. 执行以下命令赋予ca.csr文件可读可写权限。
      chmod 600 ca.csr
    8. 执行以下命令检查是否存在ca.csr文件,当显示ca.csr文件内容表示ca.csr文件生成成功。
      openssl req -in ca.csr -noout -text
    9. 执行以下命令生成CA证书ca.pem。
      openssl x509 -req -in ca.csr -out ca.pem -sha256 -days 7300 -extfile ca.conf -extensions v3_ca -signkey ca.key.pem
    10. 执行以下命令检查是否存在ca.pem文件,当有回显内容时表示ca.pem生成成功。
      openssl x509 -in ca.pem -noout -text
    11. 执行以下命令赋予ca.pem文件可读权限。
      chmod 400 ca.pem

    导入自签名CA证书和加密私钥

    1. 使用以下命令进入mindie-service安装目录。
      cd /{MindIE安装目录}/mindie-service/
    2. 通过MindIE证书管理工具import_cert接口导入CA证书和私钥,输入证书私钥口令并生成KMC加密口令文件和KMC密钥库文件。MindIE证书管理工具详情请参见config_mindie_server_tls_cert.py
      python3 ./scripts/config_mindie_server_tls_cert.py ./security/ca import_cert  {证书文件路径}  {加密私钥文件路径}

      参数解释:

      • {证书文件路径}:为CA证书的源路径。
      • {加密私钥文件路径}:为CA私钥的源路径。

      在回显时输入生成CA密钥时设置的口令:

      Password for private key file: 
      Retype password for private key file: 
  2. 准备生成证书的输入输出配置文件。
    • 生成用户证书的配置文件(gen_cert.json):
      {
          "ca_cert": "./security/ca/ca.pem",
          "ca_key": "./security/ca/ca.key.pem",
          "ca_key_pwd": "./security/ca/ca_passwd.txt",
          "cert_config": "./cert_info.json",
          "output_path": "./gen_cert_output",
          "kmc_ksf_master": "./tools/pmt/master/ksfa",
          "kmc_ksf_standby": "./tools/pmt/standby/ksfb"
      }
    • 配置"cert_config"参数中的cert_info.json配置文件的待生成证书信息:
      {
          "subject": "subject_name",
          "expired_time": 3650,
          "serial_number": 123,
          "req_distinguished_name": {
              "C": "***",
              "ST": "***",
              "L": "***",
              "O": "***",
              "OU": "***",
              "CN": "***"
          },
          "alt_names": {
              "IP": [],
              "DNS": []
          }
      }
  3. 脚本介绍的mindie_server.yaml、mindie_ms_controller.yaml和mindie_ms_coordinator.yaml配置文件中挂载上述自签名CA证书文件和配置文件到容器内/mnt/security目录,并配置为只读权限。
  4. 脚本介绍的容器启动脚本boot.sh中适配添加证书生成命令,以生成MindIE Server的证书为例,在“if [ $exit_code -eq 2 ]; then”分支内添加以下生成证书的命令。
    cp /mnt/security/ca.pem $MIES_INSTALL_PATH/security/ca
    cp /mnt/security/ca.key.pem $MIES_INSTALL_PATH/security/ca
    cp /mnt/security/ca_passwd.txt $MIES_INSTALL_PATH/security/ca
    cp /mnt/security/gen_cert.json $MIES_INSTALL_PATH
    cp /mnt/security/cert_info.json $MIES_INSTALL_PATH
    cp -r /mnt/security/tools $MIES_INSTALL_PATH/
    chmod 500 ./bin/gen_cert
    mkdir gen_cert_output
    python3 ./scripts/config_mindie_server_tls_cert.py  ./  gen_cert ./gen_cert.json  --ip=$MIES_CONTAINER_IP,{host_ip}
    chmod 400 ./gen_cert_output/*
    // 拷贝生成的证书到特定的路径
    cp ./gen_cert_output/cert.pem /home/{用户名称}/Ascend/mindie/latest/mindie-service/security/certs/server.pem
    cp ./gen_cert_output/cert.key.pem /home/{用户名称}/Ascend/mindie/latest/mindie-service/security/keys/server.key.pem
    cp ./gen_cert_output/cert_passwd.txt /home/{用户名称}/Ascend/mindie/latest/mindie-service/security/pass/mindie_server_key_pwd.txt
    rm -rf ./gen_cert_output/*
    // 下面使用其他证书配置(gen_cert_xxx.json, cert_info_xxx.json)重复上述步骤继续导入其他证书
    // cp /mnt/security/gen_cert_xxx.json $MIES_INSTALL_PATH
    // cp /mnt/security/cert_info_xxx.json $MIES_INSTALL_PATH
    // python3 ./scripts/config_mindie_server_tls_cert.py  ./  gen_cert ./gen_cert_xxx.json  --ip=$MIES_CONTAINER_IP,{host_ip}

    {host_ip}:仅MindIE MS调度器(Coordinator)需要配置,配置为提供推理API的物理机IP。