1

背景

我们有一个生产结构集群设置,并且已经运行了一年。现在大多数证书过期并且集群崩溃,包括 tls 和身份证书。

我试图通过完全删除旧证书和私钥来修复,为 peer、peer admin、orderer、orderer 管理员生成和注册新身份。

一切都恢复正常,但我无法在现有通道中实例化/升级链代码,因为该通道配置了旧的管理员证书。

问题

所以现在看起来我陷入了僵局。为了使用新证书更新通道配置,我需要使用匹配的旧证书对更新进行签名,该旧证书已经过期并被订购者阻止。

我发现我们可以使用 ORDERER_GENERAL_AUTHENTICATION_NOEXPIRATIONCHECKS=true 在排序器中禁用过期证书检查。但是现在我没有旧的管理员私钥,所以我仍然无法更新频道配置。

问题

我已经用新的私钥替换了旧的私钥,所以没有办法再次使用旧的证书。我可以做些什么来解决这个频道问题吗?

非常感谢您的建议。

4

1 回答 1

0
  • [!] 我的建议是一个想法。我没有测试过。
  • [!] 这似乎足够可行,但没有考虑副作用。
  • [!]这只是一个把戏,它永远不应该这样做是正确的。

结论是 orderer 和 peer 的二进制文件可以被人为地操纵和更新。

  1. 对于结构,在构建二进制文件时参考 $GOROOT/src/crypto。
  2. 在人为修改crypto中的所有ecdsa验证函数以立即返回true后,构建fabric存储库。
cd $GOROOT/src/crypto
vi ecdsa/ecdsa.go # modify `Verify` function
cd $GOPATH/src/github.com/hyperledger/fabric
make peer
make orderer
  1. 备份当前运行的 docker 容器的二进制文件,将新建的二进制文件植入容器中后重新运行。
docker cp <peer_container_name>:/usr/local/bin/peer ./
docker cp $GOPATH/src/github.com/hyperledger/fabric/build/bin/peer <peer_container_name>:/usr/local/bin/peer

docker cp <orderer_container_name>:/usr/local/bin/orderer ./
docker cp $GOPATH/src/github.com/hyperledger/fabric/build/bin/orderer <orderer_container_name>:/usr/local/bin/orderer

docker-compose -f <your_docker_compose_file_path> restart
  1. 现在所有验证都是无条件有效的。所以,更新所有最近的状态。

  2. 之后,将备份的二进制文件重新植入容器中以解决此问题。

docker cp ./peer <peer_container_name>:/usr/local/bin/peer

docker cp ./orderer <orderer_container_name>:/usr/local/bin/orderer

docker-compose -f <your_docker_compose_file_path> restart
于 2020-12-07T10:23:34.187 回答