我有一个Active Directory服务器和一个托管PHP Web应用程序的Windows WAMP服务器,需要能够使用Kerberos对Active Directory进行身份验证。
我能够使用一些示例PHP代码轻松连接并绑定到Active Directory主机,但我不确定如何使用Kerberos执行此操作。我看到很多论坛和博客详细介绍了如何在* NIX机器上执行此操作,但这对我的情况没有帮助。
我确实使用Wireshark和Fiddler来确认没有Kerberos或NTLM协商发生。
我用来连接和绑定到LDAP的示例代码:
<?php
$ldaphost = "example.domain.com";
$ldapport = 389;
$ldapuser = "user";
$ldappass = "password";
$ldapconn = ldap_connect( $ldaphost, $ldapport )
or die( "Unable to connect to the LDAP server {$ldaphost}" );
if ($ldapconn)
{
$ldapbind = ldap_bind($ldapconn, $ldapuser, $ldappass);
if ($ldapbind)
{
echo "LDAP connection successful";
}
else
{
echo "LDAP connction failed";
}
}
?>
非常感谢任何帮助,谢谢!
更新:我整天都在努力解决这个问题,我想我需要使用ldap_sasl_bind(),可能使用GSSAPI作为机制......无论我在ldap_sasl_bind中输入什么参数(),我收到以下错误:'无法绑定到服务器:未知的身份验证方法'
我不确定如何实现GSSAPI,但我看到的一些示例使用ldap_start_tls()显示,但我一直收到“无法启动TLS:服务器不可用”错误。
我不知道是否有人知道ldap_sasl_bind()(由PHP未记录)或ldap_start_tls,但如果这是我应该采取的方式,请指出我正确的方向。
答案 0 :(得分:1)
我无法解决Kerberos问题,因为我自己仍然在努力解决这个问题。但是,我可以为TLS指出正确的方向。 TLS至少会阻止您的凭据以明文形式通过网络传输。 TLS需要正确配置OpenLDAP。至少,您可以将客户端配置为不请求或检查任何服务器证书。您可以通过在ldap.conf配置文件的顶部添加以下行来完成此操作。
TLS_REQCERT never
您的ldap.conf文件应位于 C:\ 或 C:\ openldap \ sysconf 中,具体取决于您的PHP和OpenLDAP版本。您的设置中可能尚不存在该文件。您也可以通过环境变量putenv(TLS_REQCERT=never);
设置配置,但我自己没有尝试过,并且其他人报告的结果似乎不一致。
答案 1 :(得分:0)
您需要做什么:确保PHP中的LDAP接口是针对SASL编译的,支持GSS-API机制,并使用keytabs或Windows自带的SSPI接口。祝你好运。
答案 2 :(得分:0)
我在Windows上通过创建基于c ++ ldap_bind_s的可执行文件解决了此问题。我将此可执行文件用作带有参数的命令行:主机,用户名,密码。这是我将其用于GSSAPI的唯一方法。
WINLDAPAPI ULONG LDAPAPI ldap_bind_s( LDAP *ld, const PSTR dn, const PCHAR cred, ULONG method );
我使用了LDAP_AUTH_NEGOTIATE。