Ldap
Tomcat 9 上的 LDAP 簡單身份驗證
我有一個在 Tomcat 9 上執行並使用 LDAPS 進行使用者身份驗證的 Web 應用程序。當我通過 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 發生時間:21 年 4 月 8 日下午 12:25:01 SAST 會話客戶端 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(Native Method) 在 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)
抱歉,我暫時停止了這篇文章。這週又開始了
問題原因:最新的 Java 執行時環境預設禁用 SSLv3。所以我的應用程序正在使用 SSLv3,這就是它無法在 LDAPS 上進行身份驗證的原因。遵循以下推薦的步驟也不起作用
- 在文本編輯器中打開 {JRE_HOME}\lib\security\java.security -file。
- 刪除或註釋掉以下行“jdk.tls.disabledAlgorithms=SSLv3”
解決方案:我不得不切換到使用 Amazon Corretto 8 JDK,這解決了問題。我還必須從 java.security 文件的“jdk.tls.disabledAlgorithms”中刪除 SSLv3。