Обновление зашифрованного пароля LDAP через JNDI

Мне нужно несколько советов, как обновить зашифрованный пароль в LDAP (OpenLDAP) пользователя в дереве LDAP. Пароли на сервере LDAP имеют префикс {crypt}, что, я полагаю, указывает на то, что он зашифрован (с помощью DES?)

Мне нужно написать метод, который обновляет пароли пользователя. Как правильно это сделать? Нужно ли мне самому добавлять к строке префикс {crypt}? Как зашифровать пароль для {crypt}?

ОБНОВИТЬ:

Просто чтобы уточнить, что мне нужно, это код Java для шифрования атрибута, чтобы он работал с {crypt}. Я также не знаю, должен ли я сам добавлять к атрибуту префикс строки {crypt}.


person jbx    schedule 05.07.2011    source источник


Ответы (2)


Нет, вам просто нужно обновить атрибут, как и любой другой атрибут, но помня, что, в отличие от большинства атрибутов, это byte[], а не String.

Существует также ExtendedOperation для изменения пароля в связи с черновиком политики паролей IETF, но вы не упомянули, что используете это.

person user207421    schedule 05.07.2011
comment
Если я обновлю атрибут, он будет сохранен в виде незашифрованного текста. Как сделать, чтобы он был зашифрован? - person jbx; 05.07.2011
comment
Он должен храниться так же, как в настоящее время хранится на сервере. Возможно, вам придется добавить ;binary к имени атрибута. Я сейчас далеко от своего исходного кода, но я еще раз взгляну на это завтра. - person user207421; 05.07.2011
comment
Я не думаю, что вы поняли вопрос. Я спрашиваю, как зашифровать строку перед сохранением атрибута. - person jbx; 05.07.2011
comment
@jbx Я все понял, у меня есть код, который это делает, и он ничего не шифрует. Он также не имеет префикса {crypt}. Насколько я понимаю, уровень JNDI позаботится об этом за вас. Все, что он делает, это attrs.put(userPassword, newPassword1.getBytes()); Я также понимаю, что если атрибут правильно определен, либо уровень JNDI, либо сам сервер выполняет шифрование. Мой точно знает. - person user207421; 06.07.2011
comment
Спасибо за ответ. Я до сих пор не очень уверен, что это так. Помимо CRYPT, могут быть даже разные шифрования (MD5, SHA1 и т.д.), поэтому я сомневаюсь, что OpenLDAP делает это автоматически. Если шифрование не выполняется на стороне клиента, вы также рискуете передать пароль в незашифрованном виде по сети. Я также нашел это, которое, кажется, указывает на эту гипотезу «как указать алгоритм хеширования при обновлении ldap через java»> stackoverflow.com/questions/2639167/. Поэтому мне просто нужно знать, как сгенерировать пароль CRYPT. - person jbx; 09.07.2011
comment
@jbx Несомненно, между JNDI и OpenLDAP кто-то делает это автоматически, потому что кто-то шифрует пароли, и в моем коде этого точно нет. - person user207421; 10.07.2011
comment
Я говорю об атрибуте userPassword. - person user207421; 11.07.2011
comment
@jbx, и мой следующий вопрос: почему вы вообще используете {crypt}? См. openldap.org/faq/data/cache/348.html. Не рекомендуется. Я могу заверить вас, что пароли {MD5} не передаются в открытом виде. Я только что понюхал. И у меня нет кода для их хеширования. - person user207421; 13.07.2011
comment
@EJP хорошо, я просто использую {crypt}, потому что 60 000 записей на сервере LDAP используют {crypt}, и я просто хочу избежать введения других неизвестных. - person jbx; 14.07.2011
comment
@jbx веская причина! Тем не менее, смысл остается, JNDI явно делает это в случае {SHA1}. Я предлагаю вам понюхать трафик. - person user207421; 15.07.2011

В некоторых случаях использование предварительно закодированного пароля может помешать серверу каталогов принудительно выполнить проверку качества пароля.

person Terry Gardner    schedule 05.07.2011