Je suis en train:
Avertissement: ldap_start_tls () [function.ldap-start-tls]: Impossible de démarrer TLS: erreur de connexion dans /var/www/X.php à la ligne Y
/etc/ldap/ldap.conf:
TLS_CACERT /etc/ssl/certs/ca.crt
ca.crt
est l'autorité de certification qui a signé le certificat du serveur LDAP. Le certificat sur le serveur LDAP a expiré et je ne peux pas le changer.
Vous pouvez ignorer la validité dans Windows en émettant
putenv('LDAPTLS_REQCERT=never');
dans votre code php. Dans * nix, vous devez modifier votre /etc/ldap.conf
pour qu'il contienne
TLS_REQCERT never
Une autre chose à savoir est que cela nécessite la version 3 (la version 2 est php par défaut):
//$hostnameSSL example would be "ldaps://just.example.com:636" , just make sure it has ldaps://
$con = ldap_connect($hostnameSSL);
ldap_set_option($con, LDAP_OPT_PROTOCOL_VERSION, 3);
Pour avoir une meilleure idée de ce qui se passe, vous pouvez activer la journalisation de débogage en:
ldap_set_option(NULL, LDAP_OPT_DEBUG_LEVEL, 7);
Cela peut être fait avant que le ldap_connect
ait lieu.
Ma solution/solution consiste à utiliser
/etc/ldap/ldap.conf:
#TLS_CACERT /etc/ssl/certs/ca.crt
TLS_REQCERT never
Si vous avez une meilleure idée, envoyez une autre réponse.
Le chemin pour ldap.conf
dans Windows est corrigé:
c:\openldap\sysconf\ldap.conf
Un redémarrage du serveur Web peut être nécessaire pour appliquer les modifications.
Dans les systèmes basés sur debian:
Installez le paquet: ldap-utils
et dans le fichier /etc/ldap/ldap.conf
, éditez la ligne:
TLS_CACERT /etc/ldap/cacerts/cacert.asc
Créez le répertoire /etc/ldap/cacerts
et copiez le cacert dans /etc/ldap/cacerts/cacert.asc
Redémarrez Apache
.
Dans les systèmes basés sur redhat:
Installez le paquet: openldap-clients
et dans le fichier /etc/openldap/ldap.conf
éditez la ligne:
TLS_CACERT /etc/openldap/cacerts/cacert.asc
Créez le répertoire /etc/openldap/cacerts
et copiez le cacert dans /etc/openldap/cacerts/cacert.asc
Redémarrer httpd
Une aide supplémentaire pour les autres, la solution de certificat ici a résolu mon problème de ligne de commande ldapsearch
, mais toujours PHP s'est plaint **Can't contact LDAP server**
Il s’est avéré que SELinux sur RHEL7 (CentOS7) empêche HTTPD d’utiliser les ports LDAP 389 et 636 par défaut. Vous pouvez débloquer les éléments suivants:
setsebool -P httpd_can_network_connect 1
Vérifiez dans votre fichier journal d’audit SELinux que des éléments sont bloqués.
Cela fonctionnait correctement avec openldap sur Amazon Linux (Elastic Beanstalk PHP 7.0) avec MacOS Server 5 LDAP, avec TLS configuré à la demande.
dans /etc/openldap/ldap.conf:
TLS_REQCERT demande
TLS_CACERT /etc/openldap/certs/yourcacert.pem
(notez que si vous n'utilisez pas openldap, le chemin sera /etc/ldap/certs/yourcacert.pem). Cette configuration ne fonctionnait pas tant que je n'avais pas placé le certificat dans le dossier certs. cela n'a fonctionné d'aucun autre chemin.
Le certificat à placer dans ce chemin n'est PAS le certificat TLS du serveur. Il s'agit du certificat CA (autorité de certification) de l'autorité qui a émis le certificat TLS spécifique au serveur/domaine. Seul le certificat de l'autorité de certification placé dans ce chemin permettra à TLS de fonctionner avant toute tentative de liaison LDAP en php. Obtenez le certificat de l'autorité de certification de votre serveur ou téléchargez-le du site de l'autorité. Ils sont disponibles gratuitement.
Pour vérifier si la liaison LDAP fonctionne même sans TLS, définissez TLS_REQCERT jamais temporairement (il peut être nécessaire de commenter # sur TLS_CACERT). Si vous obtenez "Impossible de se connecter à LDAP", il ne s'agit pas d'une erreur TLS; il ne peut tout simplement pas se connecter au serveur et vous devrez probablement ouvrir le port 389 (et non le 636 pour TLS).
N'oubliez pas de redémarrer votre serveur Apache chaque fois que vous modifiez le fichier de configuration ou le certificat.