Como adicionar senha já criptografada ao openldap

2

Eu preciso migrar os dados herdados do Mysql para um novo banco de dados do ldap. Não há muito trabalho, exceto pelas senhas. Eles são armazenados como sha1 no banco de dados Mysql (verifiquei que posso gerá-los digitando " echo -n "cleartextpassword" | openssl dgst -sha1 ").

O problema é que não consigo importá-los no nosso servidor openldap.

Eu receio que haja 2 problemas aqui.

Primeiro, um problema de codificação / codificação: esta codificação sha1 é utilizável como tal no ldap?

Um problema de interface: quando eu uso ldapadd ou ldapmodify para inserir / atualizar o campo userPassword , os dados fornecidos no arquivo ldif são criptografados novamente. É possível de alguma forma contornar esse problema?

Obrigado antecipadamente

    
por phep 11.05.2017 / 15:43

1 resposta

4

Eu finalmente consegui, depois de muitas tentativas.

As sequências sha1 que tenho são chamadas de digestão hexadecimal. Para obtê-los no openldap, primeiro preciso convertê-los de volta para o resumo binário sha1 e, em seguida, base64 para codificá-los.

Na linha de comando, pode-se fazer isso com:

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

Em seguida, a string resultante deve ser inserida no arquivo ldif dessa maneira:

userPassword: {SHA}base-64-blurb

Para os interessados, isso pode ser feito em 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)
    
por 11.05.2017 / 16:42