代码之家  ›  专栏  ›  技术社区  ›  Señor Reginold Francis

php ldap工作不安全

  •  2
  • Señor Reginold Francis  · 技术社区  · 15 年前

    我正在尝试让PHP中的ldaps客户机工作。我的代码已经到位,它使用标准LDAP协议工作。

    但是,当我将ldap://server更改为ldaps://server时,它不起作用。将调试模式设置为7会产生此错误。我应该添加一个使用OpenSSL的Linux服务器。

    TLS: can't connect: The Diffie Hellman prime sent by the server is not acceptable (not long enough)..
    

    有没有什么方法可以克服这个问题?更改LDAP服务器上的任何内容都不是一个选项,因为我对它只有客户端特权。

    edit:my ldap.conf中的唯一设置是

    TLS请求证书从不

    这是我的代码

    if(isset($_POST['pass'])){
        $username = $_POST['user'];
        $password = $_POST['pass'];
    
        ldap_set_option(NULL, LDAP_OPT_DEBUG_LEVEL, 7);
    
    
    
        $ds=ldap_connect("ldaps://server.com");  
    
        ldap_set_option($ds, LDAP_OPT_REFERRALS, 0);
        ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3) ;
        //Check LDAP server for user
            if(!@ldap_bind($ds, "uid={$username},ou=people,o=site.ca,o=site", "{$password}") || strlen($password)==0){
        //      LDAP login was not successful
                printf("Sorry, wrong username/password\n\n\n");
                return;
            }
    
        $ldapSearch=@ldap_search($ds, "ou=people,o=site.ca,o=site", "uid={$_POST['user']}");
        $result = @ldap_get_entries($ds, $ldapSearch);
    
    
    }
    
    2 回复  |  直到 11 年前
        1
  •  2
  •   Brad Mace Mike King    15 年前

    这可能是由于您的libgnutls版本中的错误造成的。

    http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=440344

        2
  •  -1
  •   geoffc    15 年前

    首先,这是给赖森的?快点!(我以前在约克大学工作过!我要在市中心开玩笑。可能更糟,你可能在你的T!).但是说真的,根据后端的LDAP服务器,有两种常见的方法。

    ldaps://ldap.ryerson.ca:636可能工作得更好,因为它将尝试执行SSL绑定,希望您已信任用于SSL的证书签名CA的公钥。

    tls实际上是ssl v3.1,它添加的一个非常好的特性是,它在端口389上也可以正常工作,但可以发出starttls命令,该命令采用您在389上启动的明文连接并启用加密。

    我的怀疑是,从错误代码来看,它试图在明文端口上创建LDAP over SSL,但这将失败。