Hyperledger Fabric:CA 证书没有 CA 属性,即使它有

Hyperlegder Fabric: CA certificate does not have CA attribute even though it does

我正在尝试使用我自己的证书颁发机构和用户设置 Hyperledger Fabric 安装。我使用的是 版本 1.4.6。我越来越近了。但当我尝试创建频道时会发生这种情况:

peer channel create -o orderer.diro.umontreal.ca:7050 -c $CHANNEL_NAME -f ./channel-artifacts/channel.tx --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/indepedent/orderer/msp/signcerts/cert.pem

作为回应,我得到:

Cannot run peer because error when setting up MSP of type bccsp from directory /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/indepedent/admin3/msp: CA Certificate did not have the CA attribute, (SN: 6143ea1883f7a36a3d794bfab314ea05d9ddd270)

admin3 是我目前尝试向 CA 注册管理员。但是,当我尝试查看该用户的 CA 证书时会发生以下情况:

openssl x509 -in crypto-config/indepedent/admin3/msp/cacerts/localhost-7054.pem -text -noout | grep CA:
            CA:TRUE, pathlen:0

看来毕竟是CA属性啊。给出了什么?

请检查存在于 crypto-config/indepedent/admin3/msp/tlscacerts 文件夹中的证书并验证它是否是 CA 证书。

我无法让所有的东西都工作,但我让那部分工作了,但它并不明显,所以我在这里记录它以防它在将来帮助某人:

首先,制作钥匙。不是证书,只是密钥:

openssl ecparam -name prime256v1 -genkey -param_enc named_curve -out private-key.pem

prime 类型的椭圆曲线似乎是有效的,重要的是它们是 named_cure 类型。您可以更改大小。那部分在文档中。

然后制作证书:

openssl req -new -x509 -key private-key.pem -out tls-cert.pem -subj '/CN=Same name as original'  -days 10000 -addext "subjectAltName = DNS:localhost"

现在,当我启动 CA 时,它不起作用。它想要一个私钥。它为私钥提供了一个很长的十六进制数字。我将私钥作为名为 <long_number>_sk 的文件复制到密钥库中,但这还不够。该文件包含两个部分,必须删除第一个部分。所以我不得不进去删除前三行。

成功了。这样做之后,我得到了我的 CA 证书,它也可以用作 TLS 证书。但是现在,我必须重新创建所有用户。

我尝试添加带有 -config 选项的配置文件,但删除了基本的 CA:TRUE 属性。

[编辑]

我还设法制作了一个可用的配置文件,并使用更短的命令制作了同样的东西:

[ req ]
distinguished_name     = req_distinguished_name
x509_extensions        = v3_intermediate_ca

[ v3_intermediate_ca ]
subjectKeyIdentifier   = hash
authorityKeyIdentifier = keyid:always,issuer
basicConstraints       = critical, CA:true, pathlen:0
keyUsage               = critical, digitalSignature, cRLSign, keyCertSign
subjectAltName         = @alt_names

[ req_distinguished_name ]
C                      = US
ST                     = CA
L                      = City
O                      = Institution
OU                     = Department
CN                     = main-ca

[ alt_names ]
DNS.0                  = CN localhost

然后:

openssl req -new -x509 -key private-key.pem -out tls-cert.pem -subj '/CN=The Subject' -days 10000 -config openssl.cnf