IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques et frameworks PHP Discussion :

[LDAP] Problème de connexion en ldaps via php4


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre à l'essai
    Inscrit en
    Juillet 2003
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 26
    Points : 12
    Points
    12
    Par défaut [LDAP] Problème de connexion en ldaps via php4
    Bonjour

    J'essaye depuis quelques jours de faire dialoguer mon apache-ssl qui héberge une application avec un openldap.

    Serveur apache:
    OS Debian Etch 4.0
    apache-ssl v1.3
    php4

    Serveur ldap:
    OS Debian sarge 3.1
    Openldap v1.130.2.13.2.1


    L'idée est la suivante:
    Mon site est accessible en https. Les utilisateurs s'authentifient par certificat. Cette partie là fonctionne bien.
    Parallèlement, le site accède à des données hébergées sur un autre serveur qui a openldap d'installé. L'accès à ce ldap doit se faire avec SSL/TLS via php4.

    Le problème ici concerne bien le dialogue entre le code php du site et le serveur ldap.

    Des certificats ont été générés et signés par une même autorité de certification pour le serveur LDAP et pour le serveur apache.

    Côté ldap, le fichier slapd.conf contient ces informations:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #Certificat de l'AC
    TLSCACertificateFile /etc/ldap/ssl/cert_CA.cert
    #Certificat du serveur ldap
    TLSCertificateFile /etc/ldap/ssl/cert_mon_ldap.cert
    #Clé privée du serveur ldap
    TLSCertificateKeyFile /etc/ldap/ssl/cert_mon_ldap.key
    #Demande d'un certificat client valide
    TLSVerifyClient demand
    Côté serveur apache-ssl, mon site a le code suivant (en résumé):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $host="ldaps://monserveur.mondomaine.com";
    $ds=ldap_connect($host);
    ldap_set_option($ds,LDAP_OPT_PROTOCOL_VERSION,3);
    $r=@ldap_bind($ds,"cn=admin,o=organisation,c=fr","password" );
    $sr=ldap_search($ds,"o=organisation,c=fr",("objectClass=organizationalUnit" ));
    $info=ldap_get_entries($ds,$sr);
    print $info["count"]." enregistrements trouvés.";
    Le fichier /etc/ldap/ldap.conf du serveur apache (considéré comme client) contient les informations suivantes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    TLS_REQCERT demand
    TLS_CACERT /etc/ssl/cert/cert_CA.cert
    Enfin le fichier .ldaprc qui est dans le répertoire de root (qui lance apache) contient:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    TLS_CERT /etc/ssl/cert/cert_mon_apachessl.cert
    TLS_KEY /etc/ssl/cert/key_mon_apachessl.key

    Quand je fais des tests de connexion sur le port 389, c'est-à-dire que la connexion avec le ldap s'effectue en clair, tout fonctionne bien.

    Mais si je passe en ldaps dans mon code php sur le port 636, ça ne fonctionne plus.

    Côté ldap dans les logs, j'ai alors le message "TLS accept error error=-1".

    Et côté apache, j'ai les erreurs:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    ldap_create
    ldap_url_parse_ext(ldaps://monserveur.mondomaine.com)
    ldap_bind_s
    ldap_simple_bind_s
    ldap_sasl_bind_s
    ldap_sasl_bind
    ldap_send_initial_request
    ldap_new_connection
    ldap_int_open_connection
    ldap_connect_to_host: TCP monserveur.mondomaine.com:636
    ldap_new_socket: 4
    ldap_prepare_socket: 4
    ldap_connect_to_host: Trying <MON_IP>:636
    ldap_connect_timeout: fd: 4 tm: -1 async: 0
    ldap_ndelay_on: 4
    ldap_is_sock_ready: 4
    ldap_ndelay_off: 4
    ldap_int_sasl_open: host=monserveur.mondomaine.com
    TLS: can't connect.
    ldap_err2string
    ldap_err2string

    A noter que le cn du certificat du ldap correspond bien à l'url qui me permet de me connecter au ldap à savoir monserveur.mondomaine.com.

    Par contre, si je lance la commande suivante depuis mon serveur apache, ça fonctionne bien:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dapsearch -x -H "ldaps://monserveur.mondomaine.com:636" -D "cn=admin,o=organisation,c=fr" -W
    Donc en clair, j'ai l'impression que php ne va pas bien lire dans le fichier /etc/ldap/ldap.conf ni dans le fichier /root/.ldaprc

    J'ai fait pas mal de rercherche et voici quelques liens qui pourront en aider certains:
    http://www.arnaudcharlier.be/blog/ [...] l-avec-php
    http://www.openldap.org/pub/ksoper/OpenLDAP_TLS.html
    http://www.openldap.org/lists/open [...] 01023.html



    Est ce que quelqu'un sait comment vérifier si php va bien lire dans le fichier /etc/ldap/ldap.conf et .ldaprc?

    Avez vous des idées pour faire fonctionner cette connexion entre le site php et le ldap?

    La question a été posée plusieurs fois sur le net mais il n'y a pas vraiment de réponse claire qui fonctionne.
    Souvent la solution de facilité est de mettre le paramètre TLSVerifyClient à never mais du coup, même si cela fonctionne, il n'y a plus de sécurité car le serveur ldap autorise toujours la connexion (pas de demande de certificat valide) sans être sûr de l'identité du serveur qui vient se connecter.


    Merci d'avance

  2. #2
    Membre à l'essai
    Inscrit en
    Juillet 2003
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 26
    Points : 12
    Points
    12
    Par défaut
    Avancée du problème:

    J'ai installé le package php4-cli qui est un interpréteur de php.
    L'avantage est qu'il permet d'exéctuer du code php sans passer par Apache.

    J'exécute donc mon script avec la commande:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #/usr/sbin/php monscript.php
    Et là magie...ça fonctionne. Et l'interpréteur lit bien les fichiers ldap.conf et .ldaprc.

    C'est donc lorsque je passe par le navigateur et donc par apache qu'il y a un problème.

    Je vais regarder du côté des variables d'environnement et après des librairies...

    Si jamais certains ont des idées, n'hésitez pas.

  3. #3
    Membre éclairé Avatar de |PaRa-BoL
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 738
    Points : 876
    Points
    876
    Par défaut
    PHP command lines et php en mod apache n'ont pas le même fichier de configuration ni les même lib chargées. Regarde de ce coté là.

    Ps : Tu lances php-cli en root ?

  4. #4
    Membre à l'essai
    Inscrit en
    Juillet 2003
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 26
    Points : 12
    Points
    12
    Par défaut
    Merci pour cette info, cela me servira sûrement plus tard

    Du coup en farfouillant du côté des variables d'environnement, j'ai trouvé le problème.
    Il y a une variable d'environnement non positionnée

    En fait, le fichier qui indique l'emplacement du certificat de l'utilisateur (.ldaprc) doit se trouver dans le home directory du user apache. Mais surtout il faut que apache charge la variable d'environnement $HOME afin que php puisse aller rechercher ce fichier .ldaprc.

    Dans mon cas, le script de démarrage apache positionnait seulement les variables LANG et PATH.
    Lorsque je lançais mon script, php n'arrivait pas à trouver de fichier .ldaprc.
    Lorsqu'il se connectait au ldap, il ne présentait pas de certificat et la connexion était interrompue.

    J'ai donc modifié la ligne suivante dans /etc/init.d/apache:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ENV="env -i LANG=C PATH=/bin:/usr/bin/usr/local/bin HOME=/<home_dir_apache>"
    Et du coup ça fonctionne bien.

    Note: pour que le chargement de la nouvelle variable soit pris en compte, il faut faire un stop/start de apache et non un restart.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Je me permet de remonter ce topic car j'ai le même problème que je n'arrive pas à résoudre malgré toutes l'aides que m'a apporté ces recherches.

    Je suis dans le même cas que toi, j'essaie de me connecter en ldaps sur un serveru LDAP. Malheureusement, je ne suis pas administrateur du serveur LDAP et n'est donc accès ni au log, ni au fichiers de configuration. Par contre, la configuration à l'air bonne puisqu'il existe un webmail utilisant ldaps.

    Au niveau de mon fichier de configuration /etc/ldap/ldap.conf :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    TLS_REQCERT demand
    TLS_CACERT /etc/ssl/certs/CAcert.crt
    Le .ldaprc de mon utilisateur Apache est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    TLS_CERT /etc/ssl/certs/mailcert.pem
    TLS_KEY /etc/ssl/private/mailkey.key
    Lorsque j'utilise la commande ldapsearch, tous fonctionne très bien même sur mon utilisateur Apache.
    Tous se passe comme si php ne cherchait pas dans les fichiers ldap.conf et .ldaprc.
    Et pourtant, avec un strace php /monLdap.php, j'ai les lignes suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    open("/etc/ldap/ldap.conf", O_RDONLY|O_LARGEFILE) = 3
    open("/var/www/.ldaprc", O_RDONLY|O_LARGEFILE) = 3
    read(3, "TLS_CERT /etc/ssl/certs/mailcert"..., 4096) = 74
    Je n'arrive pas à comprendre d'ou cela peut venir...

    Merci d'avance pour le temps et l'aide que vous m'accorderez.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Peut être que je ferais mieux de créer un nouveau topic ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [LDAP] problème de connexion
    Par maroosoft dans le forum Windows Vista
    Réponses: 3
    Dernier message: 11/11/2008, 18h34
  2. [LDAP] Problème de connexion vers AD en ssl
    Par BornBanane dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 07/08/2007, 09h58
  3. [LDAP] Problème de connexion étrange!
    Par KaD dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 26/04/2006, 15h49
  4. Probléme de connexion avec ATT via une freebox
    Par ybertrand dans le forum Hardware
    Réponses: 3
    Dernier message: 17/10/2005, 16h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo