簡體   English   中英

PHP ldap_connect使用ldaps連接到Active Directory時遇到未知CA錯誤

[英]PHP ldap_connect using ldaps to connect to Active Directory getting Unknown CA error

我正在嘗試在Windows 2012服務器上使用PHP 7連接到MS Active Directory(運行apache 2.4,但這應該與我遇到的問題無關)。

我還應該注意,我能夠從命令行和apache服務器使用非安全LDAP從PHP連接到AD。

當我執行以下PHP測試文件時,從Web上的命令行獲取源: http : //muzso.hu/2012/04/02/php-ldap-ssl-ldaps-authentication-in-windows-running-apache服務器:


$AD_search_bind_DN = 'CN=someuser,OU=Users,DC=example,DC=com';
$AD_search_bind_PW = 'secret123';
ini_set('display_errors', 1);
error_reporting(E_ALL);
ldap_set_option(NULL, LDAP_OPT_DEBUG_LEVEL, 7);
$conn = ldap_connect('ldaps://SomeDC.example.com/') or die("Failed to connect to ldap server.");
ldap_set_option(NULL, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_bind($conn, $AD_search_bind_DN, $AD_search_bind_PW) or die("Failed to bind to ldap server: " + ldap_error($conn));
echo "Successful LDAP bind.";

我得到以下輸出(我突出顯示了錯誤):


ldap_url_parse_ext(ldap:// localhost /)
ldap_init:嘗試%SYSCONFDIR%\\ ldap.conf
ldap_init:HOME環境為NULL
ldap_init:嘗試ldaprc
ldap_init:LDAPCONF環境為NULL
ldap_init:LDAPRC環境為NULL
ldap_create
ldap_url_parse_ext(ldaps://SomeDC.example.com/)
ldap_sasl_bind_s
ldap_sasl_bind
ldap_send_initial_request
ldap_new_connection 1 1 0
ldap_int_open_connection
ldap_connect_to_host:TCP SomeDC.example.com:636
ldap_new_socket:244
ldap_prepare_socket:244
ldap_connect_to_host:嘗試{已刪除SomeDC的IP地址}:636
ldap_pvt_connect:fd:244 tm:-1異步:0
嘗試連接:
連接成功
TLS跟蹤:SSL_connect:之前/連接初始化
TLS跟蹤:SSL_connect:SSLv2 / v3寫入客戶端問候A
TLS跟蹤:SSL_connect:SSLv3讀取服務器問候A
TLS證書驗證:深度:1,錯誤:20,主題:/ DC = com / DC = example / C
N =自定義名稱SHA256-SubCA,頒發者:/ CN = ITSS-Ent-SHA256-Root
TLS證書驗證:錯誤,無法獲取本地發行者證書
TLS跟蹤:SSL3警報寫入:致命:未知CA
TLS跟蹤:SSL_connect:錯誤錯誤
TLS跟蹤:SSL_connect:錯誤錯誤
TLS:無法連接:錯誤:14090086:SSL
例程:ssl3_get_server_certificate:證書驗證失敗(無法獲取本地發行者證書)。
ldap_err2字符串
PHP警告:ldap_bind():無法綁定到服務器:在第10行的C:\\ test_bind.php中無法聯系LDAP服務器


我在php.ini文件中同時注釋了php_ldap和php_openssl擴展名。

我有DER和PEM格式的AD CA證書的副本,但是我不確定將這些文件放在Web服務器上的位置。 有很多與Linux OS相關的帖子,只是說要在我的ldap.conf文件中放置“ TLS_CACERT C:\\ openldap \\ sysconf \\ cacert.pem”。 我沒有運行openLDAP,也沒有ldap.conf文件。

我已經安裝了openSSL,但是我不能完全確定配置是否正確:

  • openssl.cfg文件未更改: http : //pastebin.com/KxnWThXh
  • 我添加了一個環境變量“ OpenSSL”,它指向openssl.cfg文件
  • 當我從cmd行執行'openssl version -a'時,它顯示: OPENSSLDIR:/ usr / local / ssl對Windows顯然沒有意義。 完整的輸出可以在這里看到: http : //pastebin.com/h3ei3Pwp

==編輯1:========================================

加百利,感謝您的建議/參考。

我現在也嘗試了這些事情,但沒有成功:

  • 在C:\\和C:\\ openldap中創建了ldap.conf和openldap.conf文件(使用基於各種文章建議的多種格式,請參閱我在這里嘗試的變體: http ://pastebin.com/aP94Nh4Y) \\ sysconf
  • 本文( https://www.reddit.com/r/PHPhelp/comments/3tykpc/php_7_and_ldap/ )說要創建一個名為LDAPCONF的環境變量,該變量指向ldap.conf文件(C:\\ openldap \\ sysconf \\ ldap.conf)。 是的 沒變。
  • 我在執行測試php腳本的輸出中注意到了這一點(輸出的第2行): ldap_init:嘗試%SYSCONFDIR%\\ ldap.conf SYSCONFDIR環境變量尚不存在,因此我添加了一個值為'C:\\ openldap \\ sysconf \\'的變量。 - 沒變。
  • 在我的ldap.conf / openldap.conf文件的所有位置中引入了明顯的語法錯誤,以查看是否可以更改測試腳本輸出以知道它至少在查看這些文件之一,而沒有改變。

==編輯2:=======================================

Gabriel,感謝您的過程監控技巧。 現在,我至少可以確認PHP 7正在使用“ LDAPCONF”環境值路徑來查找和讀取此ENV變量指向的ldap.conf文件。

還似乎PHP 7沒有正確處理'SYSCONFDIR'環境變量,因為它首先嘗試在以下文字路徑中打開文件:E:\\ httpd \\ www \\%SYSCONFDIR%\\ ldap.conf

它仍然沒有工作,但是現在我可以集中精力調整我知道正在讀取的一個文件。

如果有人有其他配置建議,或者可以從正在運行的Windows安裝中共享ldap.conf文件,我將不勝感激。


現在 仍然陷於困境,不知道該怎么辦。 請幫忙!

此處的答案應該有所幫助: https : //stackoverflow.com/a/6047293/1202807

在Windows上的XAMPP下,ldap.conf必須位於系統根目錄(c:\\ ldap.conf,如果我沒有記錯的話,則為PHP 5.3.3),或者位於C:\\ openldap \\ sysconf \\中,具體取決於PHP版本。 似乎該路徑不可配置,因為在Windows PHP DLL中進行了硬編碼。 參見http://se2.php.net/manual/en/ref.ldap.php上的評論

因此,如果尚不存在,請在c:\\或C:\\ openldap \\ sysconf \\中創建ldap.conf文件,然后將TLS_CACERT行放入其中。

我有類似的問題,我花了一些時間解決它。 此行為是PHP中的OpenLDAP錯誤。 我已經報告了它,它已經修復,將很快發布。 請參閱:PHP BUG#73243( https://bugs.php.net/bug.php?id=73243

如果您需要立即修復(有點hacking),請嘗試此操作(后果自負):

  • 使用一些二進制編輯器(例如HexEdit)編輯php_ldap.dll
  • 找到表達式“%SYSCONFDIR%\\ ldap.conf”,然后
  • 將其替換為“ c:\\ ldap_conf \\ ldap.conf”,新常量的長度必須與替換常量的長度相同
  • 將ldap配置復制到新位置

希望能幫助到你 :-)

暫無
暫無

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

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