Hyperledger fabric 创建频道时出现“此策略要求满足“写入者”子策略之一:权限被拒绝”错误

Hyperledger fabric 创建频道时出现“此策略要求满足“写入者”子策略之一:权限被拒绝”错误,hyperledger-fabric,hyperledger,hyperledger-fabric-ca,Hyperledger Fabric,Hyperledger,Hyperledger Fabric Ca,当我尝试创建一个频道时,我得到了如下错误: fabric-ca-client register -d --id.name $ADMIN_ID --id.secret $ADMIN_PW --id.type admin -u https://$CA_ADMIN_ID:$CA_ADMIN_PW@$CA_NODE:7054 fabric-ca-client enroll -d --csr.names $CSR -u https://$ADMIN_ID:$ADMIN_PW@$CA_NODE:7054

当我尝试创建一个频道时,我得到了如下错误:

fabric-ca-client register -d --id.name $ADMIN_ID --id.secret $ADMIN_PW --id.type admin -u https://$CA_ADMIN_ID:$CA_ADMIN_PW@$CA_NODE:7054
fabric-ca-client enroll -d --csr.names $CSR -u https://$ADMIN_ID:$ADMIN_PW@$CA_NODE:7054
隐式策略评估失败-满足0个子策略,但此策略要求满足“编写者”子策略中的1个子策略:权限被拒绝

正如错误消息所说,似乎我使用了错误的身份对事务进行签名以创建通道。但是,我找不到有关频道配置或身份注册和注册的任何错误

我的组织渠道配置为:

Organizations:
  - &BPLOrg
    Name: BPLMSP
    ID: BPLMSP
    MSPDir: artifacts/crypto/org-msp

    Policies:
      Readers:
        Type: Signature
        Rule: "OR('BPLMSP.admin', 'BPLMSP.peer', 'BPLMSP.client')"
      Writers:
        Type: Signature
        Rule: "OR('BPLMSP.admin', 'BPLMSP.client')"
      Admins:
        Type: Signature
        Rule: "OR('BPLMSP.admin')"
因此,根据配置,管理员类型标识可以对事务进行签名以创建通道

我的管理员类型标识已注册,如下所示:

fabric-ca-client register -d --id.name $ADMIN_ID --id.secret $ADMIN_PW --id.type admin -u https://$CA_ADMIN_ID:$CA_ADMIN_PW@$CA_NODE:7054
fabric-ca-client enroll -d --csr.names $CSR -u https://$ADMIN_ID:$ADMIN_PW@$CA_NODE:7054
注册和注册使用参数-id.type admin处理得很好,为了签署事务以创建频道,我使用了从该注册中获得的密钥

我从哪里开始投资这个错误?任何一种想法都会很有帮助。谢谢

-

Fabric 1.4.4版本 我使用的是节点SDK,而不是CLI。 -

[编辑] 我添加了我的订购者日志

