2009-06-26 7 views
15

J'essaye de me connecter à un serveur LDAP sécurisé (en utilisant LDAP) via PHP, mais j'ai des problèmes avec ça. Je reçois l'erreur suivanteÉchec de connexion LDAP et PHP

Attention: ldap_bind() [function.ldap-bind]: Impossible de se connecter au serveur: Impossible de contacter le serveur LDAP dans /var/www/test.php en ligne 16

Je fonctionne lorsque j'essaie de me connecter sans LDAP, mais il est nécessaire que j'utilise LDAP parce que je vais traiter des informations sensibles.

J'utilise le code suivant

<?php 
// basic sequence with LDAP is connect, bind, search, interpret search 
// result, close connection 

echo "<h3>LDAP query test</h3>"; 
echo "Connecting ..."; 
$ds=ldap_connect("ldaps://server"); // must be a valid LDAP server! 




print $ds; 

if ($ds) { 
    echo "<br><br>Binding ..."; 
    $r=ldap_bind($ds);  // this is an "anonymous" bind, typically 
          // read-only access 
    echo "Bind result is " . $r . "<br />"; 

    echo "Searching for (sn=S*) ..."; 
    // Search surname entry 
    $sr=ldap_search($ds, "ou=people,o=server.ca,o=server", "uid=username*"); 
    echo "Search result is " . $sr . "<br />"; 

    echo "Number of entires returned is " . ldap_count_entries($ds, $sr) . "<br />"; 

    echo "Getting entries ...<p>"; 
    $info = ldap_get_entries($ds, $sr); 
    echo "Data for " . $info["count"] . " items returned:<p>"; 

print_r($info); 
// for ($i=0; $i<$info["count"]; $i++) { 
//  echo "dn is: " . $info[$i]["dn"] . "<br />"; 
//  echo "first cn entry is: " . $info[$i]["cn"][0] . "<br />"; 
//  echo "first email entry is: " . $info[$i]["mail"][0] . "<br /><hr />"; 
// } 

    echo "Closing connection"; 
    ldap_close($ds); 

} else { 
    echo "<h4>Unable to connect to LDAP server</h4>"; 
} 
?> 
+1

Je déteste demander l'évidence, mais "ldaps: // serveur" est-il un serveur LDAP valide? Cela ne ressemble pas à un URI valide pour moi ... –

+1

C'est un serveur valide. Je n'ai pas écrit le vrai nom de serveur là pour des raisons de sécurité –

+0

Est-ce sur IIS ou Apache? –

Répondre

0

Je pense que vous avez juste besoin de définir la version du protocole ldap être 3

echo "<h3>LDAP query test</h3>"; 
echo "Connecting ..."; 

$ldap_server = 'ldaps://server'; 
$ldap_port = '636'; 

$ds = ldap_connect($ldap_server, $ldap_port); 

if ($ds) 
{ 
    //add this 
    if (!ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3)) 
    { 
     fatal_error("Failed to set LDAP Protocol version to 3, TLS not supported."); 
    } 
    echo "<br><br>Binding ..."; 
    $r=ldap_bind($ds);  // this is an "anonymous" bind, typically 
         // read-only access 
    echo "Bind result is " . $r . "<br />"; 

    echo "Searching for (sn=S*) ..."; 
    // Search surname entry 
    $sr=ldap_search($ds, "ou=people,o=server.ca,o=server", "uid=username*"); 
    echo "Search result is " . $sr . "<br />"; 

    echo "Number of entires returned is " . ldap_count_entries($ds, $sr) . "<br />"; 

    echo "Getting entries ...<p>"; 
    $info = ldap_get_entries($ds, $sr); 
    echo "Data for " . $info["count"] . " items returned:<p>"; 

    print_r($info); 
    // for ($i=0; $i<$info["count"]; $i++) { 
    //  echo "dn is: " . $info[$i]["dn"] . "<br />"; 
    //  echo "first cn entry is: " . $info[$i]["cn"][0] . "<br />"; 
    //  echo "first email entry is: " . $info[$i]["mail"][0] . "<br /><hr />"; 
    // } 

    echo "Closing connection"; 
    ldap_close($ds); 

} 
else 
{ 
    echo "<h4>Unable to connect to LDAP server</h4>"; 
} 
+0

désolé, cela n'a pas fonctionné. Il n'a jamais jeté votre message d'erreur, et il ne s'est pas non plus lié de façon poreuse. –

0

Essayez d'activer « les connexions anonymes » sur votre LDAP serveur ou utilisez une liaison correcte (nom d'utilisateur/mot de passe).

comme cn=ldapauthuser,ou=accounts,dc=example,dc=com

7

