前提条件¶

以下关于身份、会员服务提供商(MSP)和证书颁发机构(CA)的Fabric文档资源为理解证书管理提供了上下文:

  • 身份(Identity)
  • MSP
  • 注册和登记(Registration and Enrollment)
  • 注册身份
  • 登记身份

关键概念¶

注册(Register)

用户名和密码对,存储在证书颁发机构(CA)中。此注册由CA管理员用户创建,没有过期,并且包含任何必需的角色和属性。

登记(Enroll)

由组织的证书颁发机构(CA)颁发的公钥/私钥对和X.509证书。证书对角色、属性和元数据进行编码,由此证书表示Fabric网络中的身份。这里的登记通过用户名和密码与CA注册相关联。

身份(Identidy)

用于加密的公共证书及其私钥。公共证书是由CA颁发的X.509证书,而私钥则存储在带外的安全存储中。

TLS

授权客户端和节点通信的公共传输层安全性(TLS)证书。在Fabric网络上,X.509证书和TLS证书的注册和登记是相同的。

证书类型¶

Hyperledger Fabric实现了两种类型的证书:

1)用于标识身份的登记证书和

2)用于节点和客户端通信的TLS证书

登记(enroll)证书¶

登记证书分为四种类型:

  • Admin
  • Peer
  • Orderer
  • Client

每种登记证书类型都有一个特定的角色:

  • Admin:用于验证管理员身份的X.509证书,更改Fabric配置时需要这些证书。
  • Peer:用于注册peer节点的X.509证书,物理上位于节点上或映射到节点。要启动Fabric peer节点,它必须具有具有所需属性的有效注册证书。
  • Orderer:X.509证书,用于注册位于节点上或映射到节点的Orderer节点。要启动Fabric排序节点,它必须具有具有所需属性的有效注册证书。
  • Client:允许已签名请求从客户端传递到Fabric节点的X.509证书。客户端证书定义向Fabric网络提交交易的客户端应用程序的标识。

TLS证书¶

TLS证书允许Fabric节点和客户端对通信进行签名和加密。任何通道通信都需要有效的TLS证书。

证书过期问题¶

注册和TLS证书由颁发证书颁发机构(CA)指定一个到期日期。必须监控到期日期,并且证书必须在到期前重新注册。最重要的证书参数是Not After元素,它指示其到期日期。

证书和位置¶

组织CA为身份提供X.509注册证书,TLS CA为保护节点和客户端通信提供TLS证书。

组织CA证书¶

组织CA根证书和组织CA管理证书提供与组织的证书颁发机构交互的授权,如下所述。

组织CA根证书¶

  • Description:允许验证组织CA颁发的所有证书的公共证书。如果创建新的证书颁发机构(CA),则组织CA根证书是自签名证书,或者由外部CA提供。
  • Location:存储在组织CA目录(CA-cert.pem)的磁盘上,并复制到通道配置中,以验证组织的标识。
  • Impact if expired:必须颁发新的组织CA根证书。组织CA根证书的有效期为15年。

组织CA管理员证书¶

  • Description:向组织CA发出管理请求时使用的证书。
  • Location:取决于实施情况:

