在我們基於Web的應用程序中,我們支持LDAP認證。它適用於下面的代碼。現在我們希望通過TLS支持LDAP。我們在SUSE Linux Enterprise Server 11上爲我們的客戶託管我們的產品,並且每位客戶可以擁有不同的TLS證書。如何從php/Zend使用LDAP的多個TLS證書?
我的問題是:
- 如何設置了SUSE服務器(即LDAP客戶端) - 在哪裏放置證書爲每一個客戶,我是否需要修改任何的conf文件?
- 如何製作通過TLS進行LDAP身份驗證,使用來自php的不同證書。什麼是確切的PHP語法?
- 服務器的類型是否重要? Exchange,OpenLDAP等?
- 現在我們有來自Exchange的.cer證書。 OpenLDAP可以嗎?或者它必須轉換(如何)到.pem?
SUSE服務器= LDAP客戶端配置
- SUSE Linux企業服務器11(x86_64的)
- 的ldapsearch:@(#)$的OpenLDAP:ldapsearch的2.4.26(2012年9月26日13: 14:42)
- PHP版本5.4.9
- Zend引擎V2.4.0
從閱讀http://php.net/ldap_connect我明白我可以使用不同的證書,但我沒有得到如何。
function authenticateZendAuth($username, $password){
require_once 'Zend/Auth.php';
$auth = Zend_Auth::getInstance();
$ldapOptions = getConfigVariableValue('->ldap');
$options = $ldapOptions->toArray();
unset($options['log_path']);
require_once 'Zend/Auth/Adapter/Ldap.php';
$adapter = new Zend_Auth_Adapter_Ldap($options, $username, $password);
$authenticated = $auth->authenticate($adapter);
$log_path = $ldapOptions->log_path;
if ($log_path) {
$messages = $authenticated->getMessages();
require_once("Zend/Log.php");
require_once("Zend/Log/Writer/Stream.php");
require_once("Zend/Log/Filter/Priority.php");
$logger = new Zend_Log();
$logger->addWriter(new Zend_Log_Writer_Stream($log_path));
$filter = new Zend_Log_Filter_Priority(Zend_Log::DEBUG);
$logger->addFilter($filter);
foreach ($messages as $i => $message) {
if ($i-- > 1) { // $messages[2] and up are log messages
$message = str_replace("\n", "\n ", $message);
$logger->log("Ldap: $i: $message", Zend_Log::DEBUG);
}
}
}
return $authenticated;
}
如果我不完全錯在這裏,證書的數目對PHP編碼端沒有影響。服務器需要相互信任其他證書。您必須在Ldap-Adapter中設置的所有內容都是配置選項'useStartTls = true'。伊莫這是服務器配置,所以也許更好地服務於serverfault.com – Sam 2013-03-07 07:33:06
我認爲我需要指定哪種證書將用於特定的LDAP連接... – Radek 2013-03-07 21:18:43
請參閱http://www.php.net/ manual/de/function.ldap-connect.php#36156 - 你也可以通過'putenv()'設置'TLS_ *'-Stuff。沒有「ZF方式」這樣做;) – Sam 2013-03-07 22:10:18