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

Как добавить уже зашифрованный пароль в openldap

Мне нужно перенести устаревшие данные Mysql, подобные каталогам, в новую базу данных ldap. Никаких хлопот, кроме паролей. Они хранятся как sha1 в базе данных Mysql (я проверил, что могу сгенерировать их, набрав "echo -n "cleartextpassword" | openssl dgst -sha1").

Проблема в том, что я не могу импортировать их на наш сервер openldap.

Боюсь, здесь может быть 2 проблемы.

Во-первых, проблема шифрования / кодирования: можно ли вообще использовать эту кодировку sha1 как таковую в ldap?

Проблема интерфейса: когда я использую ldapadd или ldapmodify ввести / обновить userPassword поле данные, представленные в файле ldif, повторно зашифровываются. Можно ли как-то обойти эту проблему?

заранее спасибо

Наконец-то я получил это после множества испытаний.

У меня есть строки sha1, так называемые шестнадцатеричные дайджесты. Чтобы поместить их в openldap, мне сначала нужно преобразовать их обратно в двоичный дайджест sha1, а затем их закодировать в base64.

В командной строке это можно сделать с помощью:

echo -n "sha1-hex-digest" | xxd -r -p | openssl enc -base64

Затем получившуюся строку нужно вставить в файл ldif следующим образом:

userPassword: {SHA}base-64-blurb

Для заинтересованных это можно сделать на Python следующим образом:

import base64
import binascii

sha1_pwd = "your-sha1-hex-digest-here"
ldap_pwd = base64.b64encode(binascii.unhexlify(sha1_pwd)).decode('utf-8')
print("userPassword: {SHA}%s" % ldap_pwd)