OpenLDAP TLS 错误:TLS 协商失败

OpenLDAP TLS 错误:TLS 协商失败

我正在尝试通过 Helm Chart 在 kubernetes 上设置 OpenLDAP。

它部署正确,我能够从容器内部本地以及从集群中的其他容器(如 phpldapadmin)通过端口 389(未加密)访问服务器(通过 URL:openldap.ldap.svc.cluster.local)。

但是我无法使用 tls 访问它。从容器内,如果我运行此命令:ldapsearch -x -ZZ,我会在日志中得到以下内容:

5e2e6f05 conn=1035 fd=15 ACCEPT from IP=127.0.0.1:44820 (IP=0.0.0.0:389)
5e2e6f05 conn=1035 op=0 EXT oid=1.3.6.1.4.1.1466.20037
5e2e6f05 conn=1035 op=0 STARTTLS
5e2e6f05 conn=1035 op=0 RESULT oid= err=0 text=
TLS: can't accept: (unknown error code).
5e2e6f05 conn=1035 fd=15 closed (TLS negotiation failure)

同样,在本地 openLDAP 容器本身中,如果我尝试,ldapsearch -x -H ldaps://localhost -b "dc=domain,dc=com"我会得到:

5e2e6a87 conn=1138 fd=15 ACCEPT from IP=127.0.0.1:45638 (IP=0.0.0.0:636)
TLS: can't accept: (unknown error code).
5e2e6a87 conn=1138 fd=15 closed (TLS negotiation failure)

我不知道接下来在调试方面要检查什么。我看到的一个问题是,在 docker 容器中,它应该使用参数运行--hostname,但我不认为 helm 图表会这样做,而且我不知道是否需要设置主机名。也许它不喜欢我通过主机名localhost而不是ldap.domain.com证书的域名访问的事实。如果是这种情况,我仍然不确定如何将主机名设置为ldap,假设这就是我需要做的。

环境:

我安装了这个图表:https://github.com/helm/charts/tree/master/stable/openldap

它基于这个 docker 镜像:https://github.com/osixia/docker-openldap

并为 helm 图表设置以下参数:

existingSecret: openldap-admin-pass
tls.enabled: true
tls.secret: ldap-tls
persistence.enabled: true
persistence.accessMode: ReadWriteMany
persistence.existingClaim: openldap-vol

我还更改了配置图,以便LDAP_DOMAIN = domain.com

证书本身是由 let's encrypt 的 cert-manager 生成的。证书的域名是ldap.domain.com.它是使用 cloudflare 的 DNS 验证进行签名的,是有效的证书。

服务器启动日志未显示任何错误,看起来 TLS 配置和证书已正确导入:https://pastebin.com/raw/q9iEZCGN

将不胜感激任何帮助。谢谢。

答案1

我在这里找到了解决方案: https://github.com/osixia/docker-openldap/issues/105

必须在 openLDAP 容器上设置环境变量:LDAP_TLS_VERIFY_CLIENT=try

否则它会期望客户端也拥有自己的证书。

相关内容