Назад | Перейти на главную страницу

Аутентификация Apache по LDAP не работает для паролей с умляутами

При аутентификации по LDAP (Active Directory, Server 2008) с сервера Apache я получаю следующее сообщение в журнале ошибок:

authentication failure for "/": Password Mismatch

Это происходит только тогда, когда пароль содержит немецкие умляуты (ä, ö, ü). После изменения пароля или попытки использовать другую учетную запись без умляутов в пароле аутентификация работает нормально.

Вот моя конфигурация:

AuthType Basic
AuthzLDAPAuthoritative off
AuthLDAPURL "ldap://[SERVER]:3268/DC=[DOMAIN]?sAMAccountName?sub?(objectClass=user)"
AuthLDAPBindDN       "user"
AuthLDAPBindPassword "pass"
require valid-user

Я использую Apache2 (2.2.16-6 + squeeze1) под Debian (2.6.26-2-686). Самое смешное, что указанная выше конфигурация работала до вчерашнего дня (даже для паролей с умляутами), и я ее не трогал (клянусь ;-)). Я уже нашел других людей с той же проблемой, но без решения.

Есть ли у кого-нибудь идеи, как решить проблему или просто, что делать дальше, возможно, выявить ошибочный модуль?

С уважением, Стефан

Похоже, что где-то происходит проблема с кодировкой. Не могу сказать, где это, но могу подсказать, как его найти.

Насколько я понимаю, есть 5 мест, где кодировка могла неправильно обрабатываться или интерпретироваться. Эти:

  1. Браузер превращает символы в байты для отправки на веб-сервер
  2. Apache понимает эти байты для создания строки пароля
  3. Apache + OpenLDAP превращает строку пароля в байты для отправки на сервер LDAP
  4. Active Directory превращает байты в запросе привязки LDAP во что-то, что можно сравнить с его базой данных паролей
  5. Active Directory превращает символы в байты при установке пароля пользователя

Предполагая, что вы можете войти в Windows как пользователь, тогда мы знаем, что №5 не ваша проблема. Что вам нужно сделать, так это определить, на каком этапе пути возникает ваша проблема. Я догадываюсь, что это шаг 2 или 3, но я не могу быть уверен.

Во-первых, убедитесь, что вы либо не используете https для связи с веб-сервером, либо не используете ldaps для связи с сервером LDAP. (Возможно, вы не захотите этого для производства, но это облегчит жизнь). Теперь используйте wirehark для прослушивания трафика для двух ветвей, браузер -> Apache и Apache -> AD. Вы видите там правильную информацию?

Затем установите уровень журнала в Apache для отладки и посмотрите, что там напечатано. Это не покажет вам пароль, но на уровне отладки он должен показать вам другую информацию, такую ​​как имя пользователя. Если вы используете поддельное имя пользователя, содержащее акценты, правильно ли они отображаются?

После того, как вы определили шаг, который нарушает кодировку, вы примерно на 90% знаете, как это исправить!