首页 > 编程语言 >Hyperledger Fabric 2.5.4开发之证书管理指南

Hyperledger Fabric 2.5.4开发之证书管理指南

时间:2023-09-24 21:00:50浏览次数:45  
标签:TLS Fabric 证书 CA pem Hyperledger 排序 节点 2.5

前提条件¶

以下关于身份、会员服务提供商(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个)。


引用


标签:TLS,Fabric,证书,CA,pem,Hyperledger,排序,节点,2.5
From: https://blog.51cto.com/zhuxianzhong/7588636

相关文章

  • Hyperledger Fabric 2.5.4开发之身份(Identity)
    什么是身份?¶区块链网络中的不同参与者包括Peer节点、排序节点、客户端应用程序、管理员等。这些参与者中的每一个——能够消费服务的网络内外的活动元素——都有一个封装在X.509数字证书中的数字身份。这些身份确实很重要,因为它们决定了参与者在区块链网络中对资源和信息的确切权......
  • UI设计中,2D、2.5D、3D、4D该如何辨别
    在UI设计中,2D、2.5D、3D和4D是不同的图形维度的概念。它们指的是在设计中使用的不同维度的图形元素和效果。2D(2维):2D设计通常是指在平面上进行的设计,即使用宽度和高度两个方向来表示元素的位置和形状。这是最基本的设计维度,在UI设计中常用于绘制图标、按钮、文本等平面式的界面元......
  • 漏洞修复系列-如何升级linux系统Upgrade to PostgreSQL JDBC Driver version 42.2.27,
    问题遇到一个PostgreSQLJDBCDriver漏洞PostgreSQLJDBCDriverthatis42.2.xpriorto42.2.27,42.3.xpriorto42.3.8,42.4.xpriorto42.4.3or42.5.xpriorto42.5.1.Itis,therefore,affectedbyaninformationdisclosurevulnerability.原因PostgreSQLJD......
  • Hyperledger Fabric 2.5.4开发之“定义功能需求”问题
    说明本文描述了一个不再使用“系统通道”的网络(以前该通道由排序服务引导,并且由排序服务专门控制)。自Fabricv2.3发布以来,在创建通道的过程方法中,使用系统通道现在被视为遗留方案。在通道配置(在通道的最新配置区块中找到)中,可以为每个通道定义功能需求。通道配置包含三个位置,每个位......
  • Fluent Operator 2.5.0 发布:新增多个插件
    日前,FluentOperator发布了v2.5.0。FluentOperatorv2.5.0新增11个features,其中FluentBit新增支持7个插件,Fluentd新增支持1个插件。此外,对FluentOperator也进行了增强,调整了默认参数,以便适应更多场景,并对helmchart进行了优化,用户可以更方便的进行安装,并修......
  • Hyperledger Fabric开发之启动CouchDB作为状态数据库
    测试环境MacCatalinaDockerDesktop3.6.0HyperledgerFabric2.5.4CouchDB3.3.2简单分析当前版本的Fabric2.5.4默认支持的LevelDB仅能够实现存储简单的键值对数据,并且LevelDB与Peer节点并存于同一个操作系统进程中。CouchDB适用于存储JSON文件,并支持富查询和对更多数据类型的操......
  • KubeSphere 社区双周报 | Fluent Operator 发布 v2.5.0 | 2023.09.01-09.14
    KubeSphere社区双周报主要整理展示新增的贡献者名单和证书、新增的讲师证书以及两周内提交过commit的贡献者,并对近期重要的PR进行解析,同时还包含了线上/线下活动和布道推广等一系列社区动态。本次双周报涵盖时间为:2023.09.01-2023.09.14。贡献者名单新晋KubeSphereCon......
  • 【2.5v/5v手电筒升压方案】AP8105只需四个外围件低噪音
    AP8105系列产品是一种高效率、低纹波、工作频率高的PFM升压DC-DC变换器。AP8105系列产品仅需要四个外围元器件,就可完成将低输入的电池电压变换升压到所需的工作电压,非常适合于便携式1~4节普通电池应用的场合。电路采用了高性能、低功耗的参考电压电路结构,同时在生产中引入......
  • 【2.5v/5v手电筒升压方案】AP8105只需四个外围件低噪音
    AP8105系列产品是一种高效率、低纹波、工作频率高的PFM升压DC-DC变换器。AP8105系列产品仅需要四个外围元器件,就可完成将低输入的电池电压变换升压到所需的工作电压,非常适合于便携式1~4节普通电池应用的场合。电路采用了高性能、低功耗的参考电压电路结构,同时在生产中引入......
  • Fabric 2.x 智能合约开发记录
    表象:Returnschemainvalid.requireditemsmustbeunique[recovered]虽然Fabricv2.2已经发布了很久了,但之前因为项目历史问题,一直使用的都是Fabricv1.4.8,所以智能合约也一直使用的都是github.com/hyperledger/fabric/core/chaincode/shim包。在合约开发过程中,我一般......