【发布时间】:2021-08-10 21:46:30
【问题描述】:
我正在尝试使用新的外部链码服务功能设置 Hyperledger Fabric。使用默认配置(无 tls 或对等身份验证)运行链代码按预期工作。
我已经阅读了很多关于这个主题的教程,但是它们都只使用自签名证书来达到这个目的——这并不是很有帮助,因为我正在配置一个生产系统。我想使用已经在我的网络中运行的证书颁发机构(fabric-ca-server)并为我的订购者、同行等提供证书。
我的问题是:如何使用现有的 CA 生成 root_cert 以及 client_cert 和 client_key?必须有一种方法可以使用fabric-ca-client 来做到这一点。我已经尝试使用我的同行组织的 ca 证书,但这不起作用(它似乎不包含链码服务的主机名)。
感谢您的帮助。
更新:
我现在尝试使用fabric-ca-client 的register 和enroll 命令来注册一个身份并为自己获取一个tls Enrollment-profile。
fabric-ca-client register --caname $CANAME --id.name chaincode --id.secret chainpw --tls.certfiles $certfile --loglevel error
fabric-ca-client enroll -u https://chaincode: chainpw@$CA_HOST_ADDRESS:$nodePort --caname $CANAME -M "$chainDir/msp" --csr.cn diplom-$validK8SHostName --csr.hosts diplom-$validK8SHostName --tls.certfiles $certfile --loglevel error
fabric-ca-client enroll -u https://chaincode: chainpw@$CA_HOST_ADDRESS:$nodePort --caname $CANAME -M "$chainDir/tls" --enrollment.profile tls --csr.hosts diplom-$validK8SHostName --csr.hosts localhost --tls.certfiles $certfile --loglevel error
从生成的 tls 目录中,我将/signcerts/cert.pem 并通过awk 'NF {sub(/\r/, ""); printf "%s\\n",$0;}' ... 将其格式化为单行,并将其作为root_cert 粘贴到connection.json 中。
同样,我已将 cert.pem 文件复制到链码容器中,并将环境变量 CORE_CHAINCODE_TLS_CLIENT_CACERT_FILE 设置为指向该文件。但是,peer 仍然无法连接到容器。
ClientHandshake -> ERRO 06c Client TLS handshake failed after 752.754µs with error: tls: first record does not look like a TLS handshake
更新 2:
好像我在链码服务上设置了错误的环境变量。 CORE_CHAINCODE_TLS_CERT_FILE 必须设置为生成的/signcerts/cert.pem 和CORE_CHAINCODE_TLS_KEY_FILE 设置为来自/keystore 的私钥。
chaincode 服务现在似乎接受了证书,但对等方抱怨它们是由未知机构签署的。
更新 3:
又一个进步。好像我在fabric-ca-client 命令中犯了一个错误。我不小心设置了 csr.cn 参数,从而覆盖了我的 CA 主机名。随着他的关注,我能够向我的 CA 注册我的链码服务,并获得相应的 TLS 证书以对我的服务有效并与组织 CA 结帐:-)
fabric-ca-client register --caname $CANAME --id.name $NAME --id.secret $PW --tls.certfiles $certfile --loglevel error
fabric-ca-client enroll -u https://$NAME:$PW@$CA_HOST_ADDRESS:$nodePort --caname $CANAME -M "$chainDir/msp" --csr.hosts chain-$validK8SHostName --tls.certfiles $certfile --loglevel error
fabric-ca-client enroll -u https://$NAME:$PW@$CA_HOST_ADDRESS:$nodePort --caname $CANAME -M "$chainDir/tls" --enrollment.profile tls --csr.hosts chain-$validK8SHostName --csr.hosts localhost --tls.certfiles $certfile --loglevel error
【问题讨论】:
标签: ssl hyperledger-fabric hyperledger hyperledger-chaincode hyperledger-fabric-ca