2013-02-11 5 views
1

Je tente d'interroger un serveur LDAP distant dans une connexion sécurisée dans un environnement de test Windows php local. Je pense que je dois avoir l'accès accordé correctement parce que je peux utiliser une application LDAP Browser et qui se connecte très bien au serveur distant. Aussi, si je fais 'telnet remoteserverurl.com 636' alors un écran vide apparaît dans l'invite de commande, donc je me connecte au moins. Mais dans mon code suivant .php j'obtiens une erreur sur bind: "PHP Attention: ldap_bind(): Impossible de lier au serveur: Impossible de contacter le serveur LDAP en ligne ..."php Liaison LDAP sur un serveur distant sécurisé Windows échoue

Le même code fonctionne dans un Serveur Linux Je pense qu'il existe une sorte de bibliothèques LDAP manquantes dans mon environnement php local pour une connexion LDAP sécurisée? Quoi qu'il en soit, voici le code:

$ds=ldap_connect("ldaps://serveraddress.com", "636"); // remote server 
//$ds=ldap_connect("ldap://localhost", 389); // works 
//putenv('LDAPTLS_REQCERT=never');//doesn't help with secure ldap 
//ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3); //works for local LDAP server (Open LDAP) 
$r=ldap_bind($ds, "cn=xxx,ou=proxy,o=xxx", "passwordxxxx");//throws error for remote 

Une idée? Merci!

+0

avez-vous vérifié si les librairies sont chargées? essayez un phpinfo(). PHP doit prendre en charge LDAP et SSL, votre LDAP doit prendre en charge SSL –

+0

Dans phpinfo, dans la section LDAP, je vois: Support LDAP activé RCS Version $ Id: ldap.c 313665 2011-07-25 11: 42: 53Z felipe $ Nombre total de liens 0/illimité API Version 3001 Nom du fournisseur OpenLDAP Fournisseur version 20319 Prise en charge SASL – IrfanClemson

Répondre

1

Vérifiez votre PHP

d'abord des bibliothèques
<?php phpinfo() ?> 

Comme vous pouvez vous connecter en utilisant un client LDAP i votre LDAP fonctionne attends SSL

Avez-vous votre copie du certificat SSL?

  1. Copiez les certificats de serveur à sys:/php5/répertoire cert. Cet emplacement est configurable dans le fichier php.ini.

  2. Utilisez le préfixe "ldaps: //" pour l'argument du nom d'hôte ou une valeur de 636 pour l'argument du numéro de port dans l'appel ldap_connect.

+0

Certificat de serveur du serveur distant? Comment puis-je obtenir? Je ne pense pas avoir un accès direct à ce serveur Linux. Merci. – IrfanClemson

+0

Si vous n'avez pas accès pour insérer un certificat alors vous êtes probablement vissé. Pour établir une connexion sécurisée, vous avez besoin de ce certificat. Je ne sais pas s'il existe un moyen de l'importer via le code ou htaccess. Peut-être google que –

+0

Juste pour ajouter, essayez une connexion non sécurisée 1 fois, puis il vous dira si elle est dans le certificat ou non. Si vous ne pouvez pas vous connecter sur une connexion normale alors c'est un autre problème –

0

J'ai eu ce travail! La réponse de @ s.lenders (merci pour cela) a pointé vers un problème de certificat et en effet c'était un problème de certificat. Le serveur LDAP remove avait son certificat à l'état expiré - J'ai reçu un avertissement à ce sujet même lorsque je me suis connecté en utilisant l'application de bureau (SoftTerra LDAP Browser). Donc importé le certificat à mes certificats Windows - SoftTerra LDAP Browser application m'a permis cette option. Et, voilà! Les appels SSL LDAP fonctionnent.

** Mise à jour: Je ne sais pas si le certificat ci-dessus a aidé ou non mais voici quelque chose de plus concret qui m'a aidé: Il semble que les bibliothèques LDAP php recherchent un certain fichier conf; codé en dur dans: C \ OpenLDAP \ sysconf \ ldap.conf?! J'ai donc créé de nouveaux dossiers pour cette information et j'ai mis un fichier ldap.conf avec rien d'autre que 'TLS_REQCERT never' et ça aide! Je l'ai testé ... si je devais supprimer ce fichier, mes requêtes LDAP sécurisées ne fonctionnent pas et échouent dans l'étape 'bind'. Remarque, je suis à l'aise avec le «jamais» dans ma conf, car ce sera uniquement sur mon propre poste de travail.

Notez également que je suis sur un ordinateur Windows 7 exécutant IIS 7+ **

Hope this helps quelqu'un.

4

