Я пытаюсь подключиться к MS Active Directory с помощью PHP 7 на сервере Windows 2012 (работает Apache 2.4, но это не должно иметь отношения к моей проблеме).
Следует также отметить, что я могу подключаться к AD из PHP, используя незащищенный LDAP из командной строки и сервер apache.
Когда я выполняю следующий тестовый файл PHP, источник: http://muzso.hu/2012/04/02/php-ldap-ssl-ldaps-authentication-in-windows-running-apache, из командной строки на веб-сервере:
$AD_search_bind_DN = 'CN=someuser,OU=Users,DC=example,DC=com';
$AD_search_bind_PW = 'secret123';
ini_set('display_errors', 1);
error_reporting(E_ALL);
ldap_set_option(NULL, LDAP_OPT_DEBUG_LEVEL, 7);
$conn = ldap_connect('ldaps://SomeDC.example.com/') or die("Failed to connect to ldap server.");
ldap_set_option(NULL, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_bind($conn, $AD_search_bind_DN, $AD_search_bind_PW) or die("Failed to bind to ldap server: " + ldap_error($conn));
echo "Successful LDAP bind.";
Я получаю следующий вывод (я выделил ошибку):
ldap_url_parse_ext (LDAP: // локальный /)
ldap_init: пытается% SYSCONFDIR% \ ldap.conf
ldap_init: HOME env — NULL
ldap_init: пытается ldaprc
ldap_init: LDAPCONF env НЕДЕЙСТВИТЕЛЕН
ldap_init: LDAPRC env НЕДЕЙСТВИТЕЛЕН
ldap_create
ldap_url_parse_ext (LDAPS: //SomeDC.example.com/)
ldap_sasl_bind_s
ldap_sasl_bind
ldap_send_initial_request
ldap_new_connection 1 1 0
ldap_int_open_connection
ldap_connect_to_host: TCP SomeDC.example.com:636
ldap_new_socket: 244
ldap_prepare_socket: 244
ldap_connect_to_host: попытка {IP-адрес SomeDC удален}: 636
ldap_pvt_connect: fd: 244 tm: -1 async: 0
пытается подключиться:
подключить успех
Трассировка TLS: SSL_connect: до / подключить инициализации
Трассировка TLS: SSL_connect: клиент записи SSLv2 / v3 привет A
Трассировка TLS: SSL_connect: сервер чтения SSLv3 привет A
Проверка сертификата TLS: глубина: 1, ошибка: 20, тема: / DC = com / DC = пример / C
N = Self_Named-SHA256-SubCA, эмитент: / CN = ITSS-Ent-SHA256-Root
Проверка сертификата TLS: ошибка, невозможно получить сертификат локального эмитента
Трассировка TLS: запись предупреждения SSL3: фатально: неизвестно CA
Трассировка TLS: SSL_connect: ошибка в ошибке
Трассировка TLS: SSL_connect: ошибка в ошибке
TLS: не удается подключиться: ошибка: 14090086: SSL
подпрограммы: ssl3_get_server_certificate: сбой проверки сертификата (невозможно получить сертификат локального эмитента).
ldap_err2string
Предупреждение PHP: ldap_bind (): невозможно привязать к серверу: не удается связаться с сервером LDAP в C: \ test_bind.php в строке 10
У меня есть оба расширения php_ldap и php_openssl без комментариев в моем файле php.ini.
У меня есть копии сертификата AD CA в форматах DER и PEM, но я не уверен, где разместить эти файлы на моем веб-сервере. Есть много сообщений, связанных с ОС Linux, в которых просто говорится, что нужно поместить «TLS_CACERT C: \ openldap \ sysconf \ cacert.pem» в мой файл ldap.conf. Я не запускаю openLDAP и у меня нет файла ldap.conf.
У меня установлен openSSL, но я не совсем уверен, что конфигурация верна:
== РЕДАКТИРОВАТЬ 1: ==============================================
Габриэль, спасибо за предложения / Ссылка.
Я теперь также попробовал эти вещи без успеха:
== РЕДАКТИРОВАТЬ 2: ==============================================
Габриэль, спасибо за совет монитора процесса. Теперь я могу хотя бы подтвердить, что PHP 7 использует путь значения среды ‘LDAPCONF’, чтобы найти и прочитать файл ldap.conf, на который указывает эта переменная ENV.
Также кажется, что PHP 7 не обрабатывает переменную среды ‘SYSCONFDIR’ правильно, потому что сначала пытается открыть файл по этому буквальному пути: E: \ httpd \ www \% SYSCONFDIR% \ ldap.conf
Это все еще не работает, но теперь я могу сосредоточиться на настройке только одного файла, который, как я знаю, читает.
Если у кого-то есть какие-либо другие советы по настройке или они могут поделиться своим файлом ldap.conf из работающей установки Windows, я был бы признателен.
я сейчас еще застрял и не знаю, что еще делать. Пожалуйста помоги!
Ответ здесь должен помочь: https://stackoverflow.com/a/6047293/1202807
Под XAMPP в Windows ldap.conf должен находиться либо в корне
система (c: \ ldap.conf, PHP 5.3.3, если я правильно помню) или в
C: \ openldap \ sysconf \ в зависимости от версии PHP. Кажется путь
не настраивается, поскольку жестко запрограммирован в DLL-библиотеках Windows PHP. Увидеть
комментарии в http://se2.php.net/manual/en/ref.ldap.php
Поэтому создайте файл ldap.conf в каталоге c: \ или C: \ openldap \ sysconf \, если он еще не существует, и вставьте в него строку TLS_CACERT.
У меня похожая проблема, я потратил некоторое время на ее решение. Такое поведение было ошибкой OpenLDAP в PHP. Я сообщил об этом, и это было исправлено и будет выпущено в ближайшее время. Смотрите: PHP BUG # 73243 (https://bugs.php.net/bug.php?id=73243)
Если вам нужно немедленное исправление, которое немного взломать, попробуйте это (на свой страх и риск):
Надеюсь, поможет 🙂