Невозможно подключиться к серверу LDAP с помощью Start TLS. Получение ошибки ниже:
"PHP сообщение: PHP Предупреждение: ldap_start_tls (): невозможно запустить TLS: ошибка соединения
Эта программа PHP работает на экземпляре Linux RHEL 7.6 с PHP 7.2.17 Nginx 1.12.2. Он пытается подключиться к серверу Active Directory, работающему под управлением Windows Server 2016. Цель этой программы - предоставить пользователям веб-интерфейс для сброса своих паролей AD. Сервер Active Directory также является центром сертификации, а сертификат CA находится на сервере Linux. Любая помощь приветствуется!
Настройка LDAP в PHP
# LDAP
$ldap_url = "ldap://hostname.domain.com:389";
$ldap_starttls = true;
$ldap_binddn = "cn=service,ou=Service Accounts,dc=domain,dc=com";
$ldap_bindpw = "password";
$ldap_base = "dc=domain,dc=com";
$ldap_login_attribute = "sAMAccountName";
$ldap_fullname_attribute = "cn";
$ldap_filter = "(&(objectClass=user)(sAMAccountName={login})(!(userAccountControl:1.2.840.113556.1.4.803:=2)))";
Конфигурация OpenLDAP в \ etc \ openldap \ ldap.conf:
TLS_CACERT /etc/openldap/certs/rootCA.cer
Функция PHP:
if ( $result === "" ) {
# Connect to LDAP
$ldap = ldap_connect($ldap_url);
ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($ldap, LDAP_OPT_REFERRALS, 0);
if ( $ldap_starttls && !ldap_start_tls($ldap) ) {
$result = "ldaperror";
error_log("LDAP - Unable to use StartTLS");
} else {
# Bind
if ( isset($ldap_binddn) && isset($ldap_bindpw) ) {
$bind = ldap_bind($ldap, $ldap_binddn, $ldap_bindpw);
} else {
$bind = ldap_bind($ldap);
}
if ( !$bind ) {
$result = "ldaperror";
$errno = ldap_errno($ldap);
if ( $errno ) {
error_log("LDAP - Bind error $errno (".ldap_error($ldap).")");
}
Я могу подключиться к серверу Active Directory с помощью следующей команды ldapsearch
ldapsearch -h hoostname.domain.com -D "cn=service,ou=Service Accounts,dc=domain,dc=com" -b "dc=domain,dc=com" -W -ZZ