简单身份验证:
使用LDAP浏览器时,我可以使用纯文本密码登录公司的LDAP服务器,提供:CN = username,OU = users,DC = my,DC = company,DC = com。如果我将此字符串复制粘贴到Tomcat的server.xml connectionName标记,并使用简单身份验证(使用wireshark可以看到纯文本密码),一切正常。
加密密码:
到server.xml JNDI领域我添加了以下内容
authentication="DIGEST-MD5"
digest='MD5'
现在,Tomcat无法绑定到LDAP。
使用LDAP浏览器,我必须提供以下形式的凭据:domain / user,然后我可以使用DIGEST-MD5绑定到LDAP。
是否有一种特殊的方法在server.xml文件中指定connectionName,以便Tomcat可以成功执行绑定?
答案 0 :(得分:0)
您没有提到您使用的目录服务器。可能是您的服务器根本不支持DIGEST-MD5。您可以通过检查supportedSASLMechanisms RootDSE值来检查它。
如果您使用Active Directory,请确保1)您已创建SPN(有关详细信息,请参阅setspn.exe)2)用于连接到AD的用户帐户设置为“use reversible encryption”用户帐户标记。没有这个选项它将永远不会工作,因为DIGEST-MD5算法需要访问两端的明文密码。
答案 1 :(得分:0)
根据tomcat文档,JNDIRealm支持两种不同的身份验证方法:绑定模式和比较模式。
您正在使用“绑定模式”,文档说:“出于安全原因,目录可能存储用户密码的摘要而不是明文版本(有关详细信息,请参阅消化密码)。在这种情况下,作为简单绑定操作的一部分,目录会自动计算用户提供的明文密码的正确摘要,然后再根据存储的值进行验证。因此,在绑定模式下,域不参与摘要处理。不使用摘要属性,如果设置将被忽略。“。因此,您不能将哈希值与“绑定模式”一起使用。
使用“比较模式”,你可以做你想做的事情,但不建议使用“比较模式”,因为出于安全原因,可以在这里看到:“比较模式有一些缺点。首先,必须配置connectionName和connectionPassword属性以允许领域读取目录中的用户密码。出于安全原因,这通常是不合需要的;实际上许多目录实现甚至不允许目录管理器读取这些密码。此外,领域必须处理密码摘要本身,包括所用算法的变化以及在目录中表示密码哈希的方式。但是,领域有时可能需要访问存储的密码,例如支持HTTP摘要访问身份验证(RFC 2069)。 HTTP摘要认证与存储库中用于用户信息的密码摘要的存储不同,如上所述。“
tomcat文档的链接:http://tomcat.apache.org/tomcat-6.0-doc/realm-howto.html#JNDIRealm和http://tomcat.apache.org/tomcat-7.0-doc/realm-howto.html#JNDIRealm