3

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;
}
4

1 に答える 1

2

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 に使用する証明書と同じです。これは、ドメイン名がインポートされる場所です。証明書を作成/要求するときは、証明書を使用するドメイン名と一致する必要があります。詳細については、 http : //www.openldap.org/pub/ksoper/OpenLDAP_TLS.htmlを参照してください。

PHP とは異なる証明書を使用して TLS 経由で LDAP 認証を行う方法。正確なphp構文は何ですか?

ここでは特に何もする必要はありません。適切なドメイン名の証明書を使用して LDAP サーバーを設定していることを確認してください。そして、その証明書の署名機関が、ローカルの openladap クライアント (php を実行している) によって、その構成ファイルを介して認識されていることを確認してください。次に、Zend の例 ( http://files.zend.com/help/Zend-Framework/zend.auth.adapter.ldap.html ) の多くが構成ファイルを使用して Zend LDPA クライアントをセットアップし、TLS をオンにしていることに注意してください。 . Zend_Ldap::setOptions() を使用することもできます - http://framework.zend.com/manual/1.12/en/zend.auth.adapter.ldap.htmlのメモを参照してください

サーバーの種類は重要ですか? Exchange、OpenLDAP など? いいえ、そうではありません。つまり、LDAP サーバーの構成は重要ですが、php クライアントはまったく気にしません。

現在、Exchange からの .cer 証明書があります。それは OpenLDAP で問題ありませんか、それとも (どのように) .pem に変換する必要がありますか?

参照: http://www.sslshopper.com/article-most-common-openssl-commands.html

openssl x509 -inform der -in certificate.cer -out certificate.pem
于 2013-03-26T21:05:12.463 に答える