2

PHP(5.3.2)/ Apache(2.0.59)/ Windows(2003)を使用してActiveDirectoryへの認証を試みています。

ただし、次のエラーが発生します。

ldap_start_tls()[function.ldap-start-tls]:TLSを開始できません:15行目のE:\my_page.phpの接続エラー

これが私の現在のスクリプトです:

putenv('LDAPTLS_REQCERT=never');

$resource = ldap_connect("xxx") 
    or die("Failed to connect to LDAP server."); 

echo "Connected to LDAP server.<br />"; 

//these options may not be necessary in all environments 
ldap_set_option($resource, LDAP_OPT_PROTOCOL_VERSION, 3);    
ldap_set_option($resource, LDAP_OPT_REFERRALS, 0); 

$result = ldap_start_tls($resource) or die("Failed to start TLS.<br />"); 

echo "Started TLS.<br />"; 

$result = ldap_sasl_bind($resource, NULL, '', 'GSSAPI', 'xxx', '', '') 
    or die("Failed to GSSAPI bind.<br />"); 

echo "GSSAPI bound."; 

私は助けを求めてこの質問を見てきました、しかし、私はldap.confへの参照を見続けます。

これは、接続先のLDAPサーバーのようにOpenLDAPの場合ですか?もしそうなら、既存のエンタープライズActive Directoryを使用しているため、無視できますか?

または、これはLDAPサーバーに接続しているPHPライブラリ(つまり、ldap_connect())の場合ですか?

編集#1

Wiresharkのスクリーンショット...

Wiresharkのスクリーンショット

そこに、未知のCAがあります...これをどのように解決しますか(オンラインATMを見て)。

編集#2

更新します。別のエラーが発生します。c:\とc:\ openldap\sysconfにldap.confを作成しました

ldap.confの内容:

#
# LDAP Defaults
#

TLS_REQCERT never

現在、通常のldap_sasl_bindメソッドでスタックしています-インストールされていません。

編集#3

最終製品:

function isAuthenticated($user, $pass){
    //init
    $ldap_server = "";
    $ldap_user = "";
    $ldap_pass = "";
    $ldap_dn = "";
    $ldap_filter_fields = array("dn","cn","samaccountname");
    //establish connection
    $ldap_conn = ldap_connect($ldap_server) 
        or die("Failed to connect to LDAP server."); 

    //these options may not be necessary in all environments 
    ldap_set_option($resource, LDAP_OPT_PROTOCOL_VERSION, 3);    
    ldap_set_option($resource, LDAP_OPT_REFERRALS, 0); 

    //Magic happens here, encrypted tunnel starts!
    $result = ldap_start_tls($ldap_conn) or die("Failed to start TLS.<br />"); 

    $out = 0;
    //connect using our known user
    if($bind = ldap_bind($ldap_conn, $ldap_user, $ldap_pass)){  
        //search for the user
        $ldap_search_results = ldap_search($ldap_conn, $ldap_dn, "samaccountname=".$user, $ldap_filter_fields) or die ("Failed to search LDAP");
        //get entry
        $ldap_record = ldap_get_entries($ldap_conn, $ldap_search_results);
        debug($ldap_record);
        if($ldap_record["count"] > 0){
            //try to authenticate user here
            if($bind2 = @ldap_bind($ldap_conn, $ldap_record[0]["dn"], $pass))
                $out = 1;
            else
                //wrong password
                $out = 0;
        }
        else
            //user wasn't found
            $out = 3;       
    }
    else
        //something happened when connecting with our ldap_user
        $out = 2;

    return $out;    
}
4

2 に答える 2

1

あなたは未知の CA で正しい方向に進んでいます。ADに接続するCentOS上のPHPで同様の問題が発生しました。AD サーバーから CA 証明書をエクスポートし、CentOS システムで信頼されるように構成する必要がありました。これには、証明書を/etc/openldap/cacertsOpenSSL にコピーして実行 することが含まれていましたc_rehash。残念ながら、同じセットアップを Windows で動作させる方法がわかりません。

于 2012-05-10T14:59:08.883 に答える