У меня есть установка с сервером 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: При попытке войти на сервер ldap с помощью клиента (скажем, jexplorer) я могу войти, используя как хешированный пароль, так и обычный текст «секрет». Как это возможно?
В этом случае, если кто-то узнает AuthLDAPBindDN и AuthLDAPBindPassword, которые в моем случае являются хешированными, они смогут войти, используя то же самое, на сервер LDAP с полным доступом, что представляет угрозу безопасности.
Также хочу заменить пароль в spring.xml на хешированный. Поскольку администратор может изменить пароль LDAP, как мне убедиться, что мое приложение использует обновленный хешированный пароль, поскольку мы жестко закодировали его в spring.xml?