Lorsque je lance le serveur tomcat, j’obtiens l’erreur suivante dans les logs :
org.apache.catalina.rea lm.MessageDigestCredentialHandler.setEncoding The encoding [base64] is not supported so the current setting of [UTF-8] will still be used
J’ai également tenté d’utiliser le parametre hash.pwd=true dans le build.properties (utilisé sur jboss) sans succés.
Est il possible d’encoder les mots de passe en base64 avec Tomcat ? Si oui, quel est la démarche à suivre ?
Dans Simplicité l’algorithme de hashage est MD5 dans tous les cas et depuis toujours.
Ensuite pour stocker en base on l’encode, soit en hexadecimal soit en base 64 et c’est sur ça uniquement qu’influe le param system HASH_PASSWORD.
L’encodage, contrairement au hashage, est réversible, autrement dit il est possible de décoder une chaîne de caractère encodée en hexadécimal et la réencoder en base 64
Si je comprends bien la doc du credential handler de Tomcat 8, il s’attend à trouver en base:
soit un mot de passe encodé en hexadécimal
soit un mot de passe encodé en base 64 avec {MD5} au début
Je pense que le pb est que Simplicité ne met pas ce {MD5} au début sur les chaines encodées en base 64, ça ne posait visiblement pas de pb au Tomcat 5.5 embarqué dans JBoss 4 mais ça doit être bloquant avec Tomcat 8.
verification du mot de passe en base: select usr_password from m_user where usr_login = 'test', résultat = bf3121a518f403c3bdd6ec1ddaf40743 (soit simplicite hashé en MD5 et encodé en hexadecimal)
j’arrive bien à me connecter avec ce user test
mise à jour en bse du mot de passe avec simplicite hashé en MD5 et encodé en base 64 et avec {MD5} au début: update m_user set usr_password = '{MD5}vzEhpRj0A8O91uwd2vQHQw==' where usr_login = 'test'
j’arrive toujours à me connecter avec le user test
Bref il faut bien ajouter {MD5} au début des passwords encodés en base 64 (et on peut avoir à la fois des passwords encodés en hexadécimal et en base 64 en base).
Coté Simplicité on va faire la modif pour que la méthode d’encodage de passwords en base 64 (i.e. quand HASH_PASSWORD = BASE64) ajoute bien ce '{MD5}` au début
La modif est faite. Elle sera livrée dans les prochaines releases de maintenances: 3.0 maintenance 30, 3.1 maintenance 10 et 3.2 maintenance 05
Comme indiqué dans les releases notes draft de ces releases, pour reprendre les passwords encodés en base 64 il suffit de faire cet update en base:
update m_user set usr_password = '{MD5}' || usr_password where usr_password is not null
En attendant la release il faut bien rester en encodage HEX au niveau du HASH_PASSWORD (cela signifie que les éventuels passwords modifiés et/ou nouveaux password seront encodés en hexadécimal, pas de pb le realm Tomcat sait gérer…).
PS: Je profite de cet échange pour rappeler que la version de Tomcat recommandée est désormais la 8.5, en effet la 8.0 est en fin de vie et la 9.0 n’est pas encore assez stable (passer de 8.0 en 8.5 ne pose aucun pb)