证书及密钥生成导入样例
使用KMC加密算法进行CA密钥和KMC密钥文件生成,本章节以“certImport.sh”为例,通过调用 “${MX_SDK_HOME}/bin”目录下的“CertImport”(C++可执行程序)进行证书验证、导入和密钥生成写入。

- 执行脚本前,请确保执行脚本的当前用户、导入的文件属主为安装Vision SDK的用户。若当前目录下存在文件夹“keys”,请确保该文件夹权限为“700”且属主为当前执行脚本的用户。若“keys”文件夹中已包括以下文件:“ca.crt”、“server.crt”、“server.key”、“ca.crl”(可选),请根据实际业务需求备份并删除上述文件后再执行脚本。若不存在“keys”文件夹,请忽略该条说明。
- 请确保被导入的证书、私钥、吊销列表文件属主为当前执行脚本用户,被导入的私钥文件权限要求不大于“640”,建议导入前所有被导入的所有文件权限均为“400”。
- 该脚本包括“证书拷贝”和“密钥加密”等多个步骤,如果“密钥加密”步骤失败,则证书等文件已完成拷贝。由于拷贝后的文件默认不可写入,若要再次执行该脚本,请在执行前清除已拷贝到目标路径的证书等文件。
- 导入脚本仅支持RSA相关密钥导入,证书的签名算法仅支持sha256和sha512。
- 执行以下命令可以显示“certImport.sh”的使用帮助信息。
$ bash ./certImport.sh -h
- 执行KMC相关的脚本时避免混用账户,以免对日志记录操作用户造成影响。
- certImport.sh脚本在StreamServer启动脚本(run.sh)中被调用,用户无需单独使用该脚本。
- 进入“$MX_SDK_HOME/sample/mxVision/streamserver/”路径下,包含以下内容。
├── InferConfigRepository │ ├── ... ├── run.sh //StreamServer启动脚本 ├── certImport.sh //证书导入加密脚本 ├── ...
- 执行脚本,导入证书及生成KMC密文密钥。
执行kmc相关的加密算法,主要流程包括证书校验、KMC加密、写入配置文件等步骤。请参见以下命令执行。
$ bash ./certImport.sh -c <ca.crt_path> -s <server.crt_path> -k <server.key_path>
<ca.crt_path>为ca证书路径,<server.crt_path>为服务器端证书路径,<server.key_path>为服务器端证书密钥路径,分别以添加“-c”、“-s”、“-k”参数的形式进行传入。
用于用户导入证书、密钥文件,执行过程中需要用户手动输入服务端证书的密码,该脚本限制密码要不大于100个字符。
- 若证书校验成功且加密成功,指定路径的证书会被拷贝到当前目录下的keys文件夹内,其相对路径会被写入配置文件“$MX_SDK_HOME/config/streamserver.conf ”的“ca_crt”、“server_crt”和“server_key”中。
- 若当前目录下不存在主密钥文件“kmc.ks”和备份密钥文件“StandbyKsf.ks”,加密时会在当前路径的keys目录下生成主密钥文件“kmc.ks” 和备份密钥文件“StandbyKsf.ks”。生成的密钥信息会被自动填写到“$MX_SDK_HOME/config/streamserver.conf ”的“server_key_mm”一项中。
命令执行参考如下:
$ bash ./certImport.sh -c <ca.crt_path> -s <server.crt_path> -k <server.key_path> -r <crl_path>
<ca.crt_path>为ca证书路径,<server.crt_path>为服务器端证书路径,<server.key_path>为服务器端证书密钥路径,<crl_path>为吊销列表路径,分别以添加“-c”、“-s”、“-k”、“-r”参数的形式进行传入。
用于用户导入证书、密钥和吊销列表,执行过程中需要用户手动输入服务端证书的密码,该脚本限制密码应不大于100个字符。
- 若证书校验成功且加密成功,指定路径的证书、密钥和吊销列表会被拷贝到当前目录下的“keys”文件夹内,其相对路径会被写入配置文件“$MX_SDK_HOME/config/streamserver.conf”的“ca_crt”、“server_crt”、“server_key”、“crl”中。
- 若当前目录下不存在主密钥文件“kmc.ks”和备份密钥文件“StandbyKsf.ks”,加密时会在当前路径的“keys”目录下生成主密钥文件“kmc.ks” 和备份密钥文件“StandbyKsf.ks”。生成的密钥信息会被自动填写到“$MX_SDK_HOME/config/streamserver.conf ”的“server_key_mm”一项中。
- 若在导入过程中提示导入失败(原因主要为吊销列表不合法等情况)或暂时不使用该吊销列表,请检查“streamserver.conf”中的“crl”项。若该项不为空,可将其手动置为空。
- 如果服务启动时在配置文件中指定了吊销列表,服务运行中可以更新吊销列表路径对应的文件,以实现对客户端证书的动态吊销。吊销列表文件不能被直接覆盖,需要先将其删除后再将新的吊销列表文件以相同名称拷贝到对应路径(确保新的吊销列表属主为安装Vision SDK的用户且权限为“400”)。若启动时未指定吊销列表则不可在服务运行中进行更改。
- 使用KMC进行加密计算时,可能出现KMC初始化随机数阻塞但未抛出Error,等待时间不定可恢复,具体可参考在服务端接收请求或执行证书导入脚本时,KMC初始化随机数阻塞。
- 脚本执行文件所在路径为“$MX_SDK_HOME/bin/CertImport”。
- 若该导入脚本执行失败,配置文件的信息可能不会发生变化,请通过手动方式设置配置文件中的配置项。
- 脚本执行成功,生成目录结构,用户可根据实际情况启动服务。
├── InferConfigRepository │ ├── ... ├── keys │ ├── ca.crt //ca证书 │ ├── server.crt //server证书 │ ├── server.key //server密钥 │ ├── ca.crl //ca吊销列表(可选) │ ├── kmc.ks //kmc主密钥 │ ├── StandbyKsf.ks //kmc备份密钥 ├── run.sh //StreamServer启动脚本 ├── certImport.sh //证书导入加密脚本 ├── ...
证书/私钥/吊销列表更新替换
在服务运行的过程中,若因为证书到期等原因需要对证书/私钥/吊销列表等进行更新或替换时,需要当前证书等文件的所有者用户按序执行如下步骤。
- 备份“keys”文件夹或“keys”文件夹中待替换的证书/私钥/吊销列表文件。
- 删除“keys”文件夹中待替换的证书/私钥/吊销列表文件。
- 选择以下一种方式导入证书/私钥/吊销列表。
- 使用cp命令将与原证书/私钥/吊销列表相同格式的新的证书/私钥/吊销列表文件拷贝至“keys”文件夹中,新文件需与被替换文件命名相同、属主相同且均为安装Vision SDK的用户,新的证书/私钥/吊销列表需要设置为“400”权限。
- 执行“certImport.sh”脚本对新证书/私钥/吊销列表进行导入。若使用脚本进行导入,请注意备份该脚本所指定参数的所有将被替换的文件,导入成功时,配置文件中的“server_key_mm”可能会被更新。

整个更新替换过程中对推理服务发送的请求可能会出现由于缺少相关证书/私钥/吊销列表文件而产生异常的情况。
更新完成后,请及时清理被替换的相关证书/私钥/吊销列表文件,以免信息泄露。
父主题: KMC组件