Fabric ca避坑指南

记录fabric ca使用中遇到的一些问题

Posted by Arain on September 30, 2019

Fabric ca避坑指南

  1. 使用Fabric ca签发证书,自组织文件目录之后节点启动证书链验证失败,报告如下异常:

    x509: certificate signed by unknown authority

    原因:文件目录组织错误,导致证书链校验无法通过。

  2. TLS握手时表示hostName验证不通过。

    分析:TLS客户端默认会校验服务端的使用者名称(hostName)和服务端证书中的使用者是否一致。goland的TLS基本库,默认是会校验TLS证书的使用者和TLS连接参数的DNSName是否一致。如果通过ip地址和端口直接连接peer/orderer节点时没有设置TLS连接的DNSName的话,DNSName会默认使用ip和端口号。这样会导致DNSName和证书中的使用者不一致从而TLS握手失败。

    解决方式:

    如果使用goland语言的话,在参数里面配置DNSName。

    如果使用java sdk创建HFClinet的话,可以在properties里面设置allowAllHostNames为ture跳过hostName检查,但是不建议这样做:

    public Properties getProperties() {
            Properties properties = new Properties();
            if (getTlsEnable()) {
                String ca = getTlsCaCert();
                if (StringUtils.isNotEmpty(ca)) {
                    properties.put("pemBytes", ca.getBytes());
                    properties.setProperty("sslProvider", "openSSL");
                    properties.setProperty("negotiationType", "TLS");
       
                    //信任服务端证书
                    properties.setProperty("trustServerCertificate", "true");
                       
                    //跳过hostName检查
                    properties.setProperty("allowAllHostNames", "true");
                    //properties.setProperty("hostnameOverride", serverhostname);
       
                    if (getDualVerify()) {
                        //如果peer节点没有开启TLS双端认证这个配置就不能给,不然TLS握手失败
                        properties.put("clientCertBytes", getTlsClientCert().getBytes());
                        properties.put("clientKeyBytes", getTlsClientKey().getBytes());
                    }
                }
            }
            return properties;
        }