Le problème n'est pas lié au processus de liaison réel (informations d'identification non valides) que l'avertissement serait différent si le serveur LDAP ne peut pas authentifier vos informations d'identification. Mais comme Paul Dixon a noté l'utilisation de ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3) devrait être nécessaire - même si je ne pense pas que ce soit la cause de vos problèmes.

  • De quel type de serveur LDAP vous connectez-vous? OpenLDAP, Active Directory ou autre chose?
  • Quel est le système d'exploitation de l'ordinateur exécutant votre programme PHP?
  • Utilisez-vous un certificat SSL auto-signé sur le serveur LDAP et l'autorité de certification pour le certificat donné est-elle approuvée par la machine exécutant votre programme PHP?
  • Sur quel port le serveur LDAP est-il exécuté? 636 serait le port "officiel" pour LDAPS. Peut-être que vous pouvez ajouter le port explicitement à l'adresse du serveur: ldaps://<<server>>:636.

ext/ldap a des problèmes avec les connexions sécurisées SSL/TLS. Vous pouvez essayer d'ajouter

TLS_REQCERT never 

aux ldap.conf (/etc/ldap.conf ou /etc/ldap/ldap.conf sur * les systèmes à base nix) ou pour les machines Windows créer un ldap.conf avec le contenu ci-dessus dans C:\OpenLDAP\sysconf\ldap.conf (le chemin doit correspondre exactement comme il est difficile codé dans l'extension).

+0

Merci, TLS_REQCERT a fait l'affaire pour moi. –

+0

Cette option peut également être définie via les options d'initialisation LDAP (sur python quand même, ldap.set_option (ldap.OPT_X_TLS_REQUIRE_CERT, ldap.OPT_X_TLS_NEVER)) –

+1

IMO, c'est un très mauvais conseil pour tout ce qui va au-delà du simple débogage. La définition de TLS_REQCERT pour ne jamais désactiver tous les contrôles de certificat TLS. Cela va à l'encontre de l'objectif d'utiliser TLS en premier lieu. Avec cette option définie, il n'y a aucune garantie que la connexion est sécurisée. –

2

Il semble que ce soit un problème d'utilisation de SSL/TLS sur certains serveurs avec des versions récentes de PHP. Pas certain de pourquoi. Vous pouvez vous référer à mon poste à: Problems with secure bind to Active Directory using PHP

Une des causes les plus probables, est la cause de Stefan. Pour vous assurer que c'est vraiment le cas, vous pouvez utiliser:

ldap_set_option(NULL, LDAP_OPT_DEBUG_LEVEL, 7); 

avant votre ldap_connect. Cela affichera un message d'erreur plus sain à consigner (généralement ssl cert non valide, réf.Stefan Gehrig)

2

Bien que vieux, j'ai rencontré le même problème et je voulais donner un aperçu des futurs lecteurs.

Une partie du problème était hors jour les bibliothèques OpenSSL, 0.9.6 vs 1.0.0 (qui a travaillé).

Après la mise à jour OpenSSL sur le serveur, il a été noté que PHP a perdu le soutien pour OpenSSL.

Vous pouvez vérifier le support des modules avec les éléments suivants de la ligne de commande:

php -m 

Ou

echo phpinfo(INFO_MODULES); 

A partir du navigateur.

En outre, il y a eu beaucoup de problèmes avec SSL LDAP Prise en charge lorsque vous utilisez le LDAP OCI8/Oracle libs dans mon expérience professionnelle. Sur les plateformes Debian, les paquets Libldap-2.4.2-dev fonctionnent mieux.

De plus, vous devriez regarder les journaux de connexion sur le serveur LDAP. Je peux presque garantir que vous verrez une erreur se référant à SSLv3 et manquant une CA pour le certificat.

Par défaut, PHP recherche le fichier de CA sur les systèmes UNIX, assurez-vous qu'il est lisible par l'invocateur PHP (utilisateur via cli, utilisateur Apache, etc ..):

/etc/pki/CA 

Ce n'est pas nécessairement un problème PHP, mais un problème de configuration avec Secure LDAP. S'il vous plaît voir ce PHP bug report et ce OpenLDAP thread.

Le fil OpenLDAP ci-dessus a un extrait d'une configuration de travail OpenLDAP pour référence.

Vous devez également vérifier les définitions de vos services dans/etc/services. Assurez-vous d'avoir les éléments suivants:

ldaps   636/tcp       # LDAP over SSL 
ldaps   636/udp 
0

Sous UNIX "ldap.conf man" = ... SYNOPSIS /usr/local/etc/openldap/ldap.conf ...

Ecrire TLS_REQCERT jamais dans /usr/local/etc/openldap/ldap.conf et mis ldap_set_option ($ ds, LDAP_OPT_PROTOCOL_VERSION, 3)

Ce travail dans mon projet sur nginx + PHP-FPM: nginx/1.6.0 php55 -5.5.15 php55-ldap-5.5.15 openldap-c lient-2.4.39_1

Questions connexes