Ldap

Tomcat 9 上的 LDAP 簡單身份驗證

  • August 4, 2021

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

引用自:https://serverfault.com/questions/1059734