2019-12-28 05:56:55.689 UTC [localconfig] completeInitialization -> INFO 001 Kafka.Version unset, setting to 0.10.2.0
2019-12-28 05:56:55.718 UTC [orderer.common.server] prettyPrintStruct -> INFO 002 Orderer config values:
    General.LedgerType = "file"
    General.ListenAddress = "0.0.0.0"
    General.ListenPort = 7050
    General.TLS.Enabled = true
    General.TLS.PrivateKey = "/artifacts/tls/keystore/key.pem"
    General.TLS.Certificate = "/artifacts/tls/signcerts/cert.pem"
    General.TLS.RootCAs = [/artifacts/tls/tlscacerts/ca-cert.pem]
    General.TLS.ClientAuthRequired = false
    General.TLS.ClientRootCAs = []
    General.Cluster.ListenAddress = ""
    General.Cluster.ListenPort = 0
    General.Cluster.ServerCertificate = ""
    General.Cluster.ServerPrivateKey = ""
    General.Cluster.ClientCertificate = "/artifacts/tls/signcerts/cert.pem"
    General.Cluster.ClientPrivateKey = "/artifacts/tls/keystore/key.pem"
    General.Cluster.RootCAs = [/artifacts/tls/tlscacerts/ca-cert.pem]
    General.Cluster.DialTimeout = 5s
    General.Cluster.RPCTimeout = 7s
    General.Cluster.ReplicationBufferSize = 20971520
    General.Cluster.ReplicationPullTimeout = 5s
    General.Cluster.ReplicationRetryTimeout = 5s
    General.Cluster.ReplicationBackgroundRefreshInterval = 5m0s
    General.Cluster.ReplicationMaxRetries = 12
    General.Cluster.SendBufferSize = 10
    General.Cluster.CertExpirationWarningThreshold = 168h0m0s
    General.Cluster.TLSHandshakeTimeShift = 0s
    General.Keepalive.ServerMinInterval = 1m0s
    General.Keepalive.ServerInterval = 2h0m0s
    General.Keepalive.ServerTimeout = 20s
    General.ConnectionTimeout = 0s
    General.GenesisMethod = "file"
    General.GenesisProfile = "SampleInsecureSolo"
    General.SystemChannel = "test-system-channel-name"
    General.GenesisFile = "/artifacts/genesis.block"
    General.Profile.Enabled = false
    General.Profile.Address = "0.0.0.0:6060"
    General.LocalMSPDir = "/artifacts/msp"
    General.LocalMSPID = "BPLMSP"
    General.BCCSP.ProviderName = "SW"
    General.BCCSP.SwOpts.SecLevel = 256
    General.BCCSP.SwOpts.HashFamily = "SHA2"
    General.BCCSP.SwOpts.Ephemeral = false
    General.BCCSP.SwOpts.FileKeystore.KeyStorePath = "/artifacts/msp/keystore"
    General.BCCSP.SwOpts.DummyKeystore =
    General.BCCSP.SwOpts.InmemKeystore =
    General.BCCSP.PluginOpts =
    General.Authentication.TimeWindow = 15m0s
    General.Authentication.NoExpirationChecks = false
    FileLedger.Location = "/var/hyperledger/production/orderer"
    FileLedger.Prefix = "hyperledger-fabric-ordererledger"
    RAMLedger.HistorySize = 1000
    Kafka.Retry.ShortInterval = 5s
    Kafka.Retry.ShortTotal = 10m0s
    Kafka.Retry.LongInterval = 5m0s
    Kafka.Retry.LongTotal = 12h0m0s
    Kafka.Retry.NetworkTimeouts.DialTimeout = 10s
    Kafka.Retry.NetworkTimeouts.ReadTimeout = 10s
    Kafka.Retry.NetworkTimeouts.WriteTimeout = 10s
    Kafka.Retry.Metadata.RetryMax = 3
    Kafka.Retry.Metadata.RetryBackoff = 250ms
    Kafka.Retry.Producer.RetryMax = 3
    Kafka.Retry.Producer.RetryBackoff = 100ms
    Kafka.Retry.Consumer.RetryBackoff = 2s
    Kafka.Verbose = true
    Kafka.Version = 0.10.2.0
    Kafka.TLS.Enabled = false
    Kafka.TLS.PrivateKey = ""
    Kafka.TLS.Certificate = ""
    Kafka.TLS.RootCAs = []
    Kafka.TLS.ClientAuthRequired = false
    Kafka.TLS.ClientRootCAs = []
    Kafka.SASLPlain.Enabled = false
    Kafka.SASLPlain.User = ""
    Kafka.SASLPlain.Password = ""
    Kafka.Topic.ReplicationFactor = 1
    Debug.BroadcastTraceDir = ""
    Debug.DeliverTraceDir = ""
    Consensus = map[SnapDir:/var/hyperledger/production/orderer/etcdraft/snapshot WALDir:/var/hyperledger/production/orderer/etcdraft/wal]
    Operations.ListenAddress = "orderer0.bpl:8443"
    Operations.TLS.Enabled = false
    Operations.TLS.PrivateKey = ""
    Operations.TLS.Certificate = ""
    Operations.TLS.RootCAs = []
    Operations.TLS.ClientAuthRequired = false
    Operations.TLS.ClientRootCAs = []
    Metrics.Provider = "disabled"
    Metrics.Statsd.Network = "udp"
    Metrics.Statsd.Address = "127.0.0.1:8125"
    Metrics.Statsd.WriteInterval = 30s
    Metrics.Statsd.Prefix = ""