**Note**: Each identity has a local **msp** directory structure which contains its certificate in the **signcerts** directory and its private key in the **keystore** directory. For details on the **msp** directory, refer to [MSP Structure](https://hyperledger-fabric.readthedocs.io/en/latest/membership/membership.html#msp-structure).

msp
 ├── IssuerPublicKey
 ├── IssuerRevocationPublicKey
 ├── cacerts
 │   └── localhost-7053.pem
 ├── keystore
 │   └── key.pem
 ├── signcerts
 │   └── cert.pem
 └── user
  • Impact if expired:组织管理员无法向CA注册新标识,但交易流量不会停止。

TLS CA证书¶

TLS CA根证书和TLS CA管理证书提供与TLS证书颁发机构交互的授权,如下所述。

TLS CA根证书¶

  • Description:允许验证TLS CA颁发的所有证书的公共证书。如果创建新的证书颁发机构(CA),TLS CA根证书是自签名证书,或者由外部CA提供。
  • Location:存储在TLS CA目录(CA-cert.pem)的磁盘上,并复制到通道配置中,以验证组织的TLS证书。
  • Impact if expired:必须颁发新的TLS CA根证书。TLS CA根证书的有效期为15年。

TLS CA管理员证书¶

  • Description:用于TLS CA的管理请求的证书。
  • Location:取决于实施情况:
msp
 ├── IssuerPublicKey
 ├── IssuerRevocationPublicKey
 ├── cacerts
 │   └── localhost-7053.pem
 ├── keystore
 │   └── key.pem
 ├── signcerts
 │   └── cert.pem
 └── user
  • Impact if expired:结构管理员将无法再在网络中节点的TLS CA中注册TLS证书。

Peer证书¶

为组织中的每个peer节点颁发peer登记证书和peer TLS证书。

peer登记证书¶

  • Description:在认可事务时验证Peer节点的身份。
  • Location:取决于实施情况:
org1ca
└── peer1
    ├── msp
    │    ├── admincerts
    │    │   └── cert.pem
    │    ├── cacerts
    │    │   └── localhost-7053.pem
    │    ├── keystore
    │    │   └── key.pem
    │    ├── signcerts
    │    │   └── cert.pem
    │    └── user
    |── tls
  • Impact if expired:生产中断。没有有效的注册证书,Peer节点不会启动。

Peer TLS证书¶

Description:对通道上的节点组件通信进行身份验证。

Location:取决于实施情况:

org1ca/
└── peer1
    ├── msp
    └── tls
        ├── cacerts
        ├── keystore
        │   └── key.pem
        ├── signcerts
        │   └── cert.pem
        ├── tlscacerts
        │   └── tls-localhost-7053.pem
        └── user

Impact if expired:生产中断。无法与Peer节点进行通信。

排序证书¶

为组织中的每个排序服务节点颁发排序注册证书和排序TLS证书。

排序注册证书¶

Description:排序用于对区块进行签名的公钥。

Location:取决于实施情况:

└── orderer1
     ├── msp
     │   ├── admincerts
     │   │   └── cert.pem
     │   ├── cacerts
     │   │   └── localhost-7053.pem
     │   ├── keystore
     │   │   └── key.pem
     │   ├── signcerts
     │   │   └── cert.pem
     │   |── user
     └── tls

Impact if expired:生产中断。没有有效的注册证书,排序将无法启动。

排序TLS证书¶

  • Description:用于排序节点通信的TLS证书。
  • Location:取决于实施情况:
ordererca/
└── orderer1
    ├── msp
    └── tls
        ├── cacerts
        ├── keystore
        |   └── key.pem
        ├── signcerts
        │   └── cert.pem
        ├── tlscacerts
        │   └── tls-localhost-7053.pem
        └── user
  • Impact if expired:生产中断。排序节点不再被允许参与集群。

Admin证书¶

为每个组织颁发排序服务组织通道管理员证书和Peer服务组织通道管理证书。

排序服务机构通道管理员证书¶

  • Description:组织管理员管理排序服务和通道更新的证书。
  • Location:取决于实施情况:
ordererca/
└── ordereradmin
└── msp
    ├── admincerts
    │   └── cert.pem
    ├── cacerts
    │   └── localhost-7053.pem
    ├── keystore
    │   └── key.pem
    ├── signcerts
    │   └── cert.pem
    └── user
  • Impact if expired:交易可以继续成功工作。无法从客户端应用程序修改通道,也无法从控制台管理排序。

Peer服务组织通道管理员证书¶

  • Description-组织管理员管理Peer节点的证书,包括通道和链码服务。
  • Location-取决于实施情况:
org1ca/
└── org1admin
└── msp
├── admincerts
│     └── cert.pem
├── cacerts
│     └── localhost-7053.pem
├── keystore
│     └── key.pem
├── signcerts
│     └── cert.pem
└── user

Impact if expired:交易可以继续成功工作。无法从客户端应用程序安装新的智能合约,也无法从控制台管理Peer节点。

客户端证书¶

Description:为每个组织颁发两种类型的客户证书:

(1)组织登记证书-对客户端身份进行身份验证,以便与Peer节点和排序节点进行交互。

(2)TLS证书-对客户端通信进行身份验证,并且只有在配置了双向TLS时才需要。

使用Hyperledger Fabric CA默认设置,客户端证书将在一年后过期。可以使用命令行Hyperledger Fabric CA实用程序或Fabric CA客户端SDK重新注册客户端证书。

Impact if expired:客户端证书必须在过期前重新注册,否则客户端应用程序将无法与Fabric节点交互。

证书解码¶

X.509证书是根据证书的注册通过登记创建的。X.509证书包含描述其用途和标识父CA的元数据。证书过期时间在“Not After”字段中指定。

可以使用OpenSSL实用程序对证书详细信息进行解码:

# openssl x509 -in cert.pem -text -noout

以下示例显示了已解码的证书:

Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            47:4d:5d:f6:db:92:6b:54:98:8d:9c:44:0c:ad:b6:77:c5:de:d2:ed
        Signature Algorithm: ecdsa-with-SHA256
        Issuer: C = US, ST = North Carolina, O = Hyperledger, OU = Fabric, CN = orderer1ca
        Validity
            Not Before: Feb  4 14:55:00 2022 GMT
            Not After : Feb  4 15:51:00 2023 GMT
        Subject: C = US, ST = North Carolina, O = Hyperledger, OU = orderer, CN = orderer1
        Subject Public Key Info:
            Public Key Algorithm: id-ecPublicKey
                Public-Key: (256 bit)
                pub:
                    04:29:ec:d5:53:3e:03:9d:64:a4:a4:28:a5:fe:12:
                    e2:f0:dd:e4:ee:b9:3f:3e:01:b2:3a:d4:68:b1:b2:
                    4f:82:1a:3a:33:db:92:6d:10:c9:c2:3b:3d:fc:7a:
                    f0:fa:cc:8b:44:e8:03:cb:a1:6e:eb:b3:6c:05:a2:
                    f8:fc:3c:af:24
                ASN1 OID: prime256v1
                NIST CURVE: P-256
        X509v3 extensions:
            X509v3 Key Usage: critical
                Digital Signature
            X509v3 Basic Constraints: critical
                CA:FALSE
            X509v3 Subject Key Identifier:
                63:97:F5:CA:BB:B7:4B:26:84:D9:65:40:E3:43:14:A4:7B:EE:79:FF
            X509v3 Authority Key Identifier:
                keyid:BA:2A:F8:EA:A5:7D:DF:1D:0F:CF:47:37:41:82:03:7E:04:61:D0:D8
            X509v3 Subject Alternative Name:
                DNS:server1.testorg.com
            1.2.3.4.5.6.7.8.1:
                {"attrs":{"hf.Affiliation":"","hf.EnrollmentID":"orderer1","hf.Type":"orderer"}}
    Signature Algorithm: ecdsa-with-SHA256
         30:45:02:21:00:e1:93:f6:3c:08:f2:b9:fb:06:c9:02:d0:cf:
         e1:a6:23:a3:05:78:10:d9:41:2c:1e:2c:91:80:fd:52:ad:62:
         9c:02:20:51:33:42:5e:a0:8a:2a:ec:f5:83:46:f0:99:6a:7e:
         eb:a8:97:1f:30:99:9d:ae:8d:ef:36:07:da:bb:67:ed:80

证书续订¶

所有节点和客户端的注册和TLS证书应在到期前续订,以避免服务中断。使用结构CA注册或重新注册功能从颁发结构证书颁发机构(CA)获取更新的证书。重新登记功能允许重用现有私钥,这对于排序节点TLS证书尤其重要。

过期证书的续期¶

证书过期后仍然可以使用reenroll功能续订,但Fabric CA的版本必须为v1.5.5或更高版本,并且必须配置为允许它。在重新注册之前,通过将reenrollignorecertexpiry参数添加到Fabric-CA-server-config.yaml,在Fabric CA服务器上启用reenrollignerecertexpirry选项,如下所示:

ca:
  certfile: /crypto/tlsca/cert.pem
  chainfile: /crypto/tlsca/chain.pem
  keyfile: /crypto/tlsca/key.pem
  name: tlsca
  reenrollignorecertexpiry: true

或者,还可以使用环境变量或Fabric CA服务器启动标志设置reenrollignorecertexpiry:

  • 在CA启动时将FABRIC_CA_SERVER_CA_REENROLLIGNORECERTEXPIRY环境变量设置为true
  • 使用标志–ca.reenrollignorecertexpiry=true启动CA

最后,重新启动Fabric CA服务器。

续订Peer节点证书¶

对于Peer节点注册证书和TLS证书,您可以使用Fabric CA客户端的注册或重新注册功能。如果您想通过传递csr.keyrequest.reusekey选项并指示现有私钥的mspdir位置(私钥位于/keystore目录中)来重用私钥,请使用重新滚动:

fabric-ca-client enroll --<OTHER-OPTIONS>

fabric-ca-client reenroll --csr.keyrequest.reusekey --mspdir <LOCATION-OF-IDENTITY'S-MSP-DIRECTORY-THAT-CONTAINS-THE-EXISTING-PRIVATE-KEY> --<OTHER-OPTIONS>

替换Peer节点的登记证书或TLS证书。

Peer节点的注册证书配置在Peer节点的<peer.mspConfigPath>/signcerts目录中(如果私钥未被重用,则新私钥也应在<peer.mspConfigPath>/keystore目录中更新)。

Peer节点的TLS证书配置为位于Peer节点的<peer.TLS.cert.file>目录/文件中(如果未重用私钥,则还应在<peer.TLS.key.file>中更新新私钥)。

最后,重新启动Peer节点。

续订排序节点证书¶

对于排序节点注册证书,您还可以使用注册或重新注册功能,使用上面针对Peer节点描述的步骤。

排序节点TLS证书必须重新启用,并具有重新使用私钥的选项。这是由于在应用程序通道中配置了排序节点TLS证书(使用配置的TLS证书中的公钥验证排序节点到排序节点的通信)。从v1.4.9和v2.2.1开始,排序节点验证匹配的密钥,而不是整个配置的TLS证书,从而无需更新通道配置即可续订排序节点TLS证书。

通过传递csr.keyrequest.reusekey选项并指示现有私钥的mspdir位置(私钥位于<mspdir>/keystore目录中),使用重新滚动并重用TLS证书的私钥:

fabric-ca-client reenroll --csr.keyrequest.reusekey --mspdir <LOCATION-OF-IDENTITY'S-MSP-DIRECTORY-THAT-CONTAINS-THE-EXISTING-PRIVATE-KEY> --<OTHER-OPTIONS>`


替换排序节点的注册证书或TLS证书。

排序节点的注册证书配置在排序节点的<General.LocalMSPDir>/signcerts目录中(如果未重用私钥,则还应在<General.LegalMSPDir>/keystore目录中更新新私钥)。

排序节点的TLS证书配置为位于排序节点的<General.TLS.Certifice>目录/文件中(由于私钥已被重用,因此不要更新私钥)。

重新启动排序节点节点。

续订排序节点TLS证书而不重复使用私钥¶

虽然建议在排序节点TLS证书续订时重复使用私钥,但这可能并非在所有情况下都可行。由于必须为新的排序节点TLS证书更新每个排序服务通道,因此需要额外的步骤和计划。

假设您在重新注册期间没有重用排序节点TLS私钥,并且原始排序节点TLS证书尚未过期。在这种情况下,您必须在每个节点和每个通道配置中一次更新一个排序节点TLS证书,然后在转到其他排序节点TLS证书更新之前验证排序节点功能。

如果您不重用排序节点TLS私钥,并且原始排序节点TLS证书已过期,排序服务将无法形成共识,因此将无法处理包括通道配置更新在内的交易。排序服务恢复过程很复杂,因为您必须在所有节点上临时使用排序节点TLSHandshakeTimeShift属性并重新启动它们,以便与过期的证书形成共识,以便处理通道配置更新以更新TLS证书。在每个节点和通道配置中一次更新大多数排序节点TLS证书(例如,5个中有3个)。一旦更新了大多数证书,新证书的到期日期将不再属于TLSH和握手时间偏移范围,因此更新的排序节点将脱离一致性集合,导致再次失去一致性。接下来,从所有节点中删除TLSHandshakeTimeShift设置。重新启动后,大多数更新的排序节点现在将形成共识,然后您可以在每个节点和通道配置中一次更新剩余的排序节点TLS证书(例如,5个中有2个)。


引用