fisco web3sdk国密连接实现方式

2020-08-04  本文已影响0人  ccDown

因项目需要,需要了解一下fisco SDK与节点如何实现gm tls

思路:

  1. fisco webase-front这个项目可以直接与节点进行通讯,我们首先了解这个项目。
    在front的配置文件中设置gm or k1连接,说明在front中支持两种连接方式,我们需要在front中找到构建这两种连接的地方。
  2. 在研究front这个项目的时候,发现front与节点进行沟通是通过web3sdk这个项目,因此我们需要了解一下webase的web3sdk

web3sdk for fisco 的内部实现

在rpc通道构建的时候,在ChannelConnections类中有个startConnect方法,在这个方法中有个 sm2 Or ECDSA 的判断

        SslContext sslContext =
                (EncryptType.encryptType == EncryptType.ECDSA_TYPE)
                        ? initSslContext()
                        : initSMSslContext();

然后我们进入到initSMSslContext方法

    public SslContext initSMSslContext()
            throws IOException, InvalidKeySpecException, CertificateException,
                    NoSuchAlgorithmException, NoSuchProviderException {

        // The client's SM SSL certificate exists
        if ((getGmCaCert() != null && getGmCaCert().exists())
                || (getGmEnSslCert() != null && getGmEnSslCert().exists())
                || (getGmEnSslKey() != null && getGmEnSslKey().exists())
                || (getGmSslCert() != null && getGmSslCert().exists())
                || (getGmSslKey() != null && getGmSslKey().exists())) {
            return SMSslClientContextFactory.build(
                    getGmCaCert().getInputStream(),
                    getGmEnSslCert().getInputStream(),
                    getGmEnSslKey().getInputStream(),
                    getGmSslCert().getInputStream(),
                    getGmSslKey().getInputStream());
        }

        logger.info(" Has no SM Ssl certificate configuration ");

        // The client's SM SSL certificate not exists or not configured correctly
        return initSslContext();
    }

因此加载不同算法的逻辑伪代码:

        if (EncryptType.encryptType == EncryptType.ECDSA_TYPE){
            initSslContext();
        } else {
            if (国密相关cert、key存在){
                initSMSslContext();
            } else {
                initSslContext();
            }
        }

web3sdk 对国密的支持主要就是修改了SSLContext对象,具体构建的过程是通过org.fisco-bcos:netty-sm-ssl-context这个类库实现的。
有个疑问是这个类库里只有几个文件,明明可以直接放到项目中,为什么不直接把代码放进项目里边呢?难道是为了方便其他项目使用?


image.png
    compile 'org.fisco-bcos:netty-sm-ssl-context:1.0.0'

结论

我们假如想要使用fisco web3sdk的国密,或许只需要两个步骤

  1. 添加这两个依赖
    compile 'io.netty:netty-all:4.1.50.Final'
    compile 'org.fisco-bcos:netty-sm-ssl-context:1.0.0'
  1. 构建SSLContext对象的时候使用SMSslClientContextFactory.build方法
上一篇下一篇

猜你喜欢

热点阅读