2019-12-28 05:56:55.790 UTC [orderer.common.server] extractSysChanLastConfig -> INFO 003 Bootstrapping because no existing channels
2019-12-28 05:56:55.813 UTC [orderer.common.server] initializeServerConfig -> INFO 004 Starting orderer with TLS enabled
2019-12-28 05:56:55.813 UTC [orderer.common.server] configureClusterListener -> INFO 005 Cluster listener is not configured, defaulting to use the general listener on port 7050
2019-12-28 05:56:55.820 UTC [fsblkstorage] newBlockfileMgr -> INFO 006 Getting block information from block storage
2019-12-28 05:56:55.836 UTC [orderer.consensus.etcdraft] HandleChain -> INFO 007 EvictionSuspicion not set, defaulting to 10m0s
2019-12-28 05:56:55.842 UTC [orderer.consensus.etcdraft] createOrReadWAL -> INFO 008 No WAL data found, creating new WAL at path '/var/hyperledger/production/orderer/etcdraft/wal/trust-chain-system-channel' channel=trust-chain-system-channel node=1
2019-12-28 05:56:55.866 UTC [orderer.commmon.multichannel] Initialize -> INFO 009 Starting system channel 'trust-chain-system-channel' with genesis block hash 43e31dcb085730c17b70777c05983ade72df5b137da3ffeaa4e1f5c187b9c3d9 and orderer type etcdraft
2019-12-28 05:56:55.866 UTC [orderer.consensus.etcdraft] Start -> INFO 00a Starting Raft node channel=trust-chain-system-channel node=1
2019-12-28 05:56:55.866 UTC [orderer.common.cluster] Configure -> INFO 00b Entering, channel: trust-chain-system-channel, nodes: [ID: 2,
Endpoint: orderer1.bpl:7050,
ServerTLSCert:-----BEGIN CERTIFICATE-----
MIIC2zCCAoKgAwIBAgIUOerWLLNwC5CYnqRuSFx3jDehZFEwCgYIKoZIzj0EAwIw
VjELMAkGA1UEBhMCS1IxEDAOBgNVBAgTB0RhZWplb24xFzAVBgNVBAoTDmJpZ3Bp
Y3R1cmVsYWJzMQswCQYDVQQLEwJjYTEPMA0GA1UEAxMGY2EtYnBsMB4XDTE5MTIy
ODA1MzgwMFoXDTIwMTIyNzA1NDMwMFowfDELMAkGA1UEBhMCS1IxEDAOBgNVBAgT
B0RhZWplb24xFzAVBgNVBAoTDmJpZ3BpY3R1cmVsYWJzMSswDgYDVQQLEwdvcmRl
cmVyMAoGA1UECxMDYnBsMA0GA1UECxMGZmFicmljMRUwEwYDVQQDEwxvcmRlcmVy
MS5icGwwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAASkTScK+zOyx1DuzACYmUKD
ttq/NUORM1+aPm8Bp43hFrKhqeS5aZ9eA9+HWBO7B95W3YqPxkw68HAKYcpPIsIs
o4IBBjCCAQIwDgYDVR0PAQH/BAQDAgOoMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggr
BgEFBQcDAjAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBSHs7V8NpqyYzHpjAQr1euf
p9LJ6TAfBgNVHSMEGDAWgBQUQCH0Jo1n+EwtZOMd6qwL4gDAZjAXBgNVHREEEDAO
ggxvcmRlcmVyMS5icGwwagYIKgMEBQYHCAEEXnsiYXR0cnMiOnsiaGYuQWZmaWxp
YXRpb24iOiJicGwuZmFicmljIiwiaGYuRW5yb2xsbWVudElEIjoib3JkZXJlcjEu
YnBsIiwiaGYuVHlwZSI6Im9yZGVyZXIifX0wCgYIKoZIzj0EAwIDRwAwRAIgJzms
QawGjZDPH6kIIYrmB58eKZvCEB+csUD0BB/PfNUCIBuKfw8XhYS8WBih/ddU8NyV
9OuM5QWsOp2/nr5i76lh
-----END CERTIFICATE-----
, ClientTLSCert:-----BEGIN CERTIFICATE-----
MIIC2zCCAoKgAwIBAgIUOerWLLNwC5CYnqRuSFx3jDehZFEwCgYIKoZIzj0EAwIw
VjELMAkGA1UEBhMCS1IxEDAOBgNVBAgTB0RhZWplb24xFzAVBgNVBAoTDmJpZ3Bp
Y3R1cmVsYWJzMQswCQYDVQQLEwJjYTEPMA0GA1UEAxMGY2EtYnBsMB4XDTE5MTIy
ODA1MzgwMFoXDTIwMTIyNzA1NDMwMFowfDELMAkGA1UEBhMCS1IxEDAOBgNVBAgT
B0RhZWplb24xFzAVBgNVBAoTDmJpZ3BpY3R1cmVsYWJzMSswDgYDVQQLEwdvcmRl
cmVyMAoGA1UECxMDYnBsMA0GA1UECxMGZmFicmljMRUwEwYDVQQDEwxvcmRlcmVy
MS5icGwwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAASkTScK+zOyx1DuzACYmUKD
ttq/NUORM1+aPm8Bp43hFrKhqeS5aZ9eA9+HWBO7B95W3YqPxkw68HAKYcpPIsIs
o4IBBjCCAQIwDgYDVR0PAQH/BAQDAgOoMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggr
BgEFBQcDAjAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBSHs7V8NpqyYzHpjAQr1euf
p9LJ6TAfBgNVHSMEGDAWgBQUQCH0Jo1n+EwtZOMd6qwL4gDAZjAXBgNVHREEEDAO
ggxvcmRlcmVyMS5icGwwagYIKgMEBQYHCAEEXnsiYXR0cnMiOnsiaGYuQWZmaWxp
YXRpb24iOiJicGwuZmFicmljIiwiaGYuRW5yb2xsbWVudElEIjoib3JkZXJlcjEu
YnBsIiwiaGYuVHlwZSI6Im9yZGVyZXIifX0wCgYIKoZIzj0EAwIDRwAwRAIgJzms
QawGjZDPH6kIIYrmB58eKZvCEB+csUD0BB/PfNUCIBuKfw8XhYS8WBih/ddU8NyV
9OuM5QWsOp2/nr5i76lh
-----END CERTIFICATE-----
 ID: 3,
Endpoint: orderer2.bpl:7050,
ServerTLSCert:-----BEGIN CERTIFICATE-----
MIIC3DCCAoKgAwIBAgIUTIRaoY38ylFYlyo5UPJaHO8UyL4wCgYIKoZIzj0EAwIw
VjELMAkGA1UEBhMCS1IxEDAOBgNVBAgTB0RhZWplb24xFzAVBgNVBAoTDmJpZ3Bp
Y3R1cmVsYWJzMQswCQYDVQQLEwJjYTEPMA0GA1UEAxMGY2EtYnBsMB4XDTE5MTIy
ODA1MzgwMFoXDTIwMTIyNzA1NDMwMFowfDELMAkGA1UEBhMCS1IxEDAOBgNVBAgT
B0RhZWplb24xFzAVBgNVBAoTDmJpZ3BpY3R1cmVsYWJzMSswDgYDVQQLEwdvcmRl
cmVyMAoGA1UECxMDYnBsMA0GA1UECxMGZmFicmljMRUwEwYDVQQDEwxvcmRlcmVy
Mi5icGwwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATD3raCU1OC0dmGpiFKixuZ
cYV/ikGwxNBdVGkdOU01ROZWHUpSzlYFq0i5Mq4JGLtcJuIdjCYIZ+MkEsTNbnpL
o4IBBjCCAQIwDgYDVR0PAQH/BAQDAgOoMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggr
BgEFBQcDAjAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBRVXLrZSEK8x4DPkawYGaNM
SO3DCTAfBgNVHSMEGDAWgBQUQCH0Jo1n+EwtZOMd6qwL4gDAZjAXBgNVHREEEDAO
ggxvcmRlcmVyMi5icGwwagYIKgMEBQYHCAEEXnsiYXR0cnMiOnsiaGYuQWZmaWxp
YXRpb24iOiJicGwuZmFicmljIiwiaGYuRW5yb2xsbWVudElEIjoib3JkZXJlcjIu
YnBsIiwiaGYuVHlwZSI6Im9yZGVyZXIifX0wCgYIKoZIzj0EAwIDSAAwRQIhALqM
SUA0+Aewypl30NF/C2Y0DdFQTw9/LF2XnWZZ/rCmAiAxNf2eoimI49XyL0DrAM0k
+HahGiLAK/F4GhTBv8Ct+A==
-----END CERTIFICATE-----
, ClientTLSCert:-----BEGIN CERTIFICATE-----
MIIC3DCCAoKgAwIBAgIUTIRaoY38ylFYlyo5UPJaHO8UyL4wCgYIKoZIzj0EAwIw
VjELMAkGA1UEBhMCS1IxEDAOBgNVBAgTB0RhZWplb24xFzAVBgNVBAoTDmJpZ3Bp
Y3R1cmVsYWJzMQswCQYDVQQLEwJjYTEPMA0GA1UEAxMGY2EtYnBsMB4XDTE5MTIy
ODA1MzgwMFoXDTIwMTIyNzA1NDMwMFowfDELMAkGA1UEBhMCS1IxEDAOBgNVBAgT
B0RhZWplb24xFzAVBgNVBAoTDmJpZ3BpY3R1cmVsYWJzMSswDgYDVQQLEwdvcmRl
cmVyMAoGA1UECxMDYnBsMA0GA1UECxMGZmFicmljMRUwEwYDVQQDEwxvcmRlcmVy
Mi5icGwwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATD3raCU1OC0dmGpiFKixuZ
cYV/ikGwxNBdVGkdOU01ROZWHUpSzlYFq0i5Mq4JGLtcJuIdjCYIZ+MkEsTNbnpL
o4IBBjCCAQIwDgYDVR0PAQH/BAQDAgOoMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggr
BgEFBQcDAjAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBRVXLrZSEK8x4DPkawYGaNM
SO3DCTAfBgNVHSMEGDAWgBQUQCH0Jo1n+EwtZOMd6qwL4gDAZjAXBgNVHREEEDAO
ggxvcmRlcmVyMi5icGwwagYIKgMEBQYHCAEEXnsiYXR0cnMiOnsiaGYuQWZmaWxp
YXRpb24iOiJicGwuZmFicmljIiwiaGYuRW5yb2xsbWVudElEIjoib3JkZXJlcjIu
YnBsIiwiaGYuVHlwZSI6Im9yZGVyZXIifX0wCgYIKoZIzj0EAwIDSAAwRQIhALqM
SUA0+Aewypl30NF/C2Y0DdFQTw9/LF2XnWZZ/rCmAiAxNf2eoimI49XyL0DrAM0k
+HahGiLAK/F4GhTBv8Ct+A==
-----END CERTIFICATE-----
]
2019-12-28 05:56:55.867 UTC [orderer.common.cluster] updateStubInMapping -> INFO 00c Allocating a new stub for node 2 with endpoint of orderer1.bpl:7050 for channel trust-chain-system-channel
2019-12-28 05:56:55.867 UTC [orderer.common.cluster] updateStubInMapping -> INFO 00d Deactivating node 2 in channel trust-chain-system-channel with endpoint of orderer1.bpl:7050 due to TLS certificate change
2019-12-28 05:56:55.867 UTC [orderer.common.cluster] updateStubInMapping -> INFO 00e Allocating a new stub for node 3 with endpoint of orderer2.bpl:7050 for channel trust-chain-system-channel
2019-12-28 05:56:55.867 UTC [orderer.common.cluster] updateStubInMapping -> INFO 00f Deactivating node 3 in channel trust-chain-system-channel with endpoint of orderer2.bpl:7050 due to TLS certificate change
2019-12-28 05:56:55.868 UTC [orderer.common.cluster] applyMembershipConfig -> INFO 010 2 exists in both old and new membership for channel trust-chain-system-channel , skipping its deactivation
2019-12-28 05:56:55.868 UTC [orderer.common.cluster] applyMembershipConfig -> INFO 011 3 exists in both old and new membership for channel trust-chain-system-channel , skipping its deactivation
2019-12-28 05:56:55.868 UTC [orderer.common.cluster] Configure -> INFO 012 Exiting
2019-12-28 05:56:55.868 UTC [orderer.consensus.etcdraft] start -> INFO 013 Starting raft node as part of a new channel channel=trust-chain-system-channel node=1
2019-12-28 05:56:55.868 UTC [orderer.consensus.etcdraft] becomeFollower -> INFO 014 1 became follower at term 0 channel=trust-chain-system-channel node=1
2019-12-28 05:56:55.868 UTC [orderer.consensus.etcdraft] newRaft -> INFO 015 newRaft 1 [peers: [], term: 0, commit: 0, applied: 0, lastindex: 0, lastterm: 0] channel=trust-chain-system-channel node=1
2019-12-28 05:56:55.868 UTC [orderer.consensus.etcdraft] becomeFollower -> INFO 016 1 became follower at term 1 channel=trust-chain-system-channel node=1
2019-12-28 05:56:55.869 UTC [orderer.common.server] Start -> INFO 017 Starting orderer:
 Version: 1.4.4
 Commit SHA: 7917a40
 Go version: go1.12.12
 OS/Arch: linux/amd64
