簡體   English   中英

無法通過 SSL 在 php 中針對 Active Directory LDAP 進行綁定?

[英]Can't bind in php against Active Directory LDAP over SSL?

我們有一個 IIS php 站點,它使用 LDAP 對 Active Directory 進行身份驗證,特別是使用 ldap_connect 和 ldap_bind。 這工作正常,但我們正在為掛起的更改做准備,以只允許簽名的 LDAP 綁定到 AD。 當我將我的代碼更新為我認為應該可以工作的時候,我遇到了身份驗證失敗,但我無法獲取實際的錯誤代碼來幫助進行故障排除。

截至目前,我們的域控制器上禁用了 TLS 綁定,我只想使用超過 636 的 AD SSL 綁定(而不是超過 389 的 TLS)。 我們在 Server 2008 R2 服務器上的 IIS 6.1 上使用 PHP 5.6.30...我們構建了遷移目標,即 IIS 10 和 PHP 7.2 上的 Server 2016,我們看到了相同的結果。 php_openssl 和 php_ldap 是啟用的擴展。

這是當前的代碼:

    $this->AD_SERVER = $config['AD_SERVER'];
    assert(is_string($password));
    if ($password == "") {
        throw new \SimpleSAML\Error\Error('NOPASSWORD');
    }
    $ldap = ldap_connect($this->AD_SERVER);
    $ldaprdn = 'DOMAINPREFIX' . "\\" . $user;
    ldap_set_option(NULL, LDAP_OPT_DEBUG_LEVEL, 9);
    ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3);
    ldap_set_option($ldap, LDAP_OPT_REFERRALS, 0);
    $bind = @ldap_bind($ldap, $ldaprdn, $password);

這工作正常。 此后,使用“ldap_search”和“ldap_get_entries”拉取屬性成功。 用戶名和密碼由嘗試進行身份驗證的用戶提供; 綁定發生在身份驗證用戶的憑據下。

如果我將第一行更改為以下內容,我只會遇到身份驗證失敗,不再有描述性錯誤:

    $this->AD_SERVER = 'ldaps://'.$config['AD_SERVER'].':636';
    assert(is_string($password));
    if ($password == "") {
        throw new \SimpleSAML\Error\Error('NOPASSWORD');
    }
    $ldap = ldap_connect($this->AD_SERVER);
    $ldaprdn = 'DOMAINPREFIX' . "\\" . $user;
    ldap_set_option(NULL, LDAP_OPT_DEBUG_LEVEL, 9);
    ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3);
    ldap_set_option($ldap, LDAP_OPT_REFERRALS, 0);
    $bind = @ldap_bind($ldap, $ldaprdn, $password);

我弄亂了“LDAP_OPT_X_TLS_REQUIRE_CERT”並禁用了其他 tls 東西,但這沒關系(我認為不會)。

在域控制器上,對於失敗的嘗試,我根本看不到 2280-2290 之間的 eventID(我認為這會暴露綁定錯誤)。 此外,當配置不安全綁定時,我只看到 4776(身份驗證嘗試),當安全綁定失敗時,我根本沒有嘗試。 我相信存在綁定問題,但是我似乎無法公開任何日志來幫助診斷它。

我發現很多文章都指出如何為 openldap 執行此操作,但我發現幾乎沒有任何記錄 AD LDAP 簽名綁定的內容。 我看到很多人表示我們應該切換到 TLS,因為 636 上的 SSL 綁定是一種非標准的 LDAP 事物,僅適用於 AD,但是如果可能,我們真的希望避免這種情況。 任何援助將不勝感激。

在這篇博文中找到了答案: https : //ashleyknowles.net/2011/07/iis-php-and-ldaps-with-active-directory/

以 Base64 X.509 格式導出根 CA

創建 C:\\OpenLDAP\\sysconf\\ 目錄樹(不要安裝 OpenLDAP,只制作文件夾)

將根 CA 證書復制到網絡服務器 (C:\\OpenLDAP\\sysconf\\webcert.crt)

使用以下幾行創建 C:\\OpenLDAP\\sysconf\\ldap.conf:

TLS_REQCERT 從不

TLS_CACERT c:\\openldap\\sysconf\\webcert.crt

使用 ldap_connect(“ldaps://servername//”) 連接

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM