当前位置: 首页 >> 开源操作系统 >> FreeBSD下利用ACI/SSL安全使用OpenLDAP
 

FreeBSD下利用ACI/SSL安全使用OpenLDAP

作者:      来源:Exam8.com     发表时间:2006-04-07     浏览次数:      字号:    

 一、使用访问控制(Access Control),实现用户认证
  
  关于它,在OpenLDAP 2.1 Administrator's Guide里有详细说明。这里只管应用。
  
  修改OpenLDAP的配置文件,增加控制块
  
  # vi /usr/local/etc/openldap/slapd.conf
  access to attr=userPassword
  by anonymous auth
  by self write
  by * none
  
  access to *
  by self write
  by users read
  
  此控制块用于禁止匿名查询,而认证用户可以修改自己的所有属性,允许查询它人的信息条目,但除了userPassword属性。基本上上面的每一行都是必须的,经过反复删除恢复,终于对访问控制块的认识有了质的飞跃。特别是对于“by anonymous auth”的理解,没有了它,需要认证的用户不能完成认证,因为它查询不到密码呀!所以“auth”在这里的作用就是允许匿名用户可以读到密码,但只能用于验证,而不能用于其它的用途,这就保证了密码属性的安全。
  
  重启ldap服务
  
  # /usr/local/etc/rc.d/slapd.sh restart
  
  查询测试
  
  1、如果还使用LDAP Browser 2.6的话,这次就可以使用其它的用户bind了,如使用用户:
  
  uid=abc,ou=people,dc=example,dc=com
  
  它的密码是:abcabc(见前面的例子)
  
  2、在命令行完成
  
  # ldapsearch -x -b 'dc=example,dc=com' 'objectClass=*'
  
  匿名查询结果:(显然没有任何条目)
  
  # extended LDIF
  #
  # LDAPv3
  # base with scope sub
  # filter: objectClass=*
  # requesting: ALL
  #
  
  # search result
  search: 2
  result: 0 Success
  
  # numResponses: 1
  
  # ldapsearch -x -b 'dc=example,dc=com' -D 'uid=abc,ou=people,dc=example,dc=com' -w abcabc 'uid=a*'
  
  通过指定用户查询的结果:
  
  # extended LDIF
  #
  # LDAPv3
  # base with scope sub
  # filter: uid=a*
  # requesting: ALL
  #
  
  # abc, people, example.com
  dn: uid=abc,ou=people,dc=example,dc=com
  objectClass: person
  objectClass: organizationalPerson
  objectClass: inetOrgPerson
  uid: abc
  sn: zhangs
  cn: zs
  userPassword:: YWJjYWJj
  
  # aaa, people, example.com
  dn: uid=aaa,ou=people,dc=example,dc=com
  objectClass: person
  objectClass: organizationalPerson
  objectClass: inetOrgPerson
  uid: aaa
  sn: aaaa
  cn:: YWFkQSA=
  
  # search result
  search: 2
  result: 0 Success
  
  # numResponses: 3
  # numEntries: 2
  
  如果过滤条件还是用'objectClass=*'的话,产生的条目数很多,所以这里就必为了'uid=a*'。从结果中我们可以看到“uid=abc,ou=people,dc=example,dc=com”的userPassword属性显示了出来,而另一个用户则没有显示。上面执行的命令中红色部分分别是查询时使用的用户名和密码,其中密码就是条目“uid=abc,ou=people,dc=example,dc=com”中所存放的userPassword的值。
  
  二、使用SSL/TLS
  
  通过认证授权(Certificate Authority)中心发行的证书签发证书或自签发证书,这里用的是自签发证书。
  
  参考:http://www.openldap.org/pub/ksoper/OpenLDAP_TLS_howto.html
  http://www.openldap.org/faq/data/cache/185.html
  
  (一)服务端的证书
  
  1、建立一临时目录
  
  # mkdir ~/ldap
  #cd ~/ldap
  
  2、建立用于签署其它证书的CA证书(应该是X509v3格式的)
  
  # /usr/local/openssl/misc/CA.sh -newca
  
  如果不输入文件名,则会在当前目录下会生成demoCA目录,里边存放有cacert.pem 和private/cakey.pem (CA证书和RSA私有密钥)。在填写各项目的过程上,有些项目不是很重要,对于“Common Name”,应该填入有一定意义易于阅读的字符串,不一定是服务器的名字,我的就是abc.cn,而服务器名字为myth.unix.cn。
  其实,它是一个自签署证书,此时CA已进行了自签署,而形成了根证书。其中依然有公钥和私钥。公钥可以发布,用于确认服务器证书的合法性。
  
  2、建立服务器的“证书签署请求(certificate signing request - CSR)”,即签署请求证书
  
  同时也将它做为服务器的私有密钥
  
  # openssl req -newkey rsa:1024 -nodes -keyout newreq.pem -out newreq.pem
  
  其它没什么,对于“Common Name”则一定要小心,此处应该填入服务器的FQDN(fully-qualified distinguished name),即运行OpenLDAP的服务器的完整名称,而不是一般的简写名称。如果你的服务器有多个名称,就先把主名填入这里,而对于其它的别名,则可以利用openssl.cnf文件里的subjectAltName。例如:
  subjectAltName=DNS:alias1.domain1,DNS:host2.domain2,DNS:*.domain3
  
  关于FQDN,对于unix或linux的用户来说应该不陌生,实际上在你安装系统时,配置IP地址那个地方就已经进行FQDN的设定。现在想知道你的服务器的FQDN的方法,可以通过执行
  
  # hostname
  
  得到,或查看/etc/rc.conf。
  
  我的自己的名字就是:myth.unix.cn。据说90%的错误都出在这里。
  
  查看newreq.pem的内容:
  
  # openssl req -noout -text -in newreq.pem
  
  3、使用前面的CA证书签署CSR,得到签署后的证书,可以发布
  
  此证书也称为服务器证书,里面主要包含了证书的签署机构、服务器的公钥以及服务器的全域名(FQDN)等等。其有效性可以通过使用CA证书的公钥,即demoCA/cacert.pem来进行确认。主要用于对此服务器的验证。
  
  # /usr/local/openssl/misc/CA.sh -sign
  
  注意,不要出错,尤其是密码不要错了。除此以外,另外还有两次确认选项。
  

[1] [2]

责任编辑 webmaster

 
 
 
 
 
评论更多>>
 
 
 
发表
 
姓名: QQ:
性别: MSN:
E-mail: 主页:
评分: 1 2 3 4 5
评论内容:
验证码:
  
  • 请遵守《互联网电子公告服务管理规定》及中华人民共和国其他各项有关法律法规。
  • 严禁发表危害国家安全、损害国家利益、破坏民族团结、破坏国家宗教政策、破坏社会稳定、侮辱、诽谤、教唆、淫秽等内容的评论 。
  • 用户需对自己在使用本站服务过程中的行为承担法律责任(直接或间接导致的)。
  • 本站管理员有权保留或删除评论内容。
  • 评论内容只代表网友个人观点,与本网站立场无关。
  •