2019-12-28 05:56:55.869 UTC [orderer.common.server] Start -> INFO 018 Beginning to serve requests
2019-12-28 05:56:55.869 UTC [orderer.consensus.etcdraft] apply -> INFO 019 Applied config change to add node 1, current nodes in channel: [1 2 3] channel=trust-chain-system-channel node=1
2019-12-28 05:56:55.869 UTC [orderer.consensus.etcdraft] apply -> INFO 01a Applied config change to add node 2, current nodes in channel: [1 2 3] channel=trust-chain-system-channel node=1
2019-12-28 05:56:55.869 UTC [orderer.consensus.etcdraft] apply -> INFO 01b Applied config change to add node 3, current nodes in channel: [1 2 3] channel=trust-chain-system-channel node=1
2019-12-28 05:56:57.686 UTC [orderer.consensus.etcdraft] Step -> INFO 01c 1 [logterm: 1, index: 3, vote: 0] cast MsgPreVote for 2 [logterm: 1, index: 3] at term 1 channel=trust-chain-system-channel node=1
2019-12-28 05:56:57.688 UTC [orderer.consensus.etcdraft] Step -> INFO 01d 1 [term: 1] received a MsgVote message with higher term from 2 [term: 2] channel=trust-chain-system-channel node=1
2019-12-28 05:56:57.688 UTC [orderer.consensus.etcdraft] becomeFollower -> INFO 01e 1 became follower at term 2 channel=trust-chain-system-channel node=1
2019-12-28 05:56:57.688 UTC [orderer.consensus.etcdraft] Step -> INFO 01f 1 [logterm: 1, index: 3, vote: 0] cast MsgVote for 2 [logterm: 1, index: 3] at term 2 channel=trust-chain-system-channel node=1
2019-12-28 05:56:57.691 UTC [orderer.consensus.etcdraft] run -> INFO 020 raft.node: 1 elected leader 2 at term 2 channel=trust-chain-system-channel node=1
2019-12-28 05:56:57.692 UTC [orderer.consensus.etcdraft] serveRequest -> INFO 021 Raft leader changed: 0 -> 2 channel=trust-chain-system-channel node=1
2019-12-28 05:57:31.382 UTC [orderer.common.broadcast] ProcessMessage -> WARN 022 [channel: activitych] Rejecting broadcast of config message from 172.22.0.1:52856 because of error: implicit policy evaluation failed - 0 sub-policies were satisfied, but this policy requires 1 of the 'Writers' sub-policies to be satisfied: permission denied
2019-12-28 05:57:31.384 UTC [comm.grpc.server] 1 -> INFO 023 streaming call completed grpc.service=orderer.AtomicBroadcast grpc.method=Broadcast grpc.peer_address=172.22.0.1:52856 grpc.code=OK grpc.call_duration=8.4914ms
2019-12-28 05:57:31.430 UTC [comm.grpc.server] 1 -> INFO 024 streaming call completed grpc.service=orderer.AtomicBroadcast grpc.method=Deliver grpc.peer_address=172.22.0.1:52858 grpc.code=OK grpc.call_duration=480.4µs
在这一点上,我很好奇如何获得管理员身份。我的策略是'MSP.admin',我使用的是身份,该身份通过参数-id.type admin注册。

