OpenLDAP介绍 02

OpenLDAP是轻型目录访问协议(Lightweight Directory Access Protocol,LDAP)的自由和开源的实现,在其OpenLDAP许可证下发行,并已经被包含在众多流行的Linux发行版中。

它主要包括下述4个部分:

slapd - 独立LDAP守护服务

slurpd - 独立的LDAP更新复制守护服务

实现LDAP协议的库

工具软件和示例客户端

 

OpenLDAP下载

源码包(Linux环境) http://www.openldap.org/software/download/

Win32 版 http://download.bergmans.us/openldap/openldap-2.2.29/openldap-2.2.29-db-4.3.29-openssl-0.9.8a-win32_Setup.exe

[编辑本段]

OpenLDAP使用

1、配置 openldap,编辑 sldap.conf 文件

1) 打开 c:\openldap\sldap.conf,找到

include C:/openldap/etc/schema/core.schema,在它后面添加

include C:/openldap/etc/schema/cosine.schema

include C:/openldap/etc/schema/inetorgperson.schema

接下来的例子只需要用到以上三个 schema,当然,如果你觉得需要的话,你可以把其他的 schema 全部添加进来

include C:/openldap/etc/schema/corba.schema

include C:/openldap/etc/schema/dyngroup.schema

include C:/openldap/etc/schema/java.schema

include C:/openldap/etc/schema/misc.schema

include C:/openldap/etc/schema/nis.schema

include C:/openldap/etc/schema/openldap.schema

2) 还是在 sldap.conf 文件中,找到

suffix "dc=my-domain,dc=com"

rootdn "cn=Manager,dc=my-domain,dc=com"

把这两行改为

suffix "o=tcl,c=cn"

rootdn "cn=Manager,o=tcl,c=cn"

suffix 就是看自己如何定义了,后面步骤的 ldif 文件就必须与它定义了。还要注意到这个配置文件中有一个 rootpw secret,这个 secret 是 cn=Manager 的密码,以后会用到,不过这里是明文密码,你可以用命令:

slappasswd -h -s secret

算出加密的密码 Xr4ilOzQ4PCOq3aQ0qbuaQ== 取代配置中的 secret。

2. 启动 openldap

CMD 进入到 c:\openldap 下,运行命令 slapd -d 1

用可以看到控制台下打印一片信息,openldap 默认是用的 Berkeley DB 数据库存储目录数据的。

3. 建立条目,编辑导入 ldif 文件

1) 新建一个 ldif(LDAP Data Interchanged Format) 文件(纯文本格式),例如 test.ldif,文件内容如下:

dn: o=tcl,c=cn

objectClass: dcObject

objectClass: organization

o: tcl

dc: com

dn: uid=Unmi, o=tcl,c=cn

uid: Unmi

objectClass: inetOrgPerson

mail: [email protected]

userPassword:: MTIzNDU2

labeledURI: http://www.5jy.com

sn: Qiu

cn: 隔叶黄莺

2) 执行命令:ldapadd -x -D "cn=manager,o=tcl,c=cn" -w secret -f test.ldif

导入组织信息和一个用户 uid=Unmi

 

Java 连接 openldap

import java.util.Hashtable;

import javax.naming.Context;

import javax.naming.NamingException;

import javax.naming.directory.DirContext;

import javax.naming.directory.InitialDirContext;

public class LDAPTest {

public static void main(String[] args) {

LDAPTest LDAPTest1 = new LDAPTest();

String root = "o=tcl,c=cn" ; //root

Hashtable env = new Hashtable();

env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory" );

env.put(Context.PROVIDER_URL, "ldap://localhost/" + root);

env.put(Context.SECURITY_AUTHENTICATION, "simple" );

env.put(Context.SECURITY_PRINCIPAL, "cn=Manager,o=tcl,c=cn" );

env.put(Context.SECURITY_CREDENTIALS, "secret" );

DirContext ctx = null ;

try {

ctx = new InitialDirContext(env);

System.out.println( "认证成功" );

}

catch (javax.naming.AuthenticationException e) {

e.printStackTrace();

System.out.println( "认证失败" );

}

catch (Exception e) {

System.out.println( "认证出错:" );

e.printStackTrace();

}

if (ctx != null ) {

try {

ctx.close();

}

catch (NamingException e) {

//ignore

}

}

}

}