【问题标题】:Tomcat 6 - authentication through active directory with encrypted passwordTomcat 6 - 通过使用加密密码的活动目录进行身份验证
【发布时间】:2013-09-09 10:36:37
【问题描述】:

我正在尝试使用活动目录用户连接到 tomcat。 当密码为纯文本时,如下所示:

<Realm className="org.apache.catalina.realm.JNDIRealm"   
connectionURL="ldap://localhost:389"     
connectionName="user_name" 
connectionPassword="password"       
userBase="OU=blabla,DC=aaa,DC=com"       
userSubtree="true"      
userSearch="(sAMAccountName={0})"   
userRoleName="memberOf" 
roleBase="OU=blabla,DC=aaa,DC=com"   
roleName="cn"    
roleSubtree="true"         
roleSearch="(member={0})"        />

身份验证正常。但是,我不想在我的配置文件中输入密码。

我尝试了以下方法:

<Realm className="org.apache.catalina.realm.JNDIRealm"   
connectionURL="ldap://localhost:389"    
digest="MD5" 
connectionName="user_name"  
connectionPassword="encrypted_password"        
userBase="OU=blabla,DC=aaa,DC=com"       
userSubtree="true"      
userSearch="(sAMAccountName={0})"  
userRoleName="memberOf"
roleBase="OU=blabla,DC=aaa,DC=com"   
roleName="cn"   
roleSubtree="true"       
roleSearch="(member={0})"        /> 

但身份验证失败。
我没有找到任何解决方案。 我将非常感谢任何帮助

谢谢你

【问题讨论】:

标签: authentication tomcat encryption active-directory digest


【解决方案1】:

我认为您唯一的选择是继承 JNDIRealm 并创建一个具有某种加密连接密码的新属性。不能对密码进行哈希处理(例如使用您指定的 MD5),因为哈希是单向的 - 无法撤消哈希 - 并且 Tomcat 需要原始未哈希形式的密码才能针对 AD 安装进行身份验证。

如果您在 JNDIRealm 子类中使用可逆加密,那么当 Tomcat 需要密码时,您可以解密密码并传递。

【讨论】:

  • 我按照你的建议做了。我创建了一个覆盖 getConnectionPassword 的 JNDIrealm 子类。它获取加密的密码并对其进行解密。我现在可以连接了。但是现在,事情发生了变化,当我尝试使用用户登录时,身份验证失败。我检查了源代码,我没有看到 getConnectionPassword 和 getUserPassword 之间的连接。我真的很感谢你的帮助。我无法使用用户登录
  • 没有看到具体的设置我不知道我能提供多少帮助...例如我不知道具体的 AD 配置...但我有时会说像这样,我喜欢拉出 Wireshark 并查看 Tomcat 和 AD 服务器之间的通信(或尝试),看看实际发生了什么。试试看,也许?另外,尝试将adCompat="true" 添加到 Realm 配置中......它对于 Active Directory 与其他 LDAP 的行为略有不同。
猜你喜欢
  • 2015-12-28
  • 2022-12-16
  • 1970-01-01
  • 1970-01-01
  • 2014-05-30
  • 2020-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多