json-rpc supports https
DiyiWi opened this issue · 1 comments
DiyiWi commented
赛题5:网关接入中继链证书准入机制
在联盟链场景下,需要对接入的成员有相应的准入许可。在跨链场景下也是类似,网关代表应用链接入到跨链系统中时,必须获取到中继链联盟的许可,才可以获取相应的跨链交易数据。
解题思路:
增加准入机制时,主要涉及到两个部分:客户端SDK和中继链。跨链网关在中继模式启动时需要向中继链请求许可,中继链收到SDK/跨链网关的请求时,也必须检查相应的许可是否正确。这里许可机制一般采用证书来实现。
DiyiWi commented
- 参考meshplus/bitxhub项目中cmd-client模块的HTTPS客户端实现
bitxhub/cmd/bitxhub/client/http.go
func getHttpsClient(ctx *cli.Context, certPath string) (*http.Client, error) {
caCert, err := ioutil.ReadFile(certPath)
if err != nil {
return nil, err
}
caCertPool := x509.NewCertPool()
caCertPool.AppendCertsFromPEM(caCert)
cert, err := tls.LoadX509KeyPair(ctx.GlobalString("cert"), ctx.GlobalString("key"))
return &http.Client{
Transport: &http.Transport{
TLSClientConfig: &tls.Config{
ServerName: "BitXHub",
RootCAs: caCertPool,
Certificates: []tls.Certificate{cert},
},
},
}, nil
}
- 实现pier的json-rpc客户端TLS配置
git checkout feat/support-swap
./internal/syncer/jsonrpc_client.go
func InitializeJsonRpcClient(pierId string, url string, grpcClient rpcx.Client, opts ...Option) (*Client, error) {
c := &Client{}
cfg, err := GenerateConfig(opts...)
if err != nil {
return nil, err
}
c.logger = cfg.logger
etherCli, err := ethclient.Dial(url)
if err != nil {
return nil, err
}
- 更换ethclient.Dial代码,深入eth-client源码找到init-client的部分;
- 结合bitxhub的cmd-client实现,为pier添加配置可开启双向TLS。