Hyperledger Fabric-ca连接到LDAP目录

时间:2018-07-31 13:07:17

标签: ldap openldap hyperledger-fabric-ca

我们正在实施Hyperledger Fabric解决方案。为此,我们在特定的docker中使用最小配置(我们仍在尝试弄清事情的运行方式)来设置Fabric-CA。

由于我们需要使用电子邮件/密码对登录用户,因此我们设置了LDAP组件。我们选择在其他docker中使用osixia / openldap实现来使用OpenLDAP。

我们在fabric-ca-server-config.yaml中设置参数,以将Fabric CA连接到LDAP。在两个docker的开始时,日志似乎都很好:

Successfully initialized LDAP client

当我们进行Fabric-CA教程时,我们在以下命令中失败:

fabric-ca-client enroll -u http://cn=admin,dc=example:admin@localhost:7054

结果是:

[INFO] 127.0.0.1:46244 POST /enroll 401 23 "Failed to get user: Failed to connect to LDAP server over TCP at localhost:389: LDAP Result Code 200 "": dial tcp 127.0.0.1:389: connect: connection refused"

在CLI中通过LDAP浏览器并使用相同的凭据通过PHPLdapAdmin进行修改时,LDAP可以正确设置并运行。

这是fabric-ca-server-config.yaml的一部分:

ldap:
  enabled: true
  url: ldap://cn=admin,dc=example:admin@localhost:389/dc=example
  userfilter: (uid=%s)
tls:
  enabled: false
  certfiles:
  client:
    certfile: noclientcert
    keyfile:
attribute:
  names: ['uid','member']
  converters:
    - name: hf.Revoker
      value: attr("uid") =~ "revoker*"
  maps:
    groups:
      - name: example
      value: peer

有人可以帮助吗? 感谢您的阅读,

2 个答案:

答案 0 :(得分:0)

我没有使用本地LDAP服务器,而是将一行用于快速测试... http://www.forumsys.com/tutorials/integration-how-to/ldap/online-ldap-test-server/

但是我仍然收到错误消息。

我的fabric-ca-server-config.yaml是

ldap:
   enabled: true
   url: ldap://cn=read-only-admin,dc=example,dc=com:password@ldap.forumsys.com:389/dc=example,dc=com
   tls:
      certfiles:
      client:
         certfile:
         keyfile:
   # Attribute related configuration for mapping from LDAP entries to Fabric CA attributes
   attribute:
      names: ['uid','member']
      converters:
         - name: hf.Revoker
           value: attr("uid") =~ "revoker*"
      maps:
         groups:
            - name:
              value:

我的运行方式是:

fabric-ca-server start -c fabric-ca-server-config.yaml

我看到了日志:

Successfully initialized LDAP client

这是phpLDAPAdmin的屏幕截图: enter image description here 我正在使用相同的脚本进行测试:

$fabric-ca-client enroll -u http://cn=read-only-admin,dc=example,dc=com:password@localhost:7054

$fabric-ca-client enroll -u http://uid=tesla,dc=example,dc=com:password@localhost:7054

但是仍然不是很好,得到类似的东西:

POST /enroll 401 23 "Failed to get user: User 'uid=tesla,dc=example,dc=com' does not exist in LDAP directory"

答案 1 :(得分:0)

我在这里看到两个问题:

首先与docker而不是fabric-ca有关。您必须将netowrk_mode设置为host才能删除容器与Docker主机之间的网络隔离。然后您的Docker容器将看到Docker主机上的OpenLDAP

请查看示例docker-compose.yaml文件   version: '2' services: fabric-ca-server: image: hyperledger/fabric-ca:1.1.0 container_name: fabric-ca-server ports: - "7054:7054" environment: - FABRIC_CA_HOME=/etc/hyperledger/fabric-ca-server volumes: - ./fabric-ca-server:/etc/hyperledger/fabric-ca-server command: sh -c 'fabric-ca-server start' network_mode: host

有关docker网络的更多信息,您可以在这里找到:https://docs.docker.com/network/

当网络问题得到解决后,您还必须修改userfilter以使其与admin前缀相关联,因此它应如下所示:userfilter: (cn=%s)如果无法修复userfilter,则您将获得在以下位置找不到admin的信息: LDAP。