Изменить пароль в Active Directory с помощью LDAP / PHP / IIS / SSL - PullRequest
2 голосов
/ 19 апреля 2011

Прежде всего, это может быть не столько вопрос программирования, сколько вопрос о том, как мне настроить вопрос LDAPS, но здесь ...

Справочная информация:

У меня есть два сервера Windows 2008 R2.Одним из них является контроллер домена (DC) с Active Directory (AD), с которым я хочу общаться через LDAP.Этот называется TestBox.TestDomain.local.Другой сервер работает под управлением IIS, PHP (с ldap и openssl) и mySQL.

Что работает / не работает:

Я могу успешно подключиться кDC незащищен через порт 389 и считывает / записывает данные в AD.Что я не могу сделать, так это изменить или установить пароли пользователей, поскольку для этого требуется безопасное соединение с использованием LDAPS (LDAP w / SSL) через порт 636.

Что мне нужно помочь с:

Я попытался установить службы сертификации Active Directory (AD CS) и настроить DC для работы в качестве центра сертификации (CA), используя информацию, найденную здесь: http://technet.microsoft.com/en-us/library/cc770357(WS.10).aspx, но что бы я ни пытался, не могуустановить соединение через LDAPS.

Пример кода:

Создание соединения LDAP

function ldapConnect(){
    $ip = "100.200.300.400";  // WAN IP goes here;
    $ldap_url = "ldap://$ip";
    $ldaps_url = "ldaps://$ip";
    $ldap_domain = 'testdomain.local';
    $ldap_dn = "dc=testdomain,dc=local";

    // Unsecure - WORKS
    $ldap_conn = ldap_connect( $ldap_url ) or die("Could not connect to LDAP server ($ldap_url)");
    //alternate connection method 
    //$ldap_conn=ldap_connect( $ip, 389 ) or die("Could not connect to LDAP server (IP: $ip, PORT: 389)");  

    // Secure - DOESN'T WORK
    //$ldap_conn = ldap_connect( $ldaps_url ) or die("Could not connect to LDAP server ($ldaps_url)");
    //alternate connection method 
    //$ldap_conn=ldap_connect( $ip, 636 ) or die("Could not connect to LDAP server (IP: $ip, PORT: 636)");  

    ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);
    ldap_set_option($ds, LDAP_OPT_REFERRALS, 0);

    $username = "AdminUser";
    $password = "AdminPass"; 

    // bind using admin username and password
    // could also use dn... ie. CN=Administrator,CN=Users,DC=TestDomain,DC=local
    $result = ldap_bind($ldap_conn, "$username@$ldap_domain", $password ) or die("<br>Error: Couldn't bind to server using supplied credentials!");

    if($result){
        return $ldap_conn;
    }else{
        die("<br>Error: Couldn't bind to server using supplied credentials!");
    }
}

Добавление нового пользователя в Active Directory

function ldapAddUser($ldap_conn, $ou_dn, $firstName, $lastName, $username, $pwdtxt, $email){
    $dn = "CN=$firstName $lastName,".$ou_dn;

    ## Create Unicode password
    $newPassword = "\"" . $pwdtxt . "\"";
    $len = strlen($newPassword);
    $newPassw = "";
    for($i=0;$i<$len;$i++) {
        $newPassw .= "{$newPassword{$i}}\000";
    }

    $ldaprecord['cn'] = $firstName." ".$lastName;
    $ldaprecord['displayName'] = $firstName." ".$lastName;
    $ldaprecord['name'] = $firstName." ".$lastName;
    $ldaprecord['givenName'] = $firstName;
    $ldaprecord['sn'] = $lastName;
    $ldaprecord['mail'] = $email;
    $ldaprecord['objectclass'] = array("top","person","organizationalPerson","user");
    $ldaprecord["sAMAccountName"] = $username;
    //$ldaprecord["unicodepwd"] = $newPassw;
    $ldaprecord["UserAccountControl"] = "544"; 

    $r = ldap_add($ldap_conn, $dn, $ldaprecord);

    // set password .. not sure if I need to base64 encode or not
    $encodedPass = array('userpassword' => base64_encode($newPassw));
    //$encodedPass = array('unicodepwd' => $newPassw);

    echo "Change password ";
    if(ldap_mod_replace ($ldap_conn, $dn, $encodedPass)){ 
        echo "succeded";
    }else{
        echo "failed";
    }
}

Ответы [ 3 ]

1 голос
/ 22 апреля 2011

Всего два совета:

  1. Во время настройки AD CS на странице Укажите тип установки нажмите Предприятие и нажмите кнопку Далее.,
  2. Служба AD должна принимать собственный сертификат, но если он работает как в Windows Server 2003, необходимо перезагрузить сервер, чтобы он заработал.Возможно, просто остановите и перезапустите службу в W2K8 R2.

После этого вы можете просто попытаться создать сертификат и установить его на учетную запись службы AD, как это можно сделать с помощью ADAM.

0 голосов
/ 13 февраля 2013

Создали ли вы запрос сертификата для безопасного Ldap с правильными OID?

вот мой inf-файл:

 [Version] 

 Signature="$Windows NT$ 

 [NewRequest]
 Subject = "CN=my-server.blahblah.com" ; must be the FQDN of host


 Exportable = TRUE  ; TRUE = Private key is exportable
 KeyLength = 4096    ; Common key sizes: 512, 1024, 2048, 
          ;    4096, 8192, 16384
 KeySpec = 1             ; Key Exchange
 KeyUsage = 0xF8     ;  Digital Signature, Non Repudiation, Key Encipherment, Data     Encipherment, Key Agreement
 MachineKeySet = True
 ProviderName = "Microsoft RSA SChannel Cryptographic Provider"
 ProviderType = 12
 RequestType = CMC

 ; Omit entire section if CA is an enterprise CA
 [EnhancedKeyUsageExtension]
 OID=1.3.6.1.5.5.8.2.2
 OID=1.3.6.1.5.5.7.3.1
 OID=1.3.6.1.5.5.7.3.2
 OID=1.3.6.1.5.5.7.3.3
 OID=1.3.6.1.5.5.7.3.4 
 OID=1.3.6.1.5.5.7.3.5 
 OID=1.3.6.1.5.5.7.3.6 
 OID=1.3.6.1.5.5.7.3.7
 OID=1.3.6.1.5.5.7.3.8
 OID=1.3.6.1.5.5.7.3.9
 OID=1.3.6.1.4.1.311.10.3.4 
 OID=1.3.6.1.4.1.311.54.1.2

 [RequestAttributes]
 CertificateTemplate = MySpecialTemplate  ;Omit  line if CA is a stand-alone CA
 SAN="my-server.blahblah.com"

ВЫ ДОЛЖНЫ СДЕЛАТЬ ШАБЛОН В CA С ИСПОЛЬЗОВАНИЕМ 2003 (НЕ ВСЕ ПРОДУКТЫ MICROSOFT МОГУТ ИСПОЛЬЗОВАТЬ ШАБЛОНЫ 2008 ГОДА - Я ЗНАЮ ГЛУПЫЙ ЭТО) СКОПИРУЙТЕ ЕГО ИЗ КОНТРОЛЛЕРА ДОМЕНА И БРОСАЙТЕ КУХОННУЮ МОЙКУ НА КИСЛОТАХ

0 голосов
/ 29 июля 2011

Просто установите соединение как доверяющее всем. Тогда ему больше не понадобятся сертификаты. Выезд javax.net.sslTrustManager.

...