符合写入者策略 管理员的设置实际上是正确的,否则订购方会抱怨管理员的策略没有得到满足。发生的情况是,订购方已接受请求并为通道创建了genesis块。然后,它继续设置一个处理程序来广播该频道的未来块,并在这样做时验证其证书是否满足/channel/Writers策略,这是调用广播API所必需的

默认情况下,上述策略的类型为ImplicitMeta,这意味着应该通过/Channel/order//Writers来满足。由于错误消息指出只需满足1个子策略(即任何写入程序),这意味着您的订购者的证书不符合其组织的写入程序策略。您需要将订购方的OU类型添加到规则中,或将其设置为member以允许组织中的任何证书充当编写器:

Writers:
    Type: Signature
    Rule: "OR('<ORG NAME>.admin', '<ORG NAME>.client', '<ORG NAME>.orderer')"
这将允许您随时在BPLMSP组织内创建任何类型的证书,并将其用于管理目的,例如创建通道。Fabric将跳过对证书类型组织单位OU的检查,只检查其是否由组织的CA签名。请注意,这会降低组织内的安全性,因为任何丢失的证书都将具有管理权限

正确的方法 向Fabric CA注册类型为client、peer或orderer的标识 注册注册身份的证书 将证书放在BPLMSP组织的MSP的admincerts/中 确保BPLOrg的MSPDir指向BPLMSP组织的MSP 将BPLOrg的管理员策略留给规则或“BPLMSP.admin” 为OSN创建genesis块。这将把证书包含到块中 启动网络 使用证书对通道创建请求进行签名,并将其发送到OSN 如果要将对等方加入到通道并使用创建的证书对请求进行签名,则必须将证书添加到该对等方的本地MSP的admincerts/文件夹中。对等机在引导时读取此目录,因此如果在目录运行时对其进行了更改,则必须重新启动该目录

