gpt4 book ai didi

php - 使用 LDAP/PHP/IIS/SSL 在 Active Directory 中更改密码

转载 作者:太空宇宙 更新时间:2023-11-03 12:55:40 24 4
gpt4 key购买 nike

首先,这可能不是一个编程问题,更多的是我如何配置 LDAPS 问题,但是这里...

背景信息:

我有两台 Windows 2008 R2 服务器。一个是带有 Active Directory (AD) 的域 Controller (DC),我想通过 LDAP 与之通信。这个名为 TestBox.TestDomain.local。另一台服务器正在运行 IIS、PHP(使用 ldap 和 openssl)和 mySQL。

什么是/不工作:

我可以通过端口 389 成功连接到不安全的 DC,并将数据读/写到 AD。我不能做的是更改或设置用户密码,因为这需要在端口 636 上使用 LDAPS(带 SSL 的 LDAP)进行安全连接。

我需要什么帮助:

我已尝试使用此处找到的信息安装 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";
}
}

最佳答案

只有两条建议:

  1. 在 AD CS 安装期间,在指定安装类型页面中,单击企业,然后单击下一步。
  2. AD 服务应该为自己获取自己的证书,但如果它像在 Windows Server 2003 中一样工作,则必须重新启动服务器才能使其工作。也许只是停止并重新启动 W2K8 R2 中的服务。

之后,您可以尝试构建一个证书并将其安装在 AD 服务帐户上,就像您可以在 ADAM 上找到它一样。

关于php - 使用 LDAP/PHP/IIS/SSL 在 Active Directory 中更改密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5719082/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com