Hyperledger Minifabric执行fabric-ca-client enroll出现x509证书匹配错误
Hyperledger Minifabric CA注册x509证书报错解决方案
根因说明
报错的核心原因是CA服务端的TLS证书签发时,使用者备用名称(SAN)字段仅包含了CA节点的容器IP、预设组织域名,没有加入localhost。你使用localhost作为访问地址请求CA服务时,客户端TLS校验发现证书和访问地址不匹配,直接拒绝握手,对应CA服务端日志会返回TLS握手错误、坏证书的提示。
你之前按相同步骤操作可以正常运行,大概率是之前使用的Minifabric版本默认会把localhost加入CA证书的SAN列表,或是之前部署的是单组织网络,证书生成规则和多组织场景有差异。
解决方案
- 方案1:替换为证书包含的合法访问地址
首先执行以下命令查看当前CA TLS证书包含的所有合法地址:openssl x509 -in /certs/ca/cert.pem -text -noout | grep -E 'DNS:|IP Address:'
输出中所有的DNS域名、IP地址都是允许的访问地址,把enroll命令里的localhost替换为对应的地址即可。Minifabric多组织网络默认生成的CA域名格式为ca-[组织名].example.com,修改后的命令示例如下:fabric-ca-client enroll -u https://Admin:adminpw@ca-org1.example.com:7054 --tls.certfiles /certs/ca/cert.pem
注意确认当前操作的容器/etc/hosts文件中已经配置了该域名和CA容器IP的映射,Minifabric默认生成的cli容器会自动配置该映射,如果你是手动进入的其他容器,可自行添加对应hosts记录。 - 方案2:测试环境跳过域名校验
本地测试场景下可以添加--tls.skipverify参数跳过TLS域名校验环节,修改后的命令如下:fabric-ca-client enroll -u https://Admin:adminpw@localhost:7054 --tls.certfiles /certs/ca/cert.pem --tls.skipverify
该方案存在安全风险,仅适合本地测试使用,生产环境严禁使用。 - 方案3:重新生成带localhost的CA证书
如果必须使用localhost访问CA,可以修改Minifabric的证书生成配置,在CA证书的SAN字段添加localhost后,重新生成整个网络的证书再启动网络即可。
内容的提问来源于stack exchange,提问作者Rafail K.
相关产品推荐
相关产品推荐

