我有一个在 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。