Сервер Ubuntu может подключаться через LDAP, но не через LDAPS, хотя LDP показывает, что SSL включен - PullRequest
0 голосов
/ 17 апреля 2019

Я установил Ubuntu Desktop 18.04 и LAMP, включил LDAP и т. Д. Я могу подключиться через LDAP и порт 389. Когда я пытаюсь соединиться с LDAPS на 636, я блокируюсь.Я использовал LDP в Windows для подключения к серверу, чтобы убедиться, что SSL включен, и я могу подключиться к серверу, используя SSL в программе LDP.

Это новая виртуальная машина с мостовым сетевым подключением, работающая под управлением Ubuntu18.04 рабочий стол.Я пробовал несколько наборов кода и разные учетные записи пользователей AD от учетных записей базовых пользователей до учетных записей администраторов домена.

<?php
$ldaphost = "ldaps://my.domain.controller"; //edited for security purposes
$ldapport = 636;

$lconn = ldap_connect($ldaphost) // also tried $lconn = ldap_connect($ldaphost,$ldapport); to no avail
 or die("Could not connect to host!");

Как уже упоминалось, это работает, если я изменяю его на стандартный LDAP, поэтому я знаю, что он включен правильно.Я искал онлайн несколько часов, и больше ничего не помогло.

Программа LDP предоставляет следующую информацию:

0x0 = ldap_unbind(ld);
ld = ldap_sslinit("my.domain.controller", 636, 1);
Error 0 = ldap_set_option(hLdap, LDAP_OPT_PROTOCOL_VERSION, 3);
Error 0 = ldap_connect(hLdap, NULL);
Error 0 = ldap_get_option(hLdap,LDAP_OPT_SSL,(void*)&lv);
Host supports SSL, SSL cipher strength = 256 bits
Established connection to my.domain.controller.
Retrieving base DSA information...
Getting 1 entries:

РЕДАКТИРОВАТЬ: закончилась ошибкой сертификата.Они не были правильно настроены предыдущей администрацией.Сейчас работаем над их исправлением.

1 Ответ

0 голосов
/ 17 апреля 2019

Вам нужно будет проверить несколько вещей:

  • Сертификат CA из DC установлен на сервере Ubuntu.
  • Сертификат SSL, подписанный от CA с помощью полного доменного имени (или IP-адреса, в зависимости от того, как написан ваш URI LDAPS) в CN сертификата, установлен на сервере Ubuntu.
  • Если вы используете openldap для какой-либо части подключения, измените ваш ldap.conf следующим образом:
BASE    dc=domain,dc=com
URI     ldaps://dc.domain.com:636
TLS_CACERT /path/to/ca-cert.cer
TLS_REQCERT DEMAND

и затем поиск ldap должен вернуть результаты с запросом, подобным:

ldapsearch -x -H ldaps://dc.domain.com -D 'CN=LDAP-bind,OU=Service Accounts,OU=Accounts,DC=domain,DC=com' -W -b 'OU=Accounts,DC=domain,DC=com'

Это инструкции, которым я следовал, когда настраивал свои веб-приложения для аутентификации через LDAPS → Включение LDAP через SSL для серверов Microsoft Active Directory

Этот код я использую для проверки моего соединения LDAPS с разных клиентских серверов.

  class LDAP {

    public function connect($host, $user, $pass){
      $ds = ldap_connect($host);     
      if(!ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3)){
        print "Could not set LDAPv3";
      } else {
          $ldap = ldap_bind($ds, $user, $pass);
        }
      if(strpos($host, 'ldaps://') !== false){
        $ssl = ' over SSL';
        $host = str_replace('ldaps://', '', $host);
      } else {
          $ssl = null;
          $host = str_replace('ldap://', '', $host);
        }

      if($ldap) {
        //$host = str_replace('ldap://', replace, subject)
        echo '<b>LDAP</b> : <u>Microsoft AD</u> <br /><br />
          Connection to <u>' . $host . '</u>' . $ssl . ' was successful! <br /><br />
          [WebServer] ←→ [LDAP Server] <br /><br />
          <b>Status:</b> <u>Up</u> &#10004; <br />';
      } else {
          echo 'Connection to <u>' . $host . '</u>' . $ssl . ' was NOT successful. Please try again. <br /><br />
          [WebServer] ←x→ [LDAP Server] <br /><br />
          <b>Status:</b> <u>Down</u> &#10006; <br />';
        }
    }

    public function disconnect(){
      $ldap = null;
    }
  } # class ldap

  $LDAP = new LDAP();
  $host = "ldaps://dc.domain.com";
  $user  = "svc.ldap@domain.com";
  $pass = "password1";
  $LDAP->connect($host, $user, $pass);
  $LDAP->disconnect();
  // echo 'HOST['.$host.'] USER['.$user.']'; // toggle to troubleshoot db connection
...