PDA

View Full Version : OpenLDAP, creazione ok, autenticazione KO :(


leccher
25-06-2009, 10:47
Ciao a tutti,
ho installato OpenLDAP v 2.4.16 (l'ultima attualmente) su un OpenSolaris 10.9 (non dovrebbe centrare nulla ma metto per completezza). Il demone parte con questa semplice configurazione
________________________________
...
include /usr/local/etc/openldap/schema/core.schema
include /usr/local/etc/openldap/schema/cosine.schema
include /usr/local/etc/openldap/schema/inetorgperson.schema
include /usr/local/etc/openldap/schema/java.schema
...
pidfile /usr/local/var/run/slapd.pid
argsfile /usr/local/var/run/slapd.args
...
database bdb
suffix "dc=customer,dc=project,dc=com"
rootdn "cn=Admin,dc=customer,dc=project,dc=com"
...
rootpw mypwd
...
directory /usr/local/var/openldap-data
...
index objectClass eq
...
access to attrs=userPassword
by users read
by self write
________________________________

Devo creare degli utenti che poi devono autenticarsi tramite 'sto LDAP. Per fare delle prove, ho creato una semplice classe Client in Java prendendo spunto da un esempio offerto da JavaStaff.it. Usando un browser LDAP vedo gli utenti creati ma non capisco come mai non riesco a farli autenticare.

Ecco cosa uso per provare.
________________________________
import javax.naming.*;
import javax.naming.directory.*;

import java.util.Hashtable;

/**
* Demonstrates how to create an initial context to an LDAP server
* using simple authentication.
*/

class SimpleLdapClient {
static String dcbase="dc=customer,dc=project,dc=com";
static String base = "ou=users,"+dcbase;
static String ldapurl="ldap://10.220.22.107:389";

public static void main(String[] args) {
try{
create("test");
login("test");
}catch(Exception ex){
ex.printStackTrace();
}
}

public static void create(String str){
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, ldapurl);
env.put(Context.SECURITY_PRINCIPAL, "cn=Admin,"+dcbase);
env.put(Context.SECURITY_CREDENTIALS, "mypwd");

try {
DirContext ctx = new InitialDirContext(env);
//Creazione attributi utente:
Attribute objClasses = new BasicAttribute("objectclass");
objClasses.add("top");
objClasses.add("person");
objClasses.add("inetOrgPerson");
Attribute cn = new BasicAttribute("cn", str);
Attribute sn = new BasicAttribute("sn", str);
Attribute uid = new BasicAttribute("uid", str+"."+str);
Attribute userPassword = new BasicAttribute("userPassword",str);

Attributes attributi = new BasicAttributes();
attributi.put(objClasses);
attributi.put(cn);
attributi.put(sn);
attributi.put(uid);
attributi.put(userPassword);

ctx.createSubcontext("cn="+str+","+base, attributi);

}
catch (NameAlreadyBoundException nabe){
System.err.println("DN already exists!");
nabe.printStackTrace();
}
catch (Exception e){
e.printStackTrace();
}
}

public static void login(String str) throws Exception{
Hashtable authEnv = new Hashtable();
String userName = str+"."+str;
String dn = "uid="+userName+","+base;

authEnv.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");
authEnv.put(Context.PROVIDER_URL, ldapurl);
authEnv.put(Context.SECURITY_AUTHENTICATION, "simple");
authEnv.put(Context.SECURITY_PRINCIPAL, dn);
authEnv.put(Context.SECURITY_CREDENTIALS, str);

try {
DirContext authContext = new InitialDirContext(authEnv);
System.out.println("Authentication Success!");
} catch (AuthenticationException authEx) {
System.out.println("Authentication failed!");
authEx.printStackTrace();
} catch (NamingException namEx) {
System.out.println("Something went wrong!");
namEx.printStackTrace();
}
}
}
________________________________

Come detto, la crazione va in OK (ou=users c'è xché preconfigurato con apposito semplicissimo ldif, il problema non è lì), ma l'autenticazione mi da un errore 49
LDAP: error code 49 - Invalid Credentials
Qualcuno sa dirmi dove sta l'errore. Grazie in anticipo

Psycotic
25-06-2009, 14:02
quindi hai gia configurato il pam nsswitch e soci no?

Hai provato a cambiare algoritmo per le password sul server ldap? Magari prova a metterle in crypt

leccher
25-06-2009, 14:44
Ciao... ehm... a dir la verità io ho preso OpenSolaris e installato..., compilato e installato l'OpenLDAP...
poi ho configurato lo slapd.conf come mi serviva.

Caricato un ldif di default (te lo posto qua sotto)
----------------------------------------
# Organization for Corporation
dn: dc=customer,dc=project,dc=com
objectClass: domain
objectClass: dcObject
objectClass: top
dc: customer

# Organizational Role for administrators
dn: ou=admins,dc=customer,dc=project,dc=com
objectClass: top
objectClass: organizationalUnit
ou: admins

# Organizational Role for users
dn: ou=users,dc=customer,dc=project,dc=com
objectClass: top
objectClass: organizationalUnit
ou: users
----------------------------------------

A dir la verità, se guardo con JXplorer (Borwser LDAP) un utente che o creato lui mi fa vedere la pwd "test" come "****" ovviamente ma mi aspettavo ci fossero tutta una serie di asterischi in più (SHA-1 + HASH)...

Mi sa che il problema è che il mio cavolo di server non critta la pwd in scrittura.. ma forse me la critta quando viene spedita.

Ho provato a installare l'OpenLDAP anche sul notebook WinXP che uso e il problema mi rimane.

Mi spieghi come funziona la gestione delle pwd in OpenLDAP e caso mai come fare a dirgli di usare come algoritmo SHA1?

Per poter far si che i miei utenti possano modificarsi la pwd l'ACL qua sotto è OK? Tnx
access to attr=userPassword
by self write
by * auth

Psycotic
25-06-2009, 15:06
ma il tuo server almeno ci prova ad autenticarsi con ldap? non so se opensolaris e' gia' configurato di default per autenticarsi anche su ldap.... In genere non lo sono...

Se non hai idea di come andar a guardare... almeno puoi provare a vedere sui log di openldap se il tuo server gli manda le query.
Basta che individui il file di log degli accessi su openldap e poi provi un'autenticazione, se sui log degli accessi appare qualcosa allora almeno sai che il tuo server ci sta provando.

Una volta che sai che il tuo server sta provando davvero a autenticarsi con ldap allora dopo vedi se non ti funziona per il modo in cui sono ccriptate le password.

La crittatura della password in genere la trovi dove configuri le password policy(cioe' scadenze, composizione etc..)

Tony Lio
25-06-2009, 15:25
Scusami come hai installato openldap??
Da sorgente, da pacchetto, con i berkeleyDB, ecc..??
Io ho installato da sorgenti il berkeley ed openldap.

Ti do un suggerimento, usa come browser ldap "ldapbrowser", è scritto in java ed è multipiattaforma.

Ma la macchina è configurata sotto ldap? Cioè un conto è configurare ldap, un conto e la macchina sotto ldap, un altro sono gli utenti....

leccher
25-06-2009, 15:41
Ciao...
ho installato openldap 2.4.16 da sorgenti openldap.org, instalando da sorgente il berkeley (da oracle).

Premesso questo io non voglio usare ldap per autenticare qli utenti del server, ma per gestire le autenticazini di una web application. Non integro nss e ldap.

ldapbrowser lo conosco... ma io invece mi trovo più comodo con l'altro (gusti...)

Mi piacerebbe sapere se e quando devo mandargli le pwd crittate... o se si arrangia lui

Queste le mie ACL: premetto però che se creo le pwd me le scrive e quindi non dovrebbe essere un problema di scrittura (anche se il rootdn puo fare ciò che vuole)

access to attr=userPassword
by dn="cn=Admin,dc=customer,dc=project,dc=com" write
by self write
by * auth
access to *
by dn="cn=Admin,dc=customer,dc=project,dc=com" write
by users read
by self write
by * read

ti tnx

Tony Lio
26-06-2009, 08:24
Beh scusami se parli di web app l'autenticazione la devi demandare a lei.
Openldap non sa scoprire se l'autenticazione è in chiaro o è cifrata :D
E' la tua web app che deve avere, nel deploy, il dn di ricerca degli utenti e il matching delle password su ldap.

Psycotic
26-06-2009, 10:37
Infatti non avevo capito neanche io che ldap ti serviva x un sito web.. Io pensavo all'autenticazione del sistema...

Ma io dico.. ma con un bel database tipo mysql per un web nn e' la miglior cosa?


Sta cosa di integrare web ldap e altro l'ha inventata gente come quelli di microsoft.. Santa pazienza..

Buona fortuna.. Chissa i dati dov'e li metti...