如果要在网络已配置的情况下添加其他管理员证书,则必须执行genesis块更新,该更新应包括新证书

正确的方法v1.4.3 此选项允许您将证书注册为管理员,而无需将其添加到genesis块,也无需通过将所有类型的证书注册为管理员而放松安全性

这仅在以下情况下有效:

该网络至少在2019年8月26日运行Hyperledger Fabric v1.4.3 v1.4.3信道能力已启用 已为组织启用节点 已为组织的AdminOUIdentifier设置OrganizationalInitiatifier 然后,您可以注册一个新标识,并将类型OU设置为与OrganizationalInitiatifier匹配。证书不需要添加到OSN的genesis块中,因为它将根据OU类型标识为管理员。有关详细信息,请参阅Hyperledger结构的文档

笔记 要创建频道,必须满足ChannelCreationPolicy。这默认为任意/Channel/Application/Admins。无法使用configtxgen设置策略,修改策略的唯一方法是更改genesis块。看

规则类型.admin与标识/证书类型OU admin不同。规则类型引用具有管理权限的签名,但是这些签名可以来自任何类型的证书

您不能通过以下方式创建管理员:

登记 1.4.3之前的管理员类型OU的标识 将属性hf.Admin=true设置为声明将失败,因为它不是有效的属性 将admin=true:ecert设置为Fabric中的仅查看以hf开头的属性,因此这除了增加混淆之外没有任何效果。 您可以使用任何类型注册CA标识,但是有效的管理员证书必须是OU类型的对等方、订购方、客户端,或者是为AdminOUIdentifier设置了OrganizationAllInitiatifier。不要使用fabric ca client identity add命令,因为它将注册用户类型的标识。我不能说我知道这种类型的目的是什么。

