Как решить ldap_start_tls () «Невозможно запустить TLS: ошибка подключения» в PHP? - PullRequest
13 голосов
/ 22 апреля 2010

Я получаю:

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

/ и т.д. / LDAP / ldap.conf:

TLS_CACERT     /etc/ssl/certs/ca.crt

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

Ответы [ 6 ]

26 голосов
/ 09 марта 2011

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

putenv('LDAPTLS_REQCERT=never');

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

TLS_REQCERT never

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

//$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);

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

ldap_set_option(NULL, LDAP_OPT_DEBUG_LEVEL, 7);

Это можно сделать до того, как произойдет ldap_connect.

2 голосов
/ 22 апреля 2010

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

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

Если у вас есть идея получше, пожалуйста, оставьте другой ответ.

1 голос
/ 11 октября 2015
  1. В системах на основе Debian:

    Установить пакет: 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

1 голос
/ 04 мая 2011

Путь для ldap.conf в Windows фиксирован:

C: \ OpenLDAP \ sysconf \ ldap.conf

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

0 голосов
/ 20 марта 2017

Мне удалось заставить это работать должным образом с openldap на Amazon Linux (Elastic Beanstalk PHP 7.0) с MacOS Server 5 LDAP с TLS, установленным по требованию.

в /etc/openldap/ldap.conf:

TLS_REQCERT спрос

TLS_CACERT /etc/openldap/certs/yourcacert.pem

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

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

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

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

0 голосов
/ 13 сентября 2016

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

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

setsebool -P httpd_can_network_connect 1

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...