2017-04-15 4 views
7

PHP adLDAP version 4.04을 사용해 기업 네트워크에서 인증을 시도하고 있습니다. PHP adLDAP 오류 - 서버에 바인딩 할 수 없습니다. 강력한 인증이 필요합니다.

PHP Version 5.2.4

나는이 PHP ldap - Strong(er) authentication required, 운 게시 유래했습니다.

나는 이 아니요.이 도메인 컨트롤러의 관리자입니다. 나는 쿼리 할 수 ​​있어야합니다.

나는 도메인 컨트롤러는 Windows Server 2012 R2 Standard입니다

HOSTNAMEOFDC.domain.location.company.com (내 도메인 컨트롤러의 FQDN)을 Ping 할 수 있어요.

DsQueryPowerShell AD Module을 사용하여이 도메인 컨트롤러에 아무런 문제없이 성공적으로 쿼리했으며 수동으로 입력해야하는 인증이 없습니다.

내 코드 : 나는 "use_ssl" => true"의 주석 때이 오류 얻을 그리고

Warning: ldap_bind() [function.ldap-bind]: Unable to bind to server: Strong(er) authentication required in C:\xampp\htdocs\Workspace\Project\scripts\includes\php\adLDAP\src\adLDAP.php on line 712 
Strong(er) authentication required 
User authentication unsuccessful 

:

참고로, sslphp.ini

에로드를
<?php 
require_once("includes/php/adLDAP/src/adLDAP.php"); 
$username = "domain\\username"; // also tried just "username" 
$password = "somepassword"; 

// All possible settings are listed in this array 
$options = array(
     "account_suffix" => "@domain.location.company.com", 
//  "admin_username" => $username, 
//  "admin_password" => $password, 
//  "ad_port" => "636", 
//  "base_dn" => "DC=domain,DC=location,DC=company,DC=com", 
     "domain_controllers" => array("HOSTNAMEOFDC.domain.location.company.com"), 
//  "real_primarygroup" => "", 
//  "recursive_groups" => "", 
//  "use_ssl" => true 
//  "use_tls" => true 
); 

$adldap = new adLDAP($options); 


// $authUser = $adldap->user()->authenticate($username, $password); 
$authUser = $adldap->user()->authenticate($username,$password); 
if ($authUser) { 
    echo "User authenticated successfully"; 
} else { 
    // getLastError is not needed, but may be helpful for finding out why: 
    echo $adldap->getLastError() . "<br>"; 
    echo "User authentication unsuccessful"; 
} 

// Destroy 
$adldap->close(); 
$adldap->__destruct(); 
?> 

내가 오류
Warning: ldap_bind() [function.ldap-bind]: Unable to bind to server: Can't contact LDAP server in C:\xampp\htdocs\Workspace\Project\scripts\includes\php\adLDAP\src\adLDAP.php on line 712 
Can't contact LDAP server 
User authentication unsuccessful 

는 또한 "use_tls" => true" 주석을 시도하고이 오류 얻을 :

이 대답은 PHP 5.2 -5.3에 관한됩니다
Warning: ldap_start_tls() [function.ldap-start-tls]: Unable to start TLS: Connect error in C:\xampp\htdocs\Workspace\Project\scripts\includes\php\adLDAP\src\adLDAP.php on line 638 

Warning: ldap_bind() [function.ldap-bind]: Unable to bind to server: Can't contact LDAP server in C:\xampp\htdocs\Workspace\Project\scripts\includes\php\adLDAP\src\adLDAP.php on line 712 
Can't contact LDAP server 
User authentication unsuccessful 
+0

사용자 이름을 수락하도록 서버를 구성 할 수 있지만 Ldap 바인드는 사용자 이름이 아닌 rdn으로 수행됩니다. 프로토콜 버전도 확인하십시오. 일부는 버전 3으로 설정해야합니다. – frz3993

+0

@ frz3993 필자의 신입 회원을 용서할 수 없다. 예제 RDN은 무엇이겠습니까? 'Doman \ username'처럼? –

+0

'uid = 12345, ou = people'와 같이 DN의 구성 요소와 더 비슷합니다. 일부 서버는 domain \ username을 허용합니다. 그러나 나는 이것이 문제라고 생각하지 않는다. – frz3993

답변

4

는,이 버그는 (아마) 최신 버전에서 수정되었습니다

을 고의로, PHP가 오류를 다시 나타낼 때 서버에 바인딩 할 수 없습니다 : 강력한 (인증) 인증이 필요합니다 - 사실 인증서 또는 인증서 그룹이 필요합니다. 귀하의 로컬 컴퓨터에이고 .conf fi 르 그들에게 가리 킵니다.

디렉토리를 만들었습니다 : C:\openldap\sysconf (이전에는 존재하지 않았습니다).

나는 당신이 아마 거기에 /etc 또는 하위 디렉터리에 넣어 것입니다 * nix에서 스크립트에서

C:\openldap\sysconf에서 파일 ldap.conf을했다,하지만 난 아직 테스트하지 않았습니다.

저는 우리 인증서에 대한 PEM 파일을 찾아서 디렉토리에서 추출했습니다 (PEM 파일은 기본적으로 하나의 파일에있는 인증서의 전체 체인입니다). 당신이 PEM 인증서에서 얻을 수없는 경우 TLS_CACERT C:\openldap\sysconf\Certs.pem

, 대신 TLS_REQCERT never를 사용할 수 있습니다 ldap.conf

나는 라인을 추가했다. 이렇게 할 때주의하십시오.이렇게하면 중간 공격에서 자신을 사람에게 드러내게됩니다. 엔드 포인트의 유효성을 검증하지 않습니다.

일단 이렇게하면 성공적으로 바인딩됩니다.

그래도 작동하지 않으면 ldap.confC:\ (루트 수준)에 넣어보십시오. 그것은 당신이 사용하고있는 PHP의 버전에 달려 있다고 보입니다 - 그것은 다른 곳에서 ldap.conf을 찾기로 결정합니다.