Fabric ca避坑指南
-
使用Fabric ca签发证书,自组织文件目录之后节点启动证书链验证失败,报告如下异常:
x509: certificate signed by unknown authority
原因:文件目录组织错误,导致证书链校验无法通过。
-
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; }