Я получаю:
Предупреждение: ldap_start_tls () [function.ldap-start-tls]: Не удалось запустить TLS: Ошибка подключения в /var/www/X.php в строке Y
- имея http ссылки на странице https, но не скрипты или css
- Как включить https (localhost) url на сервере WAMP (v2.5)?
- Конфигурация SSL для конкретной среды в файле Laravel .env
- Как включить SSL на сервере WAMP?
- PHP cURL не работает с HTTPS
- Почему функция автозаполнения Internet Explorer отключена для всех html-форм на моем веб-сайте?
/etc/ldap/ldap.conf:
TLS_CACERT /etc/ssl/certs/ca.crt
ca.crt
– это CA, который подписал сертификат сервера LDAP. Сертификат на сервере LDAP истек, и я не могу его изменить.
Вы можете игнорировать действительность в окнах, выдавая
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
Для применения изменений может потребоваться перезапуск веб-сервера.
В дебианских системах:
Установите пакет: ldap-utils
и в файл /etc/ldap/ldap.conf
отредактируйте строку:
TLS_CACERT /etc/ldap/cacerts/cacert.asc
Создайте каталог /etc/ldap/cacerts
и скопируйте cacert в /etc/ldap/cacerts/cacert.asc
Перезапустите apache
.
В системах, основанных на 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 на предмет блокировки.