一,openldap在linux下的安装 1,编译安装Berkeley DB tar -zxvf db-4.2.52.tar.gz cd /usr/local/db-4.2.52.NC/build_unix ../dist/configure make make install 2.编译安装openldap cd openldap-2.1.29 env CPPFLAGS="-I/usr/local/BerkeleyDB.4.2/include" LDFLAGS="-L/usr/local/BerkeleyDB.4.2/lib" ./configure --prefix=/usr/local/openldap -- enable-ldbm make depens make (make test) make install 3.测试一下 cd /usr/local/openldap/libexec ./slapd -d 1 (屏幕会出现一些信息,最后要是出现slapd start 就成功了,要是没出现这个,呵呵那我也不知道怎么办,再重新编译一下吧.) cd ../bin ldapsearch -x -b '' -s base '(objectclass=*)' namingContexts 要是返回下列信息,那恭喜你,呵呵openldap就安装成功了. dn: namingContexts: dc=example,dc=com. 还有很多命令可以用了,推荐一下 二,用PHP操作LDAP服务器 1.建立自己的objectclass. 因为我们证书subject有六项,但是我在默认的几个schema中没有找到包含所有这六项的objectclass,所以还是我们自己创建一个吧. vi /usr/local/openldap/etc/openldap/schema/inetorgperson.schema 我直接在最后加上下面这段,呵呵,其实也很简单,我就是照着objectclass inetorgperson修改了一下而已,其中的具体意思呵呵OpenLDAP 2.1 管理员指南有解释,不过我也没看懂. objectclass ( 2.16.840.1.113730.3.2.3 NAME 'guestcertificate' DESC 'guestcertificate' SUP top STRUCTURAL MAY ( mail $ userCertificate $ cn $ c $ st $ l $ o $ ou ) ) 当然也可以新建一个schema文件,把上面的这些包含进去,然后在slapd.conf中再把这个文件包含上就可以了. 2,规划条目结构. 这里主要用到了PHP的几个函数(PHP和APACHE的安装过程http://www.infosecurity.org.cn/forum/read.php?fid=10&tid=34&fpage=1) $ds=ldap_connect("localhost"); $r=ldap_bind($ds,"cn=root,dc=sage,dc=com","secret"); // $info["c"]="cn"; $info["objectClass"]="guestcertificate"; $lr=ldap_add($ds, "c=cn,dc=sage,dc=com",$info); // $info["c"]="cn"; $info["st"]="gd"; $info["objectClass"]="guestcertificate"; $lr=ldap_add($ds, "st=gd,c=cn,dc=sage,dc=com",$info); // $info["c"]="cn"; $info["st"]="gd"; $info["l"]="sz"; $info["objectClass"]="guestcertificate"; $lr=ldap_add($ds, "l=sz,st=gd,c=cn,dc=sage,dc=com",$info); // $info["c"]="cn"; $info["st"]="gd"; $info["l"]="sz"; $info["o"]="company"; $info["objectClass"]="guestcertificate"; $lr=ldap_add($ds, "o=company,l=sz,st=gd,c=cn,dc=sage,dc=com",$info); // $info["c"]="cn"; $info["st"]="gd"; $info["l"]="sz"; $info["o"]="company"; $info["ou"]="unit"; $info["objectClass"]="guestcertificate"; $lr=ldap_add($ds, "ou=unit,o=company,l=sz,st=gd,c=cn,dc=sage,dc=com",$info); 好了,到这里已经把我的commomname以前的树状结构规划好了. ldap_connect是与服务器连接,ldap_bind是绑定服务器,第二个参数是在slapd.conf中定义的rootdn,第三个是密码. ldap_add是增加条目,当然我们这里是第一次增加条目所以每个都要添加,要是以后要添加的话,先用ldap_search查询一下该条目有没有,有了以后就可以不添加了,要是不想做判断也可以,只是会出现Add: Already exists in /wwwroot/add.php on line 7,呵呵不过确实可以工作. 下面来添加用户的证书,证书格式必需是DER格式的,加入是PEM格式的话可以转换一下. openssl x509 -outform DER -in cert.pem -out cert.der // $fp = fopen("/ssl.crt/cert.der", "r"); $cert = fread($fp, 8192); fclose($fp); // $info["c"]="cn"; $info["st"]="gd"; $info["l"]="sz"; $info["o"]="company" $info["ou"]="unit" $info["cn"]="commomname"; $info["userCertificate:binary"]="$cert"; $info["objectClass"]="guestcertificate"; $lr=ldap_add($ds, "cn=commomname,ou=unit,o=company,l=sz,st=gd,c=cn,dc=sage,dc=com",$info); 好了一个证书的完整添加过程就完成了,可以用ldap自带的命令ldapsearch查询一下,假如写入了一些证书以后能够发现它们都是层次结构的,查询上一级条目可以列出所有下一级条目. 证书的删除操作: bool ldap_delete ( resource link_identifier, string dn); 证书的修改操作: 我想证书的修改操作可能也不是修改吧,也就是将老证书删除了,然后按照用户输入的新信息形成新的证书,将新证书写入服务器中. 证书的查询: 用ldap_search查询以后,再$info=ldap_get_entries($ds,$sr);那么证书的c,st,l等就都存在了info数组中. -----------------------------the end---------------------------------------------------- 网上有关PHP操作LDAP存取证书的文章好像不太多,我也是初学,呵呵可能有很多错误,这里有很多是借鉴别人的.也感谢master,文中很多都是他指导我的. 本问题的讨论地址:http://www.infosecurity.org.cn/forum/read.php?fid=12&tid=47&fpage=1 
|