【发布时间】:2014-08-07 14:42:33
【问题描述】:
我有一个带有 apache HTTP 服务器前端的 tomcat 服务器的设置。 Apache 服务器使用 LDAP 进行身份验证。
我正在使用嵌入式 LDAP 服务器 (Apache DS),并已配置为使用
禁用匿名绑定service.setAllowAnonymousAccess(false); // Disable Anonymous Access
service.setAccessControlEnabled(true); // Enable basic access control check (allow only System Admin to login to LDAP Server)
我的应用程序使用 Spring LDAP 连接并执行用户操作,例如添加用户。我在spring.xml中配置如下:
<bean id="ldapContextSource" class="org.springframework.ldap.core.support.LdapContextSource">
<property name="url" value="ldap://localhost:389" />
<property name="base" value="dc=test,dc=com" />
<property name="userDn" value="uid=admin,ou=system" />
<property name="password" value="secret" />
</bean>
Apache httpd.conf 配置为使用基本身份验证
AuthLDAPBindDN "uid=admin,ou=system"
AuthLDAPBindPassword "{SHA}<Hash for secret>"
问题 1:尝试使用客户端(例如 jexplorer)登录 ldap 服务器时,我可以使用散列密码和纯文本“秘密”登录。这怎么可能?
在这种情况下,如果有人知道 AuthLDAPBindDN 和 AuthLDAPBindPassword(在我的情况下是散列的),他们将能够使用它们登录到具有完全访问权限的 LDAP 服务器,这是一个安全威胁。
另外,我想用散列的密码替换 spring.xml 中的密码。由于管理员可以更改 LDAP 密码,我如何确保我的应用程序使用更新后的哈希密码,因为我们在 spring.xml 中对其进行了硬编码?
【问题讨论】:
-
发布前请查看预览窗口。 That was a mess!
标签: java apache authentication hash spring-ldap