满足编剧政策 管理员的设置实际上是正确的,否则订购方会抱怨管理员的策略没有得到满足。发生的情况是,订购方已接受请求并为通道创建了genesis块。然后,它继续设置一个处理程序来广播该频道的未来块,并在这样做时验证其证书是否满足/channel/Writers策略,这是调用广播API所必需的

默认情况下,上述策略的类型为ImplicitMeta,这意味着应该通过/Channel/order//Writers来满足。由于错误消息指出只需满足1个子策略(即任何写入程序),这意味着您的订购者的证书不符合其组织的写入程序策略。您需要将订购方的OU类型添加到规则中,或将其设置为member以允许组织中的任何证书充当编写器:

Writers:
    Type: Signature
    Rule: "OR('<ORG NAME>.admin', '<ORG NAME>.client', '<ORG NAME>.orderer')"
这将允许您随时在BPLMSP组织内创建任何类型的证书,并将其用于管理目的,例如创建通道。Fabric将跳过对证书类型组织单位OU的检查,只检查其是否由组织的CA签名。请注意,这会降低组织内的安全性,因为任何丢失的证书都将具有管理权限

正确的方法 向Fabric CA注册类型为client、peer或orderer的标识 注册注册身份的证书 将证书放在BPLMSP组织的MSP的admincerts/中 确保BPLOrg的MSPDir指向BPLMSP组织的MSP 将BPLOrg的管理员策略留给规则或“BPLMSP.admin” 为OSN创建genesis块。这将把证书包含到块中 启动网络 使用证书对通道创建请求进行签名,并将其发送到OSN 如果要将对等方加入到通道并使用创建的证书对请求进行签名,则必须将证书添加到该对等方的本地MSP的admincerts/文件夹中。对等机在引导时读取此目录,因此如果在目录运行时对其进行了更改,则必须重新启动该目录

如果要在网络已配置的情况下添加其他管理员证书,则必须执行genesis块更新,该更新应包括新证书

正确的方法v1.4.3 此选项允许您将证书注册为管理员,而无需将其添加到genesis块,也无需通过将所有类型的证书注册为管理员而放松安全性

这仅在以下情况下有效:

