通过 TLS 连接到 OPENLDAP:未找到证书

问题描述

我有一个来自 Osixia 的 OpenLDAP Docker 实例,我正在尝试使用 TLS 从客户端安全地查询它。该查询在不使用 $ ldapwhoami -H ldap://localhost -x 加密的情况下工作,并且在使用 -ZZ 标志启动 TLS 操作 $ ldapwhoami -H ldap://localhost -x -ZZ 时不起作用 - 它返回 ldap_start_tls: Can't contact LDAP server (-1)。我怎样才能使这项工作?以下是我采取的所有步骤:

  1. 在 docker 中运行 LDAP 服务器:
$ docker run -p 389:389 -p 636:636 --name ldap-service --hostname ldap-service \
--env LDAP_ADMIN_PASSWORD="password" --env LDAP_BASE_DN="dc=example,dc=org" --detach  osixia/openldap:1.4.0
  1. 测试连接 - 显示成功,返回 anonymous
$ ldapwhoami -H ldap://localhost -x
anonymous
  1. TLS 连接的准备工作 - 配置客户端以信任 SERVER 证书颁发机构 (CA)
    1. 服务器 DOCKER 容器:TLS 证书在 osixia/openldap 映像中在运行时自动配置。复制 /container/service/slapd/assets/certs/ca.crt
    2. 中 CA 的内容
    3. CLIENT:将复制的 SERVER ca.crt 粘贴到 CLIENT 文件/usr/local/share/ca-certificates/ca.crt 中,然后运行 ​​sudo update-ca-certificates 进行添加。通过检查 CA 在 /etc/ssl/certs/ca-certificates.crt
    4. 中来确认添加成功
    5. 客户:在文件/etc/ldap/ldap.conf中,我添加了行TLS_CACERT /etc/ssl/certs/ca-certificates.crt
  2. 通过 -ZZ 标志测试来自 CLIENT 的 TLS 连接以启动 TLS 操作:
$ ldapwhoami -H ldap://localhost -x -ZZ   
ldap_start_tls: Can't contact LDAP server (-1)
        additional info: The TLS connection was non-properly terminated.

来自 LDAP docker 内部的更多日志:

5ff42195 conn=1079 fd=12 ACCEPT from IP=172.17.0.1:39420 (IP=0.0.0.0:636)
TLS: can't accept: No certificate was found..
5ff42195 conn=1079 fd=12 closed (TLS negotiation failure)
  1. 通过 LDAP 安全 URI 方案测试来自 CLIENT 的 TLS 连接ldaps://
$ ldapwhoami -H ldaps://localhost -x 
ldap_sasl_bind(SIMPLE): Can't contact LDAP server (-1)

我尝试过的东西:

 TLS_CACERT      /etc/ssl/certs/ca-certificates.crt
 TLS_REQCERT ALLOW
 PORT 636
 HOST localhost // i also tried 'ldap-service' 

解决方法

我找到了解决方案:

--env LDAP_TLS_VERIFY_CLIENT=try 添加到 docker run 命令。 Source

,

对于 Google 员工

Presto 在连接 LDAP 服务时不提供客户端证书(客户端证书验证,双向验证),因此如果使用 --env LDAP_TLS_VERIFY_CLIENT=try,则需要 neverosixia/openldap,或者,编辑 ldap.conf 并设置 TLS_REQCERT never 并重新启动 LDAP 服务。