viernes, 14 de agosto de 2015

Recodificar claves MD5

Semanas atrás estaba trabajando en la migración de casillas de correo a un servidor nuevo basado en ZIMBRA.  Se quiere que los usuarios autentiquen en el nuevo sistema con sus passwords actuales. Las passwords actuales están encriptadas con el algoritmo MD5, almacenadas en una base de datos MySQL. En Zimbra se utiliza "autenticación interna", las claves se almacenan en OpenLDAP (atributo userpassword).

Zimbra encripta las passwords con el  algoritmo SSHA, pero admite passwords con otros algoritmos. Queriendo migrar las password de un sistema a otro, nos encontramos que era necesario recodificar las passwords almacenadas en la base datos, para que pudieran ser utilizadas con exito. OpenLDAP almacena las passwords en un formato binario, codificado en base64. Aquí se discute esto, con ejemplos en PHP. Y en este mensaje de una lista de OpenLDAP encontramos la razón de nuestro problema y un script de conversión.Copio acá el script:

#-------------------------------------------#
#!/usr/bin/perl
use MIME::Base64;
use strict;
my @md5 = split "",$ARGV[0];
my @res;
for (my $i = 0 ; $i < 32 ; $i+=2)
{
my $c = (((hex $md5[$i]) << 4) % 255) | (hex $md5[$i+1]);
$res[$i/2] = chr $c;
}
print "{MD5}".encode_base64(join "", @res);
#-------------------------------------------#
 

Cambiar la contraseña encryptada en Zimbra

Solo nos resta cambiar en la cuenta de zimbra la contraseña y poner la que acabamos de recodificar. Esto se hace desde linea de comandos, corriendo zmprov con el usuario zimbra:

zmprov ma usuario@dominio userPassword 'X03MO1qnZdYdgyfeuILPmQ==' 

Otras aplicaciones

Esta información puede servir para migrar otras aplicaciones que utilizan MySQL (mediante PAM) para autenticar usuarios.

No hay comentarios:

Publicar un comentario