Windows下OpenLDAP的安装及使用

一 、什么是LDAP

LDAP:(轻量级目录访问协议,Lightweight Directory AccessProtocol)

       它是基于 X.500标准的,但是简单多了并且可以根据需要定制。与X.500不同,LDAP支持TCP/IP,这对访问Internet是必须的。

目录是一个为查询、浏览和搜索而优化的专业分布式数据库,它成树状结构组织数据,就好象Linux/Unix系统中的文件目录一样。目录数据库和关系数据 库不同,它有优异的读性能,但写性能差,并且没有事务处理、回滚等复杂功能,数据修改使用简单的锁定机制实现All-or-Nothing,不适于存储修 改频繁的数据。所以目录天生是用来查询的,就好象它的名字一样。现在国际上的目录服务标准有两个,一个是较早的X.500标准,一个是较新的LDAP标 准。
       LDAP诞生的目标是快速响应和大容量查询并且提供多目录服务器的信息复制功能,它为读密集型的操作进行专门的 优化。因此,当从LDAP服务器中读取数据的时候会比从专门为OLTP优化的关系型数据库中读取数据快一个数量级。

LDAP常用术语解释:
DN:distinguished name。在LDAP目录中的所有记录项都有一个唯一的DN
CN,OU,DC都是LDAP连接服务器的端字 符串中的区别名称;
LDAP连接服务器的连接字串格式为:ldap://servername/DN  
其中DN有三个属性,分别是CN,OU,DC  
LDAP是一种通讯协议,如同HTTP是一种协议一样的!在LDAP目录中。

uid    (User ID) 
CN     (Common   Name)           
DC     (Domain   Component   域名元素       
OU     (Organizational   Unit)   
SN    (surname)   
An LDAP 目录类似于文件系统目录.     下列目录:      
DC=redmond,DC=wa,DC=microsoft,DC=com      
如果我们类比文件系统的话,可被看作如下文件路径:   
Com/Microsoft/Wa/Redmond 

例如:CN=test,OU=developer,DC=domainname,DC=com
在上面的代码中cn=test代表一个用户名,ou=developer代表一个active directory中的组织单位。
这句话的含义是test这个对象处在domainname.com域的developer组织单元中。

二、LDAP的安装

1.下载安装 openldap for windows,版本2.2.29.可以在百度上搜索openldap for windows。 

        安装很简单,一路 next 即可,假设我们安装在C:\Program Files\OpenLDAP
2.配置 openldap,编辑 slapd.conf 文件

1)、打开C:\Program Files\OpenLDAP \slapd.conf,找到ucdata-path    ./ucdata
include  ./schema/core.schema,在它后面添加
include  ./schema/cosine.schema
include  ./schema/inetorgperson.schema

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

include         ./schema/nis.schema

include         ./schema/openldap.schema

include         ./schema/dyngroup.schema

include         ./schema/collective.schema

include         ./schema/corba.schema

include         ./schema/duaconf.schema

include         ./schema/java.schema

include         ./schema/misc.schema

include         ./schema/pmi.schema

include         ./schema/ppolicy.schema

2)、下面我们做一个示例:
     需要在 slapd.conf 配置文件中,找到
     suffix  “dc=my-domain,dc=com”
     rootdn  “cn=Manager,dc=my-domain,dc=com”
    把这两行改为
    suffix     "dc=mycompany,dc=com"

    rootdn   "cn=Manager,dc=mycompany,dc=com"

suffix 就是看自己如何定义了,后面步骤的 ldif 文件就必须与它定义了。还要注意到这个配置文件中有一个 rootpw  secret,这个 secret 是cn=Manager 的密码,以后会用到,不过这里是明文密码,你可以用命令:slappasswd -h {MD5} -s secret  (“secret“是自定义的密码,可以随便设置)算出加密的密码{MD5}Xr4ilOzQ4PCOq3aQ0qbuaQ==替换配置中的 secret。

3. 启动 OpenLDAP
    CMD 进入到C:\Program Files\OpenLDAP 下,
1)、启动OpenLDAP-slapd服务:作用在于开机自动启动该服务项
    slapd install OpenLDAP-slapd “OpenLDAP Directory Service” auto
net start OpenLDAP-slapd

NOTE: the “slapd install” is only needed if you didn’t choose the “create NTservice” option during installation.

当你完成这一步后,下次开机的时候就自动启动LDAP的服务了,不必再次手动启动。(此步也可以忽略不做!
2)、启 动OpenLDAP服务器
在cmd下运行:slapd -d 1

启动成功可以看到控制台下打印一片信息,如下图

Windows下OpenLDAP的安装及使用

openldap 默认是用的 Berkeley DB 数据库存储目录数据的。

4. 建立条目,编辑导入 ldif 文件
1) 新建一个 ldif(LDAP Data Interchanged Format) 文件(纯文本格式),例如 setup.ldif.

setup.ldif 文件内容如下:

