Мне нужно перенести устаревшие данные 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)