该网络至少在2019年8月26日运行Hyperledger Fabric v1.4.3 v1.4.3信道能力已启用 已为组织启用节点 已为组织的AdminOUIdentifier设置OrganizationalInitiatifier 然后,您可以注册一个新标识,并将类型OU设置为与OrganizationalInitiatifier匹配。证书不需要添加到OSN的genesis块中,因为它将根据OU类型标识为管理员。有关详细信息,请参阅Hyperledger结构的文档

笔记 要创建频道,必须满足ChannelCreationPolicy。这默认为任意/Channel/Application/Admins。无法使用configtxgen设置策略,修改策略的唯一方法是更改genesis块。看

规则类型.admin与标识/证书类型OU admin不同。规则类型引用具有管理权限的签名,但是这些签名可以来自任何类型的证书

您不能通过以下方式创建管理员:

将身份注册为管理员类型OU v1.4.3之前的版本 将属性hf.Admin=true设置为声明将失败,因为它不是有效的属性 将admin=true:ecert设置为Fabric中的仅查看以hf开头的属性,因此这除了增加混淆之外没有任何效果。 您可以使用任何类型注册CA标识,但是有效的管理员证书必须是OU类型的对等方、订购方、客户端,或者是为AdminOUIdentifier设置了OrganizationAllInitiatifier。不要使用fabric ca client identity add命令,因为它将注册用户类型的标识。我不能说我知道这种类型的用途。

对于您的情况:

满足0个子策略

零表示没有使用任何证书对事务进行签名,因此您只需 将您的管理员证书复制到正确的目录

对于您的情况:

满足0个子策略


零表示没有使用任何证书对事务进行签名,因此您只需将管理员证书复制到正确的目录

感谢您的善意和详细解释!我了解hyperledger结构中的策略机制,如您所述,请求应该由管理员或客户端类型证书签名。我用来签名的身份是一个管理员身份,它已经用一个参数-id.type admin注册,并且注册良好。所以,我认为这个身份是一个管理员身份,可以在请求上签名。我的想法错了吗?如果我错了,我应该使用哪种身份?我检查了您的建议是否更改为BPLMSP.member,是否符合我的预期。我成功创建了频道。这意味着我获取管理员身份的方式是错误的。那么,我如何才能获得正确的管理员身份?我最初的过程中有什么错误吗?谢谢。我意识到我的部分答案是错误的,并且你正在寻找将证书正确注册为管理员的方法。在深入研究了织物并对其进行了更多的研究之后,我现在更新了答案,使其更加广泛。希望有帮助!感谢您的善意和详细解释!我了解hyperledger结构中的策略机制,如您所述,请求应该由管理员或客户端类型证书签名。我用来签名的身份是一个管理员身份,它已经用一个参数-id.type admin注册,并且注册良好。所以,我认为这个身份是一个管理员身份,可以在请求上签名。我的想法错了吗?如果我错了,我应该使用哪种身份?我检查了您的建议是否更改为BPLMSP.member,是否符合我的预期。我成功创建了频道。这意味着我获取管理员身份的方式是错误的。那么,我如何才能获得正确的管理员身份?我最初的过程中有什么错误吗?谢谢。我意识到我的部分答案是错误的,并且你正在寻找将证书正确注册为管理员的方法。在深入研究了织物并对其进行了更多的研究之后,我现在更新了答案,使其更加广泛。希望有帮助!请您将日志记录级别设置为info,以便我们可以获得更多信息。将日志记录级别启用为“信息”后,请共享订购者日志详细信息。@PAVAN我从订购者添加了日志,其日志记录级别为“信息”。它没有提供更多的详细信息。您能分享订购方的整个日志文件吗?@PAVAN Okay。我更新了订购方的整个日志文件。请在crypto-config.yaml文件中确认是否启用了节点OU。ie EnableNodeOUs:是的。请您将日志记录级别设置为info,以便我们可以获得更多信息。将日志记录级别启用为“信息”后,请共享订购者日志详细信息。@PAVAN我从订购者添加了日志,其日志记录级别为“信息”。它没有提供更多的详细信息。您能分享订购方的整个日志文件吗?@PAVAN Okay。我更新了订购方的整个日志文件。请在crypto-config.yaml文件中确认是否启用了节点OU。ie EnableNodeOUs:true。我检查了Fabric SDK是否正确加载了签名标识。我怀疑可能我使用了错误的身份,我相信这是正确的管理员身份,但事实并非如此。那么,如何获得正确的管理员标识呢?我检查了Fabric SDK是否正确加载了签名\u标识。我怀疑可能我使用了错误的身份,我相信这是正确的管理员身份,但事实并非如此。那么,我如何才能获得正确的管理员身份?