其他语言

本类阅读TOP10

·基于Solaris 开发环境的整体构思
·使用AutoMake轻松生成Makefile
·BCB数据库图像保存技术
·GNU中的Makefile
·射频芯片nRF401天线设计的分析
·iframe 的自适应高度
·BCB之Socket通信
·软件企业如何实施CMM
·入门系列--OpenGL最简单的入门
·WIN95中日志钩子(JournalRecord Hook)的使用

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
openldap安装以及存取读取证书操作(PHP)

作者:未知 来源:月光软件站 加入时间:2005-5-13 月光软件站

一,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




相关文章

相关软件