Web ベースのアプリケーションでは、LDAP 認証をサポートしています。以下のコードで問題なく動作します。ここで、LDAP over TLS をサポートしたいと考えています。SUSE Linux Enterprise Server 11 でお客様のために製品をホストしており、各お客様は異なる TLS 証明書を持つことができます。
私の質問は次のとおりです。
- SUSE サーバー(つまり、LDAP クライアント) のセットアップ方法- 各顧客の証明書を配置する場所、conf ファイルを編集する必要はありますか?
- php とは異なる証明書を使用して TLS 経由で LDAP 認証を行う方法。正確な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;
}