OpenDJ: pre-encoded passwords en ldapmodify

OpenDJ, por defecto, no permite modificar la contraseña de los usuarios del directorio enviandola cifrada (pre-encoded form). A no ser que modifiquemos la opción que vamos a ver a continuación, la contraseña siempre se ha de enviar en claro y será OpenDJ quien la procesará y almacenará cifrada en el directorio.

El ejemplo práctico es el siguiente: intentamos hacer un ldapmodify de la contraseña de usuario y en lugar de enviarla en claro la enviamos cifrada (SSHA):

# bin/ldapmodify -p 389 -D "CN=Directory Manager"
Password for user 'CN=Directory Manager':
dn: uid=user.9,ou=People,o=test
changetype: modify
replace: userPassword
userPassword: {SSHA}jCUeOLzfmyszzNdZCu727QP/P4ma39kHmLQBZA==

Processing MODIFY request for uid=user.9,ou=People,o=test
MODIFY operation failed
Result Code:  19 (Constraint Violation)
Additional Information:  User passwords may not be provided in pre-encoded form

El error es claro: Additional Information: User passwords may not be provided in pre-encoded form.

La propiedad de configuración que permite modificar este parámeetro es allow-pre-encoded-passwords. Con dsconfig podemos ver que el valor por defecto es false. Tened en cuenta que en este caso revisamos la política de contraseñas por defecto. Si creáis vuestra propia política el valor debería consultarse ahí.

# bin/dsconfig -h localhost \
 -p 4444 -D "cn=Directory Manager" \
 get-password-policy-prop \
 --policy-name "Default Password Policy" \
 --advanced | grep allow-pre-encoded-passwords

Password for user 'cn=Directory Manager':
allow-pre-encoded-passwords               : false

Para modificar el parámetro de la política de contraseñas a «true» ejecutamos el siguiente comando.

# bin/dsconfig -h localhost \
 -p 4444 -D "cn=Directory Manager" \
 set-password-policy-prop \
 --policy-name "Default Password Policy" \
 --set allow-pre-encoded-passwords:true \
 -X -n --Trustall -w XXXXXX

Y si volvemos a ejecutar el ldapmodify ya podemos enviar el password cifrado:

# bin/ldapmodify -p 389 -D "CN=Directory Manager"
Password for user 'CN=Directory Manager':
dn: uid=user.9,ou=People,o=test
changetype: modify
replace: userPassword
userPassword: {SSHA}jCUeOLzfmyszzNdZCu727QP/P4ma39kHmLQBZA==

Processing MODIFY request for uid=user.9,ou=People,o=test
MODIFY operation successful for DN uid=user.9,ou=People,o=test