web-dev-qa-db-fra.com

Comment résoudre ldap_start_tls () "Impossible de démarrer TLS: erreur de connexion" en PHP?

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.

12
user323094

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.

25
Jon Skarpeteig

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.

2
user323094

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.

1
Encelado
  1. 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.

  2. 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

1
Nehal J Wani

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.

0
WhoIsRich

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.

0
thundersnow