使用 CACLI 初始化 CA 集群
适用场景
开发者首次部署 SMN 产品套件时,需要首次部署 CA,此时需要运维和管理员一起参与,完成 CA 的初始化和 Unseal Keys 备份。
准备工作
在进行首次部署 CA 集群时,需要完成以下准备:
| 准备项 | 准备结果示例 |
| CA 集群实例个数 | 2 |
| 确认管理员人员和管理门限 | 确认 Admin1、Admin2、Admin3 三位管理员参与管理,管理门限 2/3 |
| 确认运维人员 | 确认由运维人员 OP 运维和部署 CA 集群 |
操作步骤
操作步骤概述
1、OP 准备 CA 和 CACLI 机器和环境
2、Admin 合作完成 CA setup
3、OP 启动集群中其他 CA 节点
4、OP 进行资源清理收尾工作
OP 准备 CA 和 CACLI 机器和环境
1、OP 准备 CA Server1 、CA Server2 两台机器,用于部署 SMN CA;准备 CACLI1 、CACLI2、CACLI3、CACLI-OP 四台机器,分别用于 Admin1、Admin2、Admin3、OP 执行 CACLI 命令,每个 Admin 使用各自的机器执行命令;OP 在所有机器上准备好 Docker 环境、smn-ca Docker 镜像
2、OP 根据《SMN CA 部署》文档在 CA Server1 主机上部署 CA,CA 配置文件中不要配置 AuthorizedCAUrl 配置项,启动 CA;在 CA Server2 主机上部署 CA,CA 配置文件中的AuthorizedCAUrl指向 CA Server1 的 IP,不要启动。
# 部署第二台 CA 时需要配置,第一台不需要此配置
[Authority]
AuthorizedCAUrl = 'http://CA Server1's IP:8090'3、OP 根据《SMN CACLI 部署》文档分别在 CACLI1、CACLI2、CACLI3 机器上部署好 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.docker.com/smn/smn-ca:X.Y.Z \
cacli status
-------------------- Output Example --------------------
CA Status: Uninitialized
Seal Type: Shamir
Total Shares: 0
Threshold: 0
Version: 1.1.0
Root Key Hash: -
MRENCLAVE: a9408284******23f5643
MRENCLAVE_SIG: business******de1004、OP 准备必要的信息分别发送给三位 Admin,信息包括:
- 如何连接和使用 CACLI1、CACLI2、CACLI3 服务器,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 setup --key-shares=3 --key-threshold=2
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 setup --nonce=replace-me --backup
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 setup --nonce=replace-me --verify- 整理一份适合内部使用的操作文档,供 Admin 参考使用
Admin 合作完成 CA setup
1、Admin1 登录 CACLI1 执行以下命令,启动 CA 初始化任务,命令执行完成后,Admin1 妥善备份输出的授权密钥分片Unseal Key 并把CA Setup Operation Nonce: f5399a0b-5376-441e-8e4f-367c05a16567发送给 Admin2 和 Admin3,并通知 Admin2 和 Admin3 可以进行备份 Unseal Keys 操作。
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 setup --key-shares=3 --key-threshold=2
-------------------- Output Example --------------------
Seal Type: Shamir
CA Setup Operation Nonce: f5399a0b-5376-441e-8e4f-367c05a16567
Total Shares: 3
Threshold: 2
-> Backup Progress: 1/3
Backup Finished: false
Verify Progress: 0/3
Verify Success: unfinished
Unseal Key: uk1.EJ6Dso5LBZBqi5My2IDRw3T6mCU7TG6mMgbQ2ietd0Q=
...2、Admin2 登录 CACLI2 执行以下命令,备份输出的授权密钥分片Unseal Key。命令参数--nonce 的值为 Admin1 提供的 CA Setup 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.docker.com/smn/smn-ca:1.1.0 \
cacli admin setup --nonce=f5399a0b-5376-441e-8e4f-367c05a16567 --backup
-------------------- Output Example --------------------
Seal Type: Shamir
CA Setup Operation Nonce: f5399a0b-5376-441e-8e4f-367c05a16567
Total Shares: 3
Threshold: 2
-> Backup Progress: 2/3
Backup Finished: false
Verify Progress: 0/3
Verify Success: unfinished
Unseal Key: uk2.Eskn6fPlRH0r4ONQs2Lq0J9adl8aHtO/ykoXluNfS30=
...3、Admin3 登录 CACLI3 执行以下命令,备份输出的授权密钥分片Unseal Key。命令参数--nonce 的值为 Admin1 提供的 CA Setup 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.docker.com/smn/smn-ca:1.1.0 \
cacli admin setup --nonce=f5399a0b-5376-441e-8e4f-367c05a16567 --backup
-------------------- Output Example --------------------
Seal Type: Shamir
CA Setup Operation Nonce: f5399a0b-5376-441e-8e4f-367c05a16567
Total Shares: 3
Threshold: 2
-> Backup Progress: 3/3
Backup Finished: true
Verify Progress: 0/3
Verify Success: unfinished
Unseal Key: uk3.FPPMIVl/g2ntNjNujkUD3cm6VJj48TjZYo1eU58RH7Y=
...
当Backup Finished为true时,表明三位管理员各自备份了一片密钥分片,即 Unseal Key,但 CA 初始化尚未完成。为了确保备份的正确性,管理员需要对密钥分片进行验证,验证完成后,CA 达到可用状态。下面说明如何验证备份的密钥分片。
4、Admin1 登录 CACLI1 执行以下命令,命令参数--nonce 的值为CA Setup Operation Nonce,根据提示输入备份的授权密钥分片回车进行验证,并通知 Admin2 和 Admin3 可以进行验证 Unseal Keys 操作。
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 setup --nonce=f5399a0b-5376-441e-8e4f-367c05a16567 --verify
-------------------- Input Tips ------------------------
Please input your unseal key(Input will be hidden, and type Enter to confirm input. The nonce of the current operation is 'f5399a0b-5376-441e-8e4f-367c05a16567'): <Unseal Key>
-------------------- Output Example --------------------
Seal Type: Shamir
CA Setup Operation Nonce: f5399a0b-5376-441e-8e4f-367c05a16567
Total Shares: 3
Threshold: 2
Backup Progress: 3/3
Backup Finished: true
-> Verify Progress: 1/3
Verify Success: unfinished
...5、Admin2 登录 CACLI2 执行以下命令,并根据提示输入授权密钥分片Unseal Key进行验证。命令参数--nonce 的值为 Admin1 提供的 CA Setup 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.docker.com/smn/smn-ca:1.1.0 \
cacli admin setup --nonce=f5399a0b-5376-441e-8e4f-367c05a16567 --verify
-------------------- Input Tips ------------------------
Please input your unseal key(Input will be hidden, and type Enter to confirm input. The nonce of the current operation is 'f5399a0b-5376-441e-8e4f-367c05a16567'): <Unseal Key>
-------------------- Output Example --------------------
Seal Type: Shamir
CA Setup Operation Nonce: f5399a0b-5376-441e-8e4f-367c05a16567
Total Shares: 3
Threshold: 2
Backup Progress: 3/3
Backup Finished: true
-> Verify Progress: 2/3
Verify Success: unfinished
...6、Admin3 登录 CACLI3 执行以下命令,并根据提示输入授权密钥分片Unseal Key进行验证。命令参数--nonce 的值为 Admin1 提供的 CA Setup 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.docker.com/smn/smn-ca:1.1.0 \
cacli admin setup --nonce=f5399a0b-5376-441e-8e4f-367c05a16567 --verify
-------------------- Input Tips ------------------------
Please input your unseal key(Input will be hidden, and type Enter to confirm input. The nonce of the current operation is 'f5399a0b-5376-441e-8e4f-367c05a16567'): <Unseal Key>
-------------------- Output Example --------------------
Seal Type: Shamir
CA Setup Operation Nonce: f5399a0b-5376-441e-8e4f-367c05a16567
Total Shares: 3
Threshold: 2
Backup Progress: 3/3
Backup Finished: true
-> Verify Progress: 3/3
Verify Success: true
...当Verify Success为true时,表明三位管理员均已完成 setup 操作并妥善备份 Unseal Key,且已经验证了备份的 Unseal Key 正确无误,至此,代表初始化授权已经完成,即 CA 可向其他 TEE 应用提供自动授权服务。通知 OP 进入下个步骤。
OP 启动集群中其他 CA 节点
1、检查 CA Server1 中的 CA 状态,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 并检查状态,OP 在 CACLI-OP 终端执行以下命令,其中 CA_ADDR 环境变量中的 IP 设置为 CA Server2 的主机 IP,确认 CA Server2 初始化完成,即命令输出的CA Status为 Authorized。
$ 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.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******de100至此 CA 集群初始化完成。
OP 进行资源清理收尾工作
CACLI1、 CACLI2、CACLI3、CACLI-OP 主机中不保存任何数据,在以上所有操作执行完成后,即可释放主机资源。后续在需要时按需提供主机部署 CACLI 即可。