Как решить ldap_start_tls () «Не удалось запустить TLS: Ошибка подключения» в PHP?

Я получаю:

Предупреждение: ldap_start_tls () [function.ldap-start-tls]: Не удалось запустить TLS: Ошибка подключения в /var/www/X.php в строке Y

/etc/ldap/ldap.conf:

TLS_CACERT /etc/ssl/certs/ca.crt 

ca.crt – это CA, который подписал сертификат сервера LDAP. Сертификат на сервере LDAP истек, и я не могу его изменить.

Solutions Collecting From Web of "Как решить ldap_start_tls () «Не удалось запустить TLS: Ошибка подключения» в PHP?"

Вы можете игнорировать действительность в окнах, выдавая

 putenv('LDAPTLS_REQCERT=never'); 

в вашем php-коде. В /etc/ldap.conf * nix вам необходимо отредактировать файл /etc/ldap.conf чтобы он содержал

 TLS_REQCERT never 

Еще одна вещь, о которой нужно знать, это то, что для нее требуется версия 3 (версия 2 – по умолчанию php):

 $con = ldap_connect($hostnameSSL); ldap_set_option($con, LDAP_OPT_PROTOCOL_VERSION, 3); 

Чтобы лучше понять, что происходит, вы можете включить ведение журнала отладки:

 ldap_set_option(NULL, LDAP_OPT_DEBUG_LEVEL, 7); 

Это можно сделать до того, как ldap_connect .

Мое решение / обходное решение – использовать

 /etc/ldap/ldap.conf: #TLS_CACERT /etc/ssl/certs/ca.crt TLS_REQCERT never 

Если у вас есть идея, напишите еще один ответ.

ldap.conf путь для ldap.conf в Windows:

C: \ OpenLDAP \ sysconf \ ldap.conf

Для применения изменений может потребоваться перезапуск веб-сервера.

  1. В дебианских системах:

    Установите пакет: ldap-utils и в файл /etc/ldap/ldap.conf отредактируйте строку:

     TLS_CACERT /etc/ldap/cacerts/cacert.asc 

    Создайте каталог /etc/ldap/cacerts и скопируйте cacert в /etc/ldap/cacerts/cacert.asc

    Перезапустите apache .

  2. В системах, основанных на redhat:

    Установите пакет: openldap-clients а в файле /etc/openldap/ldap.conf отредактируйте строку:

     TLS_CACERT /etc/openldap/cacerts/cacert.asc 

    Создайте каталог /etc/openldap/cacerts и скопируйте cacert в /etc/openldap/cacerts/cacert.asc

    Перезапустить httpd

Я смог нормально работать с openldap на Amazon Linux (Elastic Beanstalk PHP 7.0) с LDAP MacOS Server 5, с запросом TLS.

в /etc/openldap/ldap.conf:

TLS_REQCERT спрос

TLS_CACERT /etc/openldap/certs/yourcacert.pem

(обратите внимание, что если вы не используете openldap, путь будет /etc/ldap/certs/yourcacert.pem). Эта настройка не работала, пока я не разместил сертификат внутри папки certs; он не работал ни с каким другим путем.

Сертификат, который должен быть помещен в этот путь, НЕ является сертификатом TLS сервера. Это сертификат CA (Certificate Authority) органа, выдавшего сертификат TLS сервера / домена. Только сертификат CA, размещенный в этом пути, позволит TLS работать до попытки связывания LDAP в php. Получите сертификат ЦС с вашего сервера или загрузите его с сайта органа власти, они свободно доступны.

Чтобы проверить, работает ли связь LDAP даже без TLS, не устанавливайте TLS_REQCERT на время (возможно, нужно прокомментировать # из TLS_CACERT). Если вы получаете «Не удается подключиться к LDAP», это не ошибка TLS; он просто не может подключиться к серверу, и вам, вероятно, потребуется открыть порт 389 (не 636 для TLS).

Не забудьте перезапустить сервер Apache каждый раз, когда вы вносите изменения в файл конфигурации или сертификат.

Некоторая дополнительная помощь для других, решение для справки здесь решило мою проблему с командной строкой ldapsearch , но все же PHP жаловался **Can't contact LDAP server**

Оказалось, что SELinux на RHEL7 (CentOS7) блокирует HTTPD от использования портов 389 и 636 LDAP по умолчанию, вы можете разблокировать:

 setsebool -P httpd_can_network_connect 1 

Проверьте файл журнала аудита SELinux на предмет блокировки.