在我们基于 Web 的应用程序中,我们支持 LDAP 身份验证。它适用于下面的代码。现在我们要支持 LDAP over TLS。我们在 SUSE Linux Enterprise Server 11 上为客户托管我们的产品,每个客户可以拥有不同的 TLS 证书。
我的问题是:
- 如何设置 SUSE 服务器(即 LDAP 客户端) - 为每个客户放置证书的位置,我需要编辑任何 conf 文件吗?
- 如何使用来自 php 的不同证书通过 TLS 进行 LDAP 身份验证。什么是确切的 php 语法?
- 什么类型的服务器有关系吗?交换、OpenLDAP 等?
- 现在我们有来自 Exchange 的 .cer 证书。对于 OpenLDAP 是否可以,或者必须将其(如何)转换为 .pem?
SUSE 服务器 = LDAP 客户端配置
- SUSE Linux Enterprise Server 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;
}