[plain] view plain copy
  1. <span style="font-family:Arial;">dn: dc=mycompany,dc=com  
  2. objectClass: top  
  3. objectClass: dcObject  
  4. objectClass: domain  
  5. dc: mycompany  
  6.   
  7. dn: ou=roles,dc=mycompany,dc=com  
  8. objectClass: top  
  9. objectClass: organizationalUnit  
  10. ou: roles  
  11.   
  12. dn: ou=people,dc=mycompany,dc=com  
  13. objectClass: top  
  14. objectClass: organizationalUnit  
  15. ou: people  
  16.   
  17. dn: cn=Test Users,ou=roles,dc=mycompany,dc=com  
  18. objectClass: groupOfUniqueNames  
  19. cn: Test Users  
  20. uniqueMember: uid=sspecial,ou=people,dc=mycompany,dc=com  
  21. uniqueMember: uid=jbloggs,ou=people,dc=mycompany,dc=com  
  22.   
  23. dn: cn=Special Users,ou=roles,dc=mycompany,dc=com  
  24. objectClass: groupOfUniqueNames  
  25. cn: Special Users  
  26. uniqueMember: uid=sspecial,ou=people,dc=mycompany,dc=com  
  27.   
  28. dn: cn=Admin Users,ou=roles,dc=mycompany,dc=com  
  29. objectClass: groupOfUniqueNames  
  30. cn: Admin Users  
  31. uniqueMember: uid=admin,ou=people,dc=mycompany,dc=com  
  32.   
  33. dn: uid=admin,ou=people,dc=mycompany,dc=com  
  34. objectClass: person  
  35. objectClass: inetOrgPerson  
  36. cn: State App  
  37. displayName: App Admin  
  38. givenName: App  
  39. mail: [email protected]  
  40. sn: Admin  
  41. uid: admin  
  42. userPassword: adminpassword  
  43.   
  44. dn: uid=jbloggs,ou=people,dc=mycompany,dc=com  
  45. objectClass: person  
  46. objectClass: inetOrgPerson  
  47. cn: Joe Bloggs  
  48. displayName: Joe Bloggs  
  49. givenName: Joe  
  50. mail: [email protected]  
  51. sn: Bloggs  
  52. uid: jbloggs  
  53. userPassword: password  
  54.   
  55. dn: uid=sspecial,ou=people,dc=mycompany,dc=com  
  56. objectClass: person  
  57. objectClass: inetOrgPerson  
  58. cn: Super Special  
  59. displayName: Super Special  
  60. givenName: Super  
  61. mail: [email protected]  
  62. sn: Special  
  63. uid: sspecial  
  64. userPassword: password</span>  

2) 执行命令:ldapadd -x -D“cn=manager,dc=mycompany,dc=com” -w secret -f setup.ldif

注意: ldapadd 命令使用的前提是必须装过oracle数据库。我之前没装,会提示ldapadd是不可执行的命令,总之就是系统不认识这个命令。后来装了oracle之后就可以用了。

Windows下OpenLDAP的安装及使用

以上图示表示你已经将上述内容导入到LDAP数据库了。

5. LdapBrowser 浏览
可点击链接 http://www.blogjava.net/Files/Unmi/LdapBrowser282.rar下载。解压并双击lbe.bat批处理文件,弹出LDAP Browser窗口中默认会有一个OpenLdap_Localhost的链接,选edit

Windows下OpenLDAP的安装及使用

弹出下面的对话框,输入你的主机名:注意:如果是localhost 就不行。原因在哪里我也不很矛盾。输入你在slapd.conf文件中的DN,和密码。

SAVE—>>>Connect—>>>

Windows下OpenLDAP的安装及使用

连接成功之后看到的结构图:

Windows下OpenLDAP的安装及使用

6. Java 连接 openldap进行测试是否连接成功

[java] view plain copy
  1. <span style="font-family:Arial;">package com.pccw.cms.test;  
  2. import java.util.Hashtable;  
  3. import javax.naming.Context;  
  4. import javax.naming.NamingException;  
  5. import javax.naming.directory.DirContext;  
  6. import javax.naming.directory.InitialDirContext;  
  7.   
  8. public class LDAPTest {     
  9.       public LDAPTest() {     
  10.       }     
  11.           
  12.      @SuppressWarnings("unchecked")  
  13.     public static void main(String[] args) {     
  14.   
  15.        String root = "dc=mycompany,dc=com"//root     
  16.         
  17.         @SuppressWarnings("rawtypes")  
  18.         Hashtable env = new Hashtable();     
  19.        env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");     
  20.        env.put(Context.PROVIDER_URL, "ldap://192.168.3.51/" + root);        
  21.       env.put(Context.SECURITY_AUTHENTICATION, "simple");     
  22.        env.put(Context.SECURITY_PRINCIPAL, "cn=manager,dc=mycompany,dc=com");     
  23.         env.put(Context.SECURITY_CREDENTIALS, "secret");     
  24.        DirContext ctx = null;     
  25.        try {     
  26.         ctx = new InitialDirContext(env);     
  27.         System.out.println("认证成功");     
  28.        }     
  29.        catch (javax.naming.AuthenticationException e) {     
  30.          e.printStackTrace();     
  31.           System.out.println("认证失败");     
  32.         }     
  33.        catch (Exception e) {     
  34.          System.out.println("认证出错:");     
  35.         e.printStackTrace();     
  36.        }     
  37.          
  38.        if (ctx != null) {     
  39.          try {     
  40.             ctx.close();     
  41.          }     
  42.           catch (NamingException e) {     
  43.            //ignore     
  44.          }     
  45.         }     
  46.         System.exit(0);     
  47.      }            
  48.     }  </span>  

7.启动OpenLDAP服务的批处理

新建一个文本文档,在文档写入一下内容:

@echo off

color 07

echo 正在启动HZCA-LDAP文件,请稍等........

cd  /d C:\Program Files\OpenLDAP

slapd -d 1

color 07

echo 启动失败!请重新启动OpenLDAP-slapd程序!输入启动指令:

slapd -d 1

echo.& pause

将文档保存为autoStart.bat 那么当你点击它是,就启动LDAP的服务了!(若你已经在前面将LDAP的服务设定为开机自动启动,那就不需要再次启动这个服务。)

好了,关于LDAP的基本配置就讲到这里。接下来的第二篇文章会讲述如何将LDAP与Tomcat整合配置,进行权限访问。



参考:http://blog.****.net/chenxuejiakaren/article/details/7367572