LDAP over TLS 与 Spring 框架

问题描述

我们开发了一个 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 后工作。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...