问题描述
我们开发了一个 Java 应用程序来使用 Spring 集成 LDAP 用户。 当应用程序在 LDAP(ldap://openldap:389) 上连接 LDAP 服务器时,它会起作用。 我在通过 TLS(ldaps://openldap:636) 连接 LDAP 服务器时遇到问题。
环境:
TurnKey Open LDAP 服务器虚拟机已安装
生成新的自签名证书。它在 java 应用程序和 LDAP 服务器上使用
异常:
Caused by: org.springframework.ldap.CommunicationException: simple bind Failed: openldap:636; nested exception is javax.naming.CommunicationException: simple bind Failed: openldap:636 [Root exception is javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No name matching openldap found]
在 Java 应用程序中使用 Turnkey Open Ldap VM 中捆绑的内置证书时,会引发以下异常
org.springframework.ldap.CommunicationException: simple bind Failed: openldap:636; nested exception is javax.naming.CommunicationException: simple bind Failed: openldap:636 [Root exception is java.net.socketException: Connection or outbound has closed]
解决方法
这是根证书问题。我将错误的 CA 证书导入到 cacert 中。 根本原因是我们在 TurnKey open ldap 中查看了错误的证书配置位置。 在 /etc/ldap/tls 中找到的证书,但我们错误地查看了 /etc/ssl/private
在客户端将 ca_cert.pem 从 /etc/ldap/tls 导入到 cacerts 后工作。