Tomcat 9 上的 LDAP 简单身份验证

Tomcat 9 上的 LDAP 简单身份验证

我有一个在 Tomcat 9 上运行的 Web 应用程序,并使用 LDAPS 进行用户身份验证。当我通过 LDAP(非安全)连接时,身份验证成功,但当我切换到 LDAPS(安全)时,我收到“PenLdapLookupModule:查找期间身份验证错误。请检查用于登录 LDAP 的用户名和密码”错误。然而,我在应用程序中使用的是未加密的相同用户名和密码。

Tomcat 配置(Server.xml)

<Realm  className="org.apache.catalina.realm.JNDIRealm"
    debug="99"
    connectionURL="ldaps://ldapservername:636"
    authentication="simple"
    connectionName="<username>"
    connectionPassword="<password>"
    userSearch="(sAMAccountName={0})"
    userBase="dc=com"
    userSubtree="true"
    userRoleName="memberOf"
    roleBase="ou=Global Security Groups,ou=Security Groups,ou=Domain Groups,dc=directory,dc=com"
    roleSearch="(member={0})"
    roleSubtree="true"
    roleName="cn"
/>

应用程序 LDAP 配置

setconfig ldap.ssl.trustStore.type "JKS"
setconfig ldap.ssl.trustStore.location "ldapsKeystorename.jks"
setconfig ldap.ssl.trustStore.password "<Keystorepassword>"

日志

错误 [LookupRefresh](PenLdapLookupModule)-PenLdapLookupModule:查找期间进行身份验证时出错。
请检查用于登录 LDAP 的用户名和密码。
如果启用了加密,则如果应用程序软件发生了更改,则可能需要重置密码(为其纯文本值)。

com.paisley.core.FaultException:故障——详情如下

查找过程中身份验证错误。请检查用户名和
用于登录 LDAP 的密码。如果启用了加密,您可能需要
如果应用程序软件有
已改变。
线程名称:LookupRefresh - 0x2b
发生时间:4/8/21 12:25:01 PM SAST
会话客户端 ID:                      
团队名字:                             
客户ID:com.paisley.foundation.client.ClientID@8e812e86-client001
模块名称:PenLdapLookupModule

        在 com.paisley.rnj.security.lookup.PenLdapLookupModule.lookup(PenLdapLookupModule.java:162)
        在 com.paisley.rnj.security.service.LookupServiceBean.performLookup(LookupServiceBean.java:720)
        在 com.paisley.rnj.security.service.LookupServiceBean.refresh(LookupServiceBean.java:471)
        在 sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)
        在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:90)
        在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:55)
        在 java.lang.reflect.Method.invoke(Method.java:508)
        在 com.paisley.foundation.reflect.ReflectorToolkit.callMethod(ReflectorToolkit.java:1345)
        在 com.paisley.foundation.database.transaction.ServiceTransactionInjector.callRealServiceMethod(ServiceTransactionInjector.java:336)
        在 com.paisley.foundation.database.transaction.ServiceTransactionInjector.invoke(ServiceTransactionInjector.java:178)
        在 com.sun.proxy.$Proxy38.refresh(未知来源)
        在 com.paisley.rnj.security.lookup.work.LookupInitializeWork.execute(LookupInitializeWork.java:86)
        在 com.paisley.rnj.security.lookup.thread.LookupRefreshBackgroundTask.execute(LookupRefreshBackgroundTask.java:94)
        在 com.paisley.foundation.background.BackgroundThread.run(BackgroundThread.java:141)

答案1

抱歉,我暂时停止了这篇文章的创作。本周又开始了

问题原因:最新的 Java 运行时环境默认禁用 SSLv3。因此我的应用程序正在使用 SSLv3,这就是它无法在 LDAPS 上进行身份验证的原因。按照下面推荐的步骤操作也不起作用

  • 在文本编辑器中打开 {JRE_HOME}\lib\security\java.security 文件。
  • 删除或注释掉以下行“jdk.tls.disabledAlgorithms=SSLv3”

解决方案:我不得不改用 Amazon Corretto 8 JDK,这解决了这个问题。我还必须从 java.security 文件中的“jdk.tls.disabledAlgorithms”中删除 SSLv3。

相关内容