sais que c'est plus, mais j'ai récemment rencontré un problème similaire lorsque vous utilisez 3.x & 4.x wordpress sur Windows 2008 & 2012 (IIS 7.x & 8.x, PHP 5.6).

J'avais écrit un plugin pour l'authentification ldap pour wordpress - comme essayait d'obtenir LDAPS (ldap sécurisé sur le port 636 fonctionnant).

choses Couple:

  1. Lorsque vous utilisez PHP LDAPS, la documentation que vous simplement le préfixe stipule serveur LDAP avec ldaps://. Donc server1.domain.com pour LDAPS devrait être ldaps://server1.domain.com/ ... Notez que vous n'avez pas besoin de passer le port du tout pour la méthode de connexion (par http://php.net/manual/en/function.ldap-connect.php). Ceci est très similaire à ce que la question originale a dans sa soumission.
  2. Les bibliothèques PHP Windows sont codées en dur pour rechercher un fichier de configuration ldap ouvert (ldap.conf) dans C:\openldap\sysconf\ldap.conf.
  3. Créez le fichier texte mentionné au point 2 ci-dessus - c'est ici que vous pointez vers votre magasin de certificats. Une fois que vous créez ce fichier, vous pouvez mettre en TLS_REQCERT never ... mais cela signifie pas certs sont vérifiés et tous font confiance automatiquement (essentiellement) - ne devrait y avoir pour les tests ... jamais pour la production, comme vous la défaite partie des mesures de sécurité TLS/SSL (c'est-à-dire certifier que vous parlez bien à l'hôte auquel vous croyez être connecté).
  4. Au lieu de l'option non sécurisée TLS_REQCERT never qui semble être une suggestion populaire (et peut-être mal orientée) sur les interwebs ... récupérer la liste commune des autorités de cert publiques utilisée par curl et similaire - http://curl.haxx.se/ca/cacert.pem. C'est essentiellement ce que firefox vient avec les approbations publiques d'autorité de certification (c'est-à-dire pourquoi vous pouvez installer Firefox et aller à https://amazon.com sans avertissement de CERT, etc.).
  5. Supprimez le fichier cacert.pem que vous avez téléchargé (c'est juste un fichier texte avec un tas de hachages de certificats et de descriptions) avec votre installation PHP. Par exemple, disons que je l'ai vidé avec mon installation php dans c:\php5\cacert.pem. Votre emplacement peut différer, mais le mettre quelque part, il peut être consulté et sera groupé avec des trucs php car il est lié. Voici quelques photos du contenu du fichier cacert.pem pour vous donner une idée de ce qu'il y a dedans. sample cacert.pem content hash example in cacert.pem
  6. Modifier le C:\openldap\sysconf\ldap.conf et ajouter une ligne pour la commande TLS_CACERT comme la photo. Cela devrait vous permettre de faire confiance aux certificats publics et valides, tout comme les navigateurs Web modernes, etc. Notez qu'il ne corrigera pas les problèmes d'approbation des certificats émis en interne ou auto-signés. Mais vous pouvez facilement le faire en ajoutant vos propres hash de cert au fichier cacert.pem.
  7. Pour ajouter un autre certificat comme fichier de confiance dans le fichier cacert.pem, il vous suffit d'obtenir une copie du certificat en question (il suffit de l'exporter au format .cer - ne nécessite pas vraiment la clé privée et l'extension n'a pas d'importance - il suffit juste d'être une sortie de hachage). Si vous l'avez exporté dans le bon format, vous pouvez ouvrir le fichier de certificat et voir le hachage - il sera similaire (mais pas identique) à la capture d'écran ici de l'exemple de CA Thawte Server. Ajoutez simplement le hash exporté dans le fichier cacert.pem et il sera approuvé. Si vous cherchez à être intelligent, vous pouvez à la place importer le certificat d'émission pour votre certificat émis par le secteur privé - cela permettrait d'approuver tout certificat signé par le certificat importé. En cas de doute, vous pouvez toujours importer le certificat présenté.
  8. Après avoir effectué de tels changements, j'ai trouvé préférable de redémarrer le serveur Web (gestionnaire iis -> noeud de serveur web -> option de redémarrage) pour que tout ce qui utilise php soit réinitialisé.
  9. Pour un crédit supplémentaire, vous pouvez utiliser le même fichier cacert.pem pour l'implémentation curl en modifiant votre fichier php.ini et en indiquant le chemin d'accès complet au fichier cacert.pem sur la ligne curl.cainfo =.
  10. Encore une fois, je sais que c'est un post plus ancien, mais je voulais partager ce que j'avais appris en connectant wordpress à eDirectory via LDAPS.
Questions connexes