SSHA (o traducido SHA1 con un poco de sal) es el método que utiliza Zimbra para cifrar las contraseñas de usuario.
A cada usuario dentro del árbol LDAP "ou=people,dc=miempresa,dc=com" se le añade un subschema o un objeto llamado "zimbraAccount" este subschema, también conocida como una objectClass, contiene más atributos pertenecientes al usuario. Entre estos atributos está el userPassword.
Veamos esta objectClass:
# cd /opt/zimbra/openldap/bin # ./ldapsearch -H ldap://zimbra.miempresa.com -x -b "uid=amperis,ou=people,dc=miempresa,dc=com" # extended LDIF # # LDAPv3 # basewith scope subtree # filter: (objectclass=*) # requesting: ALL # # amperis, people, miempresa.com dn: uid=amperis,ou=people,dc=miempresa,dc=com zimbraMailTransport: lmtp:zimbra.miempresa.com:7025 zimbraMailDeliveryAddress: amperis@miempresa.com sn: Alejandro Moreno zimbraMailStatus: enabled zimbraId: 4ab82437-ff86-45f8-bbd0-76508e7527e4 mail: amperis@miempresa.com displayName: Alejandro Moreno uid: amperis objectClass: organizationalPerson objectClass: zimbraAccount objectClass: amavisAccount cn: Alejandro Moreno zimbraMailHost: zimbra.miempresa.com # search result search: 2 result: 0 Success # numResponses: 2 # numEntries: 1
Veamos ahora el contenido de la objectClass para el usuario “amperis@miempresa.com":
# su - zimbra # zmlocalconfig -s zimbra_ldap_password zimbra_ldap_password = asdfghjklñ # exit # ./ldapsearch -H ldap://zimbra.miempresa.com -w asdfghjklñ -D "uid=zimbra,cn=admins,cn=zimbra" -x "(&(objectClass=zimbraAccount) (mail=amperis@miempresa.com))" # extended LDIF # # LDAPv3 # base <> with scope subtree # filter: (&(objectClass=zimbraAccount)(mail=amperis@miempresa.com)) # requesting: ALL # # amperis, people, miempresa.com dn: uid=amperis,ou=people,dc=miempresa,dc=com zimbraMailTransport: lmtp:zimbra.miempresa.com:7025 zimbraAccountStatus: active zimbraMailDeliveryAddress: amperis@miempresa.com sn: Alejandro Moreno zimbraMailStatus: enabled zimbraId: 4ab82437-ff86-45f8-bbd0-76508e7527e4 mail: amperis@miempresa.com displayName: Alejandro Moreno uid: amperis objectClass: organizationalPerson objectClass: zimbraAccount objectClass: amavisAccount cn: Alejandro Moreno zimbraMailHost: zimbra.miempresa.com zimbraLastLogonTimestamp: 20090126085702Z userPassword:: e1NTSEF9ajJrc3JGUGNkck9ZMVNJUHdQY2pBSXR1REw4aHlSbEE= zimbraPasswordModifiedTime: 20090127170140Z # search result search: 2 result: 0 Success # numResponses: 2 # numEntries: 1
Podéis ver el resultado de "userPassword=e1NTSEF9ajJrc3JGUGNkck9ZMVNJUHdQY2pBSXR1REw4aHlSbEE=". Esto no es la password encriptada, sino la password codificada en Base64.
Si decodificamos la Base64 tenemos:
decodeBase64(e1NTSEF9ajJrc3JGUGNkck9ZMVNJUHdQY2pBSXR1REw4aHlSbEE=) = {SSHA}j2ksrFPcdrOY1SIPwPcj8ItuDL8hyRlA
Por tanto el userPassword es "j2ksrFPcdrOY1SIPwPcj8ItuDL8hyRlA" y está hasheado con el algoritmo SSHA. OpenLDAP proporciona varios métodos para cifrar la información: MD5, SHA1, SSHA, CRYPTO, etc.
El algoritmo SSHA (salted-SHA) se basa en SHA1 añadiendo un token o salt al password del usuario.
userPassword = SHA1(password_usuario + token)
¿alguien se anima a bajarse los fuentes de Zimbra y decirme cual es este token?
2 comentarios:
Hola Alejandro saludos desde panama
me gustaria hacerte una pregunta referente a la manera que Zimbra se puede pegar a un Ldap Externo
tengo lo siguiente
1- ClearOS (es un centos ya preconfigurado el cual trae diferentes servicios entre ellos openldap)
2 - dentro de Clearos Instale Zimbra y esta funcionando correctamente
la pregunta es la siguiente como logro pegar el zimbra al openldap del clearos que esta localmente en la misma maquina?
me gustaria saberlo
saludos desde panama
Tenía entendido que el salt es generado aleatoriamente. En las fuentes debe estar el algorítmo, a lo sumo
hacer un comentario en esta entrada