欢迎各位兄弟 发布技术文章
这里的技术是共享的
我使用的是 linux 服务器 LAMP
如果没有配置 ldap.conf的话,那么可能 ldap能连接上,但是ldaps 就会报 Can't contact LDAP server 的错
1)安装 openldap (linux的apache上要支持 ldap 必须安装它 openldap )
/node-admin/16720 /node-admin/16721
2) 在 /etc/openldap/ldap.conf 中
...................
TLS_CACERTDIR /etc/openldap/certs
#TLS_CACERT /etc/openldap/cacerts/Root.pem
TLS_REQCERT never # 这是最重要的一行表示不使用 ssl 认证
# Turning this off breaks GSSAPI used with krb5 when rdns = false
SASL_NOCANON on
...................
奇了怪了,非要在 /etc/openldap/certs 目录下面加上这几个好像没用的文件才行??
3) php 代码
<?php
error_reporting(E_ALL);
ini_set("display_errors", "1"); // shows all errors
ini_set("display_start_errors", "1"); // shows all errors // "display_startup_errors"
ini_set("log_errors", "on");
ini_set("error_log", "php_errorccc.log");
function drupal_strlen($text) {
global $multibyte;
if ($multibyte == 1) {
return mb_strlen($text);
}
else {
// Do not count UTF-8 continuation bytes.
return strlen(preg_replace("/[\x80-\xBF]/", '', $text));
}
}
function ldap_password_modify($userdn, $new_password, $conn) {
$new_password = "\"" . $new_password . "\"";
$len = drupal_strlen($new_password);
$new_pass = NULL;
for ($i = 0; $i < $len; $i++) {
$new_pass .= "{$new_password[$i]}\000";
}
// $userdn = '16610120@luxshare.com.cn'; // ldap_mod_replace 时 这种 $userdn的参数格式不对
// $userdn = "LUXSHARE\\16610120"; // ldap_mod_replace 时 这种 $userdn的参数格式也不对
$status = ldap_mod_replace($conn, $userdn, ['unicodePwd' => $new_pass]);
if (!$status) {
var_dump(
'ldap_servers',
'Error: password_modify() failed to modify ldap password w/ base DN "!dn"',
['!dn' => $userdn]
);
}
return $status;
}
$host= 'ldaps://192.168.2.88:636';
//$port = '636';//一般都是389
$domain = 'luxshare.com.cn';
$account = '16666788';
$user = '16666788@'.$domain;//域用户名
$password = 'nnnnnnn';//域用户密码
$conn = ldap_connect($host);//不要写成ldap_connect($host.':'.$port)的形式
if ($conn) {
//设置参数
ldap_set_option($conn, LDAP_OPT_PROTOCOL_VERSION, 3);//声明使用版本3
ldap_set_option($conn, LDAP_OPT_REFERRALS, 0); // Binding to ldap server
ldap_set_option(NULL, LDAP_OPT_DEBUG_LEVEL, 7);
$bd = ldap_bind($conn,$user, $password);
//$bd = ldap_bind($conn,'CN=史平忠(16666788),OU=kkkkk,OU=llll,OU=mmmm,DC=xx,DC=yy,DC=zz', $password); //这种$user格式也行
if ($bd) {
echo 'LDAP 绑定成功';//相当于登录成功
$basedn = "ou=XXXX,ou=立讯集团,dc=YYYY,dc=com,dc=cn";
$filter = "SamAccountName=16610120" ; //根据工号 比如 16666739
// $justthese = array('sn', 'department', 'company', 'objectsid', 'mail', 'givenName', 'displayName', 'telephoneNumber', 'memberof', 'samaccountname', 'primarygroupid'); //选择要获取的用户属性
$justthese = array('*'); //选择要获取的用户属性
$sr = ldap_search($conn, $basedn, $filter, $justthese);
echo "<pre>";
$info = ldap_get_entries($conn, $sr);
// print_r($info[0]);
$status = ldap_password_modify('CN=彭华(16610189),OU=JS-Site,OU=立讯集团,DC=luxshare,DC=com,DC=cn','pppppppp',$conn);
var_dump($status);
} else {
echo 'LDAP 绑定失败';
}
} else {
echo '无法连接到AD域服务器';
}
ldap_close($conn);