记一次 fabric 新增节点证书错误处理

使用 cryptogen 工具生成新节点证书并动态添加 raft 节点时出现 x509: certificate signed by unknown authority

问题

现有区块链中已有 orderer 节点有 peer 节点,需要动态添加新的 orderer 节点。使用 fabric 提供工具 cryptogen 生成证书后完成前面的各种操作,在最后提交更新请求时出现如下错误提示:

shell
1
2
3
# peer channel update -f channel-artifacts/updated_envelope.pb -c ${CHANNEL_NAME} -o ${ORDERER_ADDRESS} --tls true --cafile ${ORDERER_CA}
2020-09-24 23:18:30.183 CST [channelCmd] InitCmdFactory -> INFO 001 Endorser and orderer connections initialized
Error: got unexpected status: BAD_REQUEST -- error applying config update to existing channel 'system-channel': consensus metadata update for channel config update is invalid: verifying tls client cert with serial number 92853457364351164651050280270128407740: x509: certificate signed by unknown authority (possibly because of "x509: SM2 verification failure" while trying to verify candidate authority certificate "tlsca.blockchian.example.com")

现象

经过多次测试排查问题后,发现 crypto-config/ordererOrganizations/blockchian.example.com/ 目录下多个文件在执行命令新增证书后其 MD5 值与之前不一致。

示例:

  • 初次生成证书文件

    shell
    1
    # cryptogen generate --config=crypto-config.yaml

    文件 MD5

    • tlsca/tlsca.blockchian.example.com-cert.pem:adf10329c0281d13546e3ef7b43b788a

    • ca/ca.blockchian.example.com-cert.pem:7e75be36071ea6214d4f97fc88e0b082

  • 生成新节点证书

    添加新配置文件并生成新节点证书

    shell
    1
    # cryptogen generate --config=orderer1-crypto.yaml

    文件 MD5

    • tlsca/tlsca.blockchian.example.com-cert.pem:50b25208219d6a35e36e7764841dbfe4

    • ca/ca.blockchian.example.com-cert.pem:88bfff4b89dd3968c0f6b0c301cf78e9

使用命令 md5sum <file> 获取文件 MD5 值,或者备份该文件对比两次证书生成后的文件内容,可获得文件差异

解决方法

后来发现新节点加入如果是通过 cryptogen 工具生成证书,那么新节点加入需要通过 Extend 选项扩展而不是直接使用 generate

示例:

  • 初次生成证书文件

    shell
    1
    # cryptogen generate --config=crypto-config.yaml

    文件 MD5

    • tlsca/tlsca.blockchian.example.com-cert.pem:efee993ed177d1e83ca68bdf4687a42a

    • ca/ca.blockchian.example.com-cert.pem:b4c3a56a8275deccd4c9314e57f65a53

  • 生成新节点证书

    添加新配置文件并生成新节点证书

    shell
    1
    # cryptogen extend --config=orderer1-crypto.yaml

    文件 MD5

    • tlsca/tlsca.blockchian.example.com-cert.pem:efee993ed177d1e83ca68bdf4687a42a

    • ca/ca.blockchian.example.com-cert.pem:b4c3a56a8275deccd4c9314e57f65a53

评论

:D 一言句子获取中...

加载中,最新评论有1分钟缓存...