如何从php/Zend为LDAP使用多个TLS证书?
在基于web的应用程序中,我们支持LDAP身份验证。它可以与下面的代码配合使用。现在我们希望通过TLS支持LDAP。我们在SUSE Linux Enterprise Server 11上为客户托管我们的产品,每个客户都可以拥有不同的TLS证书 我的问题是:如何从php/Zend为LDAP使用多个TLS证书?,php,zend-framework,ldap,certificate,Php,Zend Framework,Ldap,Certificate,在基于web的应用程序中,我们支持LDAP身份验证。它可以与下面的代码配合使用。现在我们希望通过TLS支持LDAP。我们在SUSE Linux Enterprise Server 11上为客户托管我们的产品,每个客户都可以拥有不同的TLS证书 我的问题是: 如何设置SUSE服务器(即LDAP客户端)——在何处放置每个客户的证书,我是否需要编辑任何conf文件 如何使用来自php的不同证书通过TLS进行LDAP身份验证。确切的php语法是什么 服务器的类型是否重要?Exchange、OpenLD
- 如何设置SUSE服务器(即LDAP客户端)——在何处放置每个客户的证书,我是否需要编辑任何conf文件
- 如何使用来自php的不同证书通过TLS进行LDAP身份验证。确切的php语法是什么
- 服务器的类型是否重要?Exchange、OpenLDAP等
- 现在我们有交易所的.cer证书。OpenLDAP可以吗?或者它必须(如何)转换为.pem
- SUSE Linux企业服务器11(x86_64)
- ldapsearch:@(#)$OpenLDAP:ldapsearch 2.4.26(2012年9月26日13:14:42)
- PHP版本5.4.9
- Zend Engine v2.4.0
从阅读中我了解到我可以使用不同的证书,但我不知道如何使用
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;
}
如何设置我们的SUSE服务器(即LDAP客户端)——在哪里为每个客户放置证书,我是否需要编辑任何conf文件
如果您使用的是openssl(slapd),那么将证书放在哪里并不重要,只要您可以将配置文件设置为指向。它可能看起来像这样:
TLSCACertificateFile /usr/var/openldap-data/cacert.pem
TLSCertificateFile /usr/var/openldap-data/servercrt.pem
TLSCertificateKeyFile /usr/var/openldap-data/serverkey.pem
您需要请求(或创建自己的)证书,这些证书与您用于HTTPS的证书相同。这是导入域名的地方,当您创建/请求证书时,它需要与您将要使用它的域名匹配。有关更多详细信息,请参阅
如何使用不同于php的证书通过TLS进行LDAP身份验证。确切的php语法是什么
你真的不需要在这里做什么特别的事。确保使用名为certificate的适当域设置LDAP服务器。并确保本地openladap客户端(运行php)通过其配置文件识别该证书的签名权限。然后请注意,许多Zend示例()使用配置文件来设置Zend LDPA客户端并打开TLS。您还可以使用Zend_Ldap::setOptions()-请参阅
服务器的类型是否重要?Exchange、OpenLDAP等?
不,不是真的。我的意思是,配置LDAP服务器很重要,但php客户端根本不关心
现在我们有交易所的.cer证书。OpenLDAP可以吗?或者它必须(如何)转换为.pem
见:
如果我没有完全错的话,证书的数量对PHP编码方面没有影响。服务器需要相互信任证书。您需要在Ldap适配器中设置的全部内容是配置选项
useStartTls=true
。在我看来,这是服务器配置,所以在serverfault.com上服务可能更好。我认为我需要以某种方式指定哪个证书将用于特定的LDAP连接…请参阅-您也可以通过putenv()
设置那些TLS.*
-东西。没有“ZF方式”可以做到这一点;)我不明白的是如何将特定的服务器证书与服务器名称链接起来。从您提供的链接中,您要连接到的服务器的名称很重要。如果您在“ldaps://”URI中指定的服务器名称与其证书中的服务器名称不匹配,它将投诉
gooood答案。我会让我们的开发者去看看。我接受他们的审查后。谢谢,有用吗?你还需要更多吗?我注意到我得到了赏金,但答案并没有被选为“答案”。。。你还需要更多的时间来回答这个问题吗?我试着让我们的开发者去研究它…谢谢。
openssl x509 -inform der -in certificate.cer -out certificate.pem