使用 CACLI 恢复 CA
适用场景
CA 集群中所有 CA 实例处于不可用状态,可能的场景如所有实例同时更换了 CPU 等,CA 之间无法完成自动授权。此时需要 Admin 参与恢复 CA,执行 unseal 操作。
准备工作
| 准备项 | 准备结果示例 |
| 确认管理门限,参与恢复的管理员 | 管理门限为 2,参与恢复的管理员为 Admin1、Admin2 |
| 确认 CA 集群实例数量 | 2 |
| 确认运维人员 | 确认由运维人员 OP 协助完成恢复 |
操作步骤
操作步骤概述
1、OP 准备 CACLI 机器和环境
2、Admin 合作完成 CA unseal
3、OP 恢复集群中其他 CA 节点
4、OP 进行资源清理收尾工作
OP 准备 CACLI 机器和环境
1、OP 准备 CACLI1 、CACLI2、CACLI-OP 三台机器,分别用于 Admin1、Admin2、OP 执行 CACLI 命令,每个 Admin 使用各自的机器执行命令;OP 在所有机器上准备好 Docker 环境、smn-ca Docker 镜像
2、OP 根据《SMN CACLI 部署》文档分别在 CACLI1、CACLI2、CACLI-OP 机器上部署好 CACLI,并执行下面命令验证 CACLI 可正常使用,其中 CA_ADDR 环境变量中的 IP 设置为 CA Server1 的主机 IP,需要注意,镜像仓库地址 registry.docker.com/smn/smn-ca 应该修改为开发者内网仓库地址,smn-ca 版本 X.Y.Z 修改为当前使用或者最新的 ca 版本
$ docker run \
-it \
--rm \
--name mpcca-cli \
-e "CA_ADDR=http://CA Server1's IP:8090" \
-v /etc/sgx_default_qcnl.conf:/etc/sgx_default_qcnl.conf \
registry.gitlab.com/safeheron-mpc-node/smn/smn-ca:X.Y.Z \
cacli status
-------------------- Output Example --------------------
CA Status: Unauthorized
Seal Type: Shamir
Total Shares: 3
Threshold: 2
Version: 1.1.0
Root Key Hash: 1b06962e****5af01edf
MRENCLAVE: a9408284******23f5643
MRENCLAVE_SIG: business******de1003、OP 准备必要的信息分别发送给两位 Admin,信息包括:
- 如何连接和使用 CACLI1、CACLI2 服务器,SSH 凭证或者云服务厂商凭证
- 通过 Docker 使用 CACLI 的命令,写好环境变量、镜像地址、镜像版本、需要执行的命令等,减少 Admin 操作步骤和复杂度,比如准备好以下信息,只需要管理员复制粘贴即可:
docker run \
-it \
--rm \
--name mpcca-cli \
-e "CA_ADDR=http://192.168.0.100:8090" \
-v /etc/sgx_default_qcnl.conf:/etc/sgx_default_qcnl.conf \
registry.docker.com/smn/smn-ca:1.1.0 \
cacli admin unseal --init
docker run \
-it \
--rm \
--name mpcca-cli \
-e "CA_ADDR=http://192.168.0.100:8090" \
-v /etc/sgx_default_qcnl.conf:/etc/sgx_default_qcnl.conf \
registry.docker.com/smn/smn-ca:1.1.0 \
cacli admin unseal --input --nonce=replace-me- 整理一份适合内部使用的操作文档,供 Admin 参考使用
Admin 合作完成 CA unseal
1、Admin1 登录 CACLI1 执行以下命令,启动 CA 恢复任务,执行命令后在提示处输入备份的授权密钥分片并回车,把命令输出的 CA Unseal Operation Nonce: 53ee44e3-1008-49c9-bde6-b8d0106e926d发送给 Admin2,并通知 Admin2 进行恢复 unseal 操作。
$ docker run \
-it \
--rm \
--name mpcca-cli \
-e "CA_ADDR=http://192.168.0.100:8090" \
-v /etc/sgx_default_qcnl.conf:/etc/sgx_default_qcnl.conf \
registry.gitlab.com/safeheron-mpc-node/smn/smn-ca:1.1.0 \
cacli admin unseal --init
-------------------- Input Tips ------------------------
Please input your unseal key(Input will be hidden, and type Enter to confirm input. The nonce of the current operation is 'a0c7a609-43b8-43cc-8ccc-165326584ce1'): <Unseal Key>
-------------------- Output Example --------------------
CA Unseal Operation Nonce: a0c7a609-43b8-43cc-8ccc-165326584ce1
Unseal Progress: 1/2
Unseal Result: unfinished
...2、Admin2 登录 CACLI2 执行以下命令,执行命令后在提示处输入备份的授权密钥分片并回车,并确保输出的Unseal Result为 true。命令参数--nonce 的值为 Admin1 提供的 CA Unseal Operation Nonce
$ docker run \
-it \
--rm \
--name mpcca-cli \
-e "CA_ADDR=http://192.168.0.100:8090" \
-v /etc/sgx_default_qcnl.conf:/etc/sgx_default_qcnl.conf \
registry.gitlab.com/safeheron-mpc-node/smn/smn-ca:1.1.0 \
cacli admin unseal --input --nonce=a0c7a609-43b8-43cc-8ccc-165326584ce1
-------------------- Input Tips ------------------------
Please input your unseal key(Input will be hidden, and type Enter to confirm input. The nonce of the current operation is 'a0c7a609-43b8-43cc-8ccc-165326584ce1'): <Unseal Key>
-------------------- Output Example --------------------
CA Unseal Operation Nonce: a0c7a609-43b8-43cc-8ccc-165326584ce1
Unseal Progress: 2/2
Unseal Result: true
...3、Admin2 执行命令后,如果输出Unseal Result为 true,则标识恢复成功,通知 OP 进入下个步骤。
OP 恢复集群中其他 CA 节点
1、OP 登录 CACLI-OP 执行以下命令,其中 CA_ADDR 环境变量中的 IP 设置为 CA Server1 的主机 IP,确认 CA Server1 恢复完成,即命令输出的CA Status为 Authorized
$ docker run \
-it \
--rm \
--name mpcca-cli \
-e "CA_ADDR=http://CA Server1's IP:8090" \
-v /etc/sgx_default_qcnl.conf:/etc/sgx_default_qcnl.conf \
registry.gitlab.com/safeheron-mpc-node/smn/smn-ca:1.1.0 \
cacli status
-------------------- Output Example --------------------
CA Status: Authorized
Seal Type: Shamir
Total Shares: 3
Threshold: 2
Version: 1.1.0
Root Key Hash: 1b06962e****5af01edf
MRENCLAVE: a9408284******23f5643
MRENCLAVE_SIG: business******de1002、OP 确认 CA Server2 中 CA 配置文件中的AuthorizedCAUrl指向 CA Server1 的 IP 后,启动 CA 服务。
# 部署第二台 CA 时需要配置,第一台不需要此配置
[Authority]
AuthorizedCAUrl = 'http://CA Server1's IP:8090'3、OP 在 CACLI-OP 终端执行以下命令,确认 CA Server2 初始化完成,即命令输出的CA Status为 Authorized。其中 CA_ADDR 环境变量中的 IP 设置为 CA Server2 的主机 IP
$ docker run \
-it \
--rm \
--name mpcca-cli \
-e "CA_ADDR=http://CA Server2's IP:8090" \
-v /etc/sgx_default_qcnl.conf:/etc/sgx_default_qcnl.conf \
registry.gitlab.com/safeheron-mpc-node/smn/smn-ca:1.0.0 \
cacli status
-------------------- Output Example --------------------
CA Status: Authorized
Seal Type: Shamir
Total Shares: 3
Threshold: 2
Version: 1.1.0
Root Key Hash: 1b06962e****5af01edf
MRENCLAVE: a9408284******23f5643
MRENCLAVE_SIG: business******de1004、集群恢复完成。
OP 进行资源清理收尾工作
CACLI1、 CACLI2、CACLI-OP 主机中不保存任何数据,在以上所有操作执行完成后,即可释放主机资源。后续在需要时按需提供主机部署 CACLI 即可。