你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

激活 Azure 托管 CCF 资源中的成员

本指南介绍如何在 Azure 托管 CCF (托管 CCF) 资源中激活成员。 本教程基于快速入门中创建的托管 CCF 资源:使用 Azure 门户 教程创建 Azure 托管 CCF 资源。

先决条件

下载服务标识

Azure 托管 CCF 资源具有称为服务标识的唯一标识。 它由证书表示,并在资源创建期间创建。 属于 Azure 托管 CCF 资源的每个单独节点都有其自签名证书,由服务标识认可,该证书可对其建立信任。

建议客户下载服务标识证书,并在与服务交互时使用它建立 TLS 连接。 以下命令下载证书并将其保存到 service_cert.pem 中。

curl https://identity.confidential-ledger.core.azure.com/ledgerIdentity/confidentialbillingapp --silent | jq ' .ledgerTlsCertificate' | xargs echo -e > service_cert.pem

激活成员(s)

将成员添加到托管 CCF 资源时,它们处于接受状态。 在激活治理之前,他们不能参与治理。 为此,成员必须承认他们对服务状态感到满意(例如,在审核当前宪法和当前信任的节点后)。

  1. 成员必须更新并检索最新状态摘要。 为此,新成员确认他们对服务的当前状态感到满意。
curl https://confidentialbillingapp.confidential-ledger.azure.com/gov/ack/update_state_digest -X POST --cacert service_cert.pem --key member0_privk.pem --cert member0_cert.pem --silent | jq > request.json
cat request.json
{
    "state_digest": <...>
}

注意

在 Mac 上执行命令时,请替换为 date -Isdate +%FT%T%z

  1. 该成员必须使用 ccf_cose_sign1 实用工具对状态摘要进行签名。 此实用工具随 CCF Python 包一起安装。
ccf_cose_sign1 --ccf-gov-msg-type ack --ccf-gov-msg-created_at `date -Is` --signing-key member0_privk.pem --signing-cert member0_cert.pem --content request.json | \
 curl https://confidentialbillingapp.confidential-ledger.azure.com/gov/ack --cacert service_cert.pem --data-binary @- -H "content-type: application/cose"
  1. 命令完成后,该成员处于活动状态,可以参与治理。 可以使用以下命令查看成员。
curl --cacert service_cert.pem https://confidentialbillingapp.confidential-ledger.azure.com/gov/members | jq
{
  "710c4d7ce6a70a89137b39170cd5c48f94b4756a66e66b2242370111c1c47564": {
    "cert": "-----BEGIN CERTIFICATE-----\nMIIB9zCCAX2gAwIBAgIQW20I1iR...l8Uv8rRce\n-----END CERTIFICATE-----",
    "member_data": {
      "is_operator": true,
      "owner": "Microsoft Azure"
    },
    "public_encryption_key": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMI...n3QIDAQAB\n-----END PUBLIC KEY-----\n",
    "status": "Active"
  },
  "f9ea379051e5292b538ff2a3dc97f1bb4d5046f12e2bdbf5b8e3acc4516f34e3": {
    "cert": "-----BEGIN CERTIFICATE-----\nMIIBuzCCAUKgAwIBAgIURuSESLma...yyK1EHhxx\n-----END CERTIFICATE-----",
    "member_data": {
      "group": "",
      "identifier": "member0"
    },
    "public_encryption_key": null,
    "status": "Active"
  }
}

后续步骤