Page 1 sur 1

Modifier password LDAP unicodePwd - ldap_mod_replace(): Modify: Server is unwilling to perform

Posté : 24 juil. 2019, 12:06
par FlorentK
Bonjour,

Je souhaite pouvoir créer un utilisateur AD depuis une page PHP.

Pas de problème pour la création de l'utilisateur avec tous ces champs hormis son mot de passe. Je n'arrive pas à initier ou changer son mot de passe et j'ai un retour "ldap_mod_replace(): Modify: Server is unwilling to perform".

Voici mon code :
$basedn = "ou=Utilisateurs,dc=mon_domaine";
$ds = ldap_connect("ldaps://xxx") or die("Impossible de se connecter au serveur LDAP $ds");  
$r=ldap_bind($ds,"mon_admin@mon_domaine","mon_pwd");     

$info['description']  = "ma_description";
ldap_add($ldapconn, $dn, $info);                              => Ca fonctionne

$info["userPassword"] = "un_pwd";
ldap_modify($ldapconn, $dn, $info);                     => Ca fonctionne pas

$info['unicodepwd'] = "un_pwd";  
ldap_mod_replace($ldapconn, $dn, $info);            => Ca fonctionne pas non plus

$pwdtxt = "un_pwd";
$newPassword = '"' . $pwdtxt . '"';
$newPass = iconv( 'UTF-8', 'UTF-16LE', $newPassword );
$info["unicodepwd"] = $newPassw;
ldap_mod_replace($ldapconn, $dn, $info);          => Ca fonctionne pas non plus

Mon serveur AD est un Windows 2012R2 (de prod) à jour et j'utilise un serveur Debian pour la partie Web PHP (en test).

J'ai beau essayer toutes les solutions qui semblent fonctionner, mais j'ai l'impression que ça c'était avant Windows 2012 #-o et que maintenant ya plus moyen.

Du coup, je tourne en rond |*() et mon site ne me sert à rien, si je dois changer manuellement le mot de passe :non: .

Je suis donc preneur de toute idée, même s'il faut exécuter des scripts PS, batchs, ... mais de façon automatique à partir du site.

Merci à vous.
Florent

Re: Modifier password LDAP unicodePwd - ldap_mod_replace(): Modify: Server is unwilling to perform

Posté : 24 juil. 2019, 13:43
par @rthur
A priori, je ne vois pas de problème avec ton code.
Essaye de voir dans les logs du serveur LDAP pourquoi il refuse la modification.

Une autre piste (qui théoriquement fait la même chose que iconv( 'UTF-8', 'UTF-16LE') à tester avec un mot de passe sans caractères spéciaux, au moins pour voir si ça fonctionne) :
https://stackoverflow.com/questions/107 ... lling-to-p

Re: Modifier password LDAP unicodePwd - ldap_mod_replace(): Modify: Server is unwilling to perform

Posté : 29 juil. 2019, 18:03
par FlorentK
Bonjour,
Alors j'ai essayé, mais toujours le même pb.
Je me demande si ce n'est pas un pb avec les certificats.

J'ai essayé 2 cas, qui au final ne semblent pas fonctionner :

1/ Le serveur Debian fait office d'Autorité de Certification :
Il signe une requête de mon serveur AD LDAP.
=> J'ai donc un certificat signé "AD_signé_par_Debian.cer" et un Certificat root "CA_Debian.cer"

2/ J'utilise un autre serveur Windows qui est déjà Autorité de Certification :
Il signe une requête de mon serveur AD LDAP.
=> J'ai donc un certificat signé "AD_signé_par_WinCA.cer" et un Certificat root "CA_WinCA.cer"

J'ai ensuite copié ces fichiers dans "/etc/ssl/certs".

J'ai ensuite modifié "/etc/ldap/ldap.conf" :
#TLS_REQCERT never          // => fonctionne toujours avec un ldap ou ldaps, mais en php, seul le ldap répond, pas le ldaps.
TLS_REQCERT hard                        // => Comme cela je force l'utilisation du certificat
TLS_CACERT       /etc/ssl/certs/CA_WinCA.cer
Je relance Apache .

Pour tester, je fais un :
ldapsearch -x -H ldaps://mon_serveur_AD.mon_domaine cn="un_user" -D CN="un_admin",OU=mon_ou_domaine -w mon_pwd -b dc=mon_domaine
et en TLS_REQCERT never, cela fonctionne, mais pas en hard : "ldap_sasl_bind(SIMPLE): Can't contact LDAP server (-1)".

Du coup, si je n'arrive déjà pas à faire fonctionner ici, je n'y arriverais pas non plus en PHP.

J'ai un doute au niveau des noms des certificats. Faut il aussi que je les chaine ?
D'ailleurs je ne sais pas si c'est case sensitive ou pas, et si le nom du fichier importe ou pas.
Est ce qu'il faut utiliser un .cer ou un .crt (qui sous windows sont différents) ?

Merci à vous.
Florent

Re: Modifier password LDAP unicodePwd - ldap_mod_replace(): Modify: Server is unwilling to perform

Posté : 29 juil. 2019, 18:43
par @rthur
D'après moi le message d'erreur "Modify: Server is unwilling to perform" signifie que c'est le serveur LDAP qui a répondu donc la connexion fonctionne.
Si c'était un problème de certificat, tu aurais un message de timeout ou relatif à la connexion. Par ailleurs si tu arrives à créer un utilisateur (ce que tu indiquais dans ton 1er message) c'est que la connexion SSL est ok.

Tu as quoi dans les logs du serveur LDAP ?

Re: Modifier password LDAP unicodePwd - ldap_mod_replace(): Modify: Server is unwilling to perform

Posté : 30 juil. 2019, 10:20
par FlorentK
Bonjour,

En fait, je pense qu'effectivement c'est un problème d'accès au ldaps:

Dans mon code php :
$ds = ldap_connect("ldaps://xxx")  // => cela renvoi l'erreur : "ldap_Bind():Unable to bind to server: Can't contact LDAP server" 
                                                                             //  le compte n'est même pas créé !!
Si j'utilise maintenant juste le ldap :
$ds = ldap_connect("ldap://xxx")    // => le compte se créé bien, mais lors de la modification du mot de passe, 
                          //     j'ai l'erreur : "ldap_mod_replace(): Modify: Server is unwilling to perfom in..."  

J'ai essayé de mettre la ligne suivante
   putenv('TLS_REQCERT=never');
mais cela ne change rien.

En revanche, si en ligne de commande, j'utilise le "ldap_search", cela fonctionne bien pour "ldaps" et "ldap".

Je précise que dans "ldap.conf", j'ai :
TLS_REQCERT hard
TLS_CACERT   /etc/ldap/ssl/AD_signé_par_Debian.cer    //mais ça marche aussi avec le Certificat root "CA_Debian.cer"


Mon problème devient plutôt "comment me connecter en ldaps sur mon serveur Windows AD".


J'ai un peu l'impression que plus j'avance et plus je recule :cry:

Re: Modifier password LDAP unicodePwd - ldap_mod_replace(): Modify: Server is unwilling to perform

Posté : 26 sept. 2019, 16:55
par neilovich2
Bonjour,
j'ai le même problème que toi,
as tu trouvé une solution.
Cdt,

Re: Modifier password LDAP unicodePwd - ldap_mod_replace(): Modify: Server is unwilling to perform

Posté : 26 sept. 2019, 17:47
par FlorentK
Bonjour,
Non toujours pas, du coup, mon serveur PHP ne me sert à rien pour l'instant, c'est justement pour éviter de créer manuellement un compte.
Du coup, je vais surement m'orienter vers une écriture dans un fichier. Puis à partir du serveur DC, je vais lire ce fichier par tache planifiée et créer le compte (genre en PS,..). Mais c'est pas classe...
Si tu as une piste, je suis preneur évidemment ;-)

Re: Modifier password LDAP unicodePwd - ldap_mod_replace(): Modify: Server is unwilling to perform

Posté : 27 sept. 2019, 08:23
par neilovich2
Pas de problème,

j'ai egalement fait cela,
un script powershell.
Je te tiens au courant.
Cdt,