redking
副版主
帖子
2733
精华
0
无忧币 35203
积分 4393
阅读权限 140
来自 (保密)
|
发表于:2008-1-24 07:58
该回复被 yicanlxoxl 奖励 100 点无忧币
此回复于2008-01-24 08:05被 redking 评为最佳答案
下载gcc
下载地址:rpm found
http://rpmfind.net/linux/rpm2htm ... p;system=&arch=
下载:gcc-4.1.2-12.i386.rpm这个文件
然后进入rpm文件存放的目录下面,使用命令:rpm –iv gcc-4.1.2-12.i386.rpm
完成安装。
Rpm安装软件非常方便。
2. 下载openssl
http://www.openssl.org/source/openssl-0.9.7e.tar.gz
openssl解压缩,使用命令:
tar zxvf openssl-0.9.7e.tar.gz
接下来就是linux安装三部曲。
进入openssl文件存放的目录下面,使用命令
./config
make
make install
安装路径,默认: /usr/local/ssl
3. 下载BerkeleyDB
因为:由于openldap需要用Berkeley DB来存放数据,所以要先安装所以需先安装Berkeley
数据库.
http://www.oracle.com/technology/products/berkeley-db/index.html
进入Berkeley目录解压缩,使用命令:
tar xvzf db-4.5.20.NC.tar.tar
解压缩后生成目录: db-4.5.20.NC
进入db-4.5.20.NC\build_unix目录,执行一面的命令
../dist/configure
make
make install
上面是Linux源码安装的三部曲。
安装路径,默认:/usr/local/ BerkeleyDB.4.5。
注意:
安装完成后要将该软件的库路径/usr/local/ BerkeleyDB.4.5/lib加入到/etc/ld.so.conf中,然后执行ldconfig使配置文件生效这样在编译openldap时候才能找到该库文件。这样数据库安装完了,接下来安装openldap。
说明:ld.so.conf是系统动态链接库的配置文件,此文件中包含了可被Linux共享的动态链接库所在目录的名字(系统目录/lib,/usr/lib除外),各个目录之间以空格或者冒号或者逗号隔开。一般的Linux发行版中都含有/usr/X11R6/lib这个共享库,这是X Window窗口系统的动态链接库所在目录。ldconfig是他的管理命令。
如果你不按照上面的做法,也没有关系,只要把/usr/local/BerkeleyDB.4.5下面lib, include目录下面的所有文件,手动拷贝到/usr/lib和/usr/include目录下面就可以了.
作用和前面修改配置文件相同,目的也是这样在编译openldap时候才能找到该库文件.
使用命令:
cp /usr/local/ BerkeleyDB.4.5/include/* /usr/include
cp /usr/local/ BerkeleyDB.4.5/lib/* /usr/lib
4. 下载openldap
ftp://ftp.openldap.org/pub/OpenL ... stable-20051018.tgz
解压缩
tar zxvf openldap-stable-20051018.tgz
生成目录openldap-2.3.11
进入openldap-2.3.11,使用命令:
env
CPPFLAGS="-I/usr/local/BerkeleyDB.4.5/include" LDFLAGS="-L/usr/local/BerkeleyDB.4.5/lib"
CPPFLAGS="-I/usr/local/ssl/include" LDFLAGS="-L/usr/local/ssl/lib"
./configure
说明:将BerkeleyDB.4.5和ssl的lib和include在编译时临时加入到环境变量中.
一旦你已运行configure脚本,那么configure脚本输出的最后一行应当是
Please "make depend" to build dependencies
如果不是上面的这行的话,则说明configure脚本失败了,你需要参看它的输出来决定是在什么地方出了点问题。除非configure完全成功了,否则你不能进入到下一步。
然后完成三部曲的另外两部
make depend (构建依赖关系)
make
make install
注意:安装ldap的时候可能遇到的错误.
错误1.出错信息: configure: error: BDB/HDB: BerkeleyDB not available
错误2. configure: error: BDB/HDB: BerkeleyDB version incompatible
解决方法:安装步骤3的修改库路径的方法,当然你也可以用那个copy lib 和include的方法.
其他问题,解决方案可以自行到google上搜索.
安装路径,默认: /usr/local/etc/openldap
第二章
1 openldap的slapd.conf配置
进入/usr/local/etc/openldap目录,设定如下:
defaultaccess read
access to *
by self write
by dn="cn=Manager,dc=wsd-party,dc=sunjapan,dc=com,dc=cn" write
by anonymous read
by * read
…
database bdb
#默认文件夹
suffix "dc=wsd-party,dc=sunjapan,dc=com,dc=cn"
#LDAP管理者用户名,密码
rootdn "cn=Manager,dc=wsd-party,dc=sunjapan,dc=com,dc=cn"
rootpw secret
说明: dc=wsd-party,dc=sunjapan,dc=com,dc=cn替换成你自己使用的ldap服务器的domain地址. 以后出现dc=wsd-party,dc=sunjapan,dc=com,dc=cn,不再作特殊说明.
2 openldap的启动
使用命令:
/usr/local/libexec/slapd
这样就完成了ldap的启动.但是这个时候不要高兴,因为还有很多事情要做。
说明:推荐一个ldap的管理工具,windows版本.
http://www-unix.mcs.anl.gov/~gawor/ldap/
下载安装,如何使用,不再累赘,随便看看就知道了,非常简单.
使用上述工具连接ldap,遇到的问题.
错误1:
01:30:37 午後: List failed
Root error: [LDAP: error code 32 - No Such Object]
01:30:40 午後: Failed to read entry dc=wsd-party,dc=sunjapan,dc=com,dc=cn
Root error: [LDAP: error code 32 - No Such Object]
遇到上面的问题,不要担心,出现这个问题的原因,就是你还没有在这个ldap服务中创建初始数据。也就是no entry的错误。如何创建导入初期数据,参见第四章。
3 openldap的关闭
使用命令:
ps -ef |grep slapd
root 5780 1 0 11:54 ? 00:00:00 /usr/local/libexec/slapd
root 5783 10179 0 11:54 pts/1 00:00:00 grep slapd
然后执行:
kill –95780
第三章
1 ssl 和 openldap 的连接
OpenSSL的安全证书的做成.
http://www.openldap.org/pub/ksoper/OpenLDAP_TLS.html
4.2CA Issued Certificate参照.
步骤:
A. 创建CA
创建一个问件夹 myca
进入myca 这个目录下面,然后使用下面的命令来创建一个安全证书/usr/share/ssl/misc/CA.sh –newca
输入密码:changeit
再次输入密码
参照下文一个一个输入就可以了,主要就是一些个人信息之类的东西,和windows安装的那套东西差不多,随便填填.
按照上面步骤,在myca这个文件夹下面产生一个demoCA文件夹
其中, demoCA/cacert.pem和demoCA/private/cakey.pem就是我们要的东西.
B. B然后我们作成CSR
参照上面提供的链接
C. C CA sign the CSR
参照上面提供的链接
D. 把认证好的文件拷贝到/usr/local/var/openldap-data/ 下面, /usr/local/var/openldap-data/目录也就是sldap.conf的directory参数指定的目录.,默认情况下无须修改.
2 OpenLDAP的ssl配置
http://www.openldap.org/pub/ksoper/OpenLDAP_TLS_howto.html
「5.1 Server」参照
slapd.conf文件中
TLSVerifyClient 这个选项设置成never.
具体slapd每个字段的具体含义可以参考5.1下面的一张表,建议仔细阅读.
Slapd文件配置可以参考这个说明html.能拷过来的尽量拷过来用用。
你也可以参考http://www.blogjava.net/junky/archive/2007/06/06/122343.aspx
的[5.1 配置文件格式]这个章节来系统地了解slapd.conf文件包含配置信息
3 带ssl的openldad的启动
使用下面的命令
/usr/local/libexec/slapd -h "ldap:/// ldaps:///"
这个就是带ssl的openldap的启动。
启动好之后,使用下面命令ps -ef|grep sladp
你可以看到
root 6871 1 0 10:41 ? 00:00:00 /usr/local/libexec/slapd -h ldap:/// ldaps:///
root 6893 6710 0 13:21 pts/1 00:00:00 grep slapd
说明启动成功。
关闭方法,和不带ssl的openldap相同。这里不再累赘。
第四章
前面三章都完成之后,接下来我们可以导入schema和初期数据了。
1 schema的导入
将做好的schema文件拷贝到/usr/local/etc/openldap/schema文件夹中。
说明:什么是schema,schema有什么作用,参照附录2
2 导入初期数据
使用你喜欢的编辑器创建一个LDIF文件,LDIF文件存放entry信息。
(Ldif的sample参考附录1)
导入使用命令:ldapadd -x -D "cn=Manager,dc=wsd-party,dc=sunjapan,dc=com,dc=cn" -W -f [ldif格式文件的路径]
你将被提示输入slapd.conf中指定的”secret“。
注意,导入初期数据的时候,必须确保openldap的服务是启动着的。
第五章
要检查服务器是否在运行并且配置是否正确,你可以在服务器上运行ldapsearch命令。默认情况下,ldapsearch工具的位置是/usr/local/bin/ldapsearch。
使用命令
ldapsearch -x -b '' -s base '(objectclass=*)' namingContexts
上面查询未匿名查询,匿名查询结果:(显然没有任何条目)# extended LDIF
#
# LDAPv3
# base <> with scope baseObject
# filter: (objectclass=*)
# requesting: namingContexts
#
# search result
search: 2
result: 0 Success
非匿名查询
ldapsearch -x -b '' -D "cn=Manager,dc=zaimuit" -w secret -s base '(objectClass=*)' namingContexts
结果比上面的多出两行.
dn:
namingContexts: dc=wsd-party,dc=sunjapan,dc=com,dc=cn
还有一种方法,就是从客户端(随便找个windows机器就可以了)使用上面提到的 ldapbroser这个软件查看是否配置并启动成功。
Ssl启动ldap的情况下,如果使用ldapbroser连接不上,可能需要配置ldapbroser这个软件所使用的jdk的security属性。
配置方法:
进入到客户端机器的javahome目录。
使用第三章做成的servercrt.pem和c:\cacert.pem
A导入servercrt.pem
C:\j2sdk1.4.2_06\bin>keytool -import -v -trustcacerts -keystore C:\j2sdk1.4.2_06\jre\lib\security\cacerts -file "c:\servercrt.pem" -alias servercrt
输入密码:changeit (第三章做成证书时使用的密码)
注意:servercrt:可以使用别名,这个无所谓。
B 导入cacert.pem
C:\j2sdk1.4.2_06\bin>keytool -import -v -trustcacerts -keystore C:\j2sdk1.4.2_06\jre\lib\security\cacerts -file "c:\cacert.pem " -alias cacert
注意:如果出现下面的错误
keytool error: java.lang.Exception: X.509证书不存在
解决办法:把上面pem文件的comment部分删除就可以了。
从“Certificate”到“-----BEGIN CERTIFICATE-----”上面那一行为止都是comment部分,大胆的删除就是了。
第六章
关于实际项目中带ssl的ldap运用,tomcat的配置(tomcat 4)
这个配置太复杂,具体一些细节我也不是很清楚。只能在这里先说明作法,至于相关作用和原理,在以后的实践中逐渐领悟。
首先要配置tomcat所使用的jdk的证书。配置方法,参考第五章的蓝色字体部分。
这个配置的作用暂时也不是很清楚,估计也就是让apserver获得ldap服务的认证信息。
因为这个pem文件是当时通过SSL作出来的。
直接参照:
http://tomcat.apache.org/tomcat-4.1-doc/ssl-howto.html
大致步骤:
Sun在JDK中提供了一个安全钥匙与证书的管理工具Keytool。Keytool 把钥匙,证书以及和与它们相关联的证书链储存到一个keystore,默任的实现keystore的是一个文件,它有一个密码保护存储在其中的内容。
配置一个SSL/TLS服务器需要以下几步(在内部网使用时,是否需要这个证书还未确定)
1.为服务器的keystore,以存储证书等。进入到java的bin目录下面,使用下面的命令
keytool -genkey -alias tomcat -keyalg RSA
在执行上面的命令式,会要求用户输入一些信息,例如keystore密码,服务器区域等等,依照提示输入即可。
这样会在C:\Documents and Settings\luyang.SJNS下面生成一个.keystore的文件。
2.生成一个Certificate Signing Request (CSR),CSR是提供给证书颁发机构,供证书颁发机构依据其中信息生成证书的。
keytool -certreq -keyalg RSA -alias tomcat -file certreq.csr
可能要求输入密码,默认:changeit
这样会在当前目录下面生成一个certreq.csr文件。
3.将CSR提供给证书颁发机构CA,等待CA颁发证书:
知名的CA有Versign, Thawte等。
4.在CA等网站上下载CA的根证书。
5.导入CA的根证书到keystore中
keytool -import -alias root -trustcacerts -file <filename_of_the_root_certificate>
6.导入CA颁发的证书到keystore,CA通常不会直接返回一个文件,而是通过网页或email以文本形式提供,需要用户自己创建一个文件,再将文本拷入。
keytool -import -alias test.server.net -trustcacerts -file <your_certificate_filename>
这样就完成对服务器的配置,最后为服务器指定这个keystore就可以了。
附录1
LDIF文件
添加初始条目到目录中
你可以用ldapadd工具添加条目到你的LDAP目录中。ldapadd需要LDIF格式的输入。我们将通过两步来完成它:
1. 创建LDIF文件
2. 运行ldapadd
使用你喜欢的编辑器创建一个包含下面内容的LDIF文件:
dn: dc=<MY-DOMAIN>,dc=<COM>
objectclass: dcObject
objectclass: organization
o: <MY ORGANIZATION>
dc: <MY-DOMAIN>
dn: cn=Manager,dc=<MY-DOMAIN>,dc=<COM>
objectclass: organizationalRole
cn: Manager
一定要用你的域名的正确部分取代<MY-DOMAIN> 和 <COM>。<MY ORGANIZATION>应该用你所在组织的名称来代替。在你剪切和粘贴的时候一定要记得包含前导或者后跟的空格。
dn: dc=example,dc=com
objectclass: dcObject
objectclass: organization
o: Example Company
dc: example
dn: cn=Manager,dc=example,dc=com
objectclass: organizationalRole
cn: Manager
现在,你可以运行ldapadd来把这些条目添加到你目录当中了。
ldapadd -x -D "cn=Manager,dc=<MY-DOMAIN>,dc=<COM>" -W -f example.ldif
一定要用你的域名的正确部分取代<MY-DOMAIN> 和 <COM>。你将被提示输入slapd.conf中指定的”secret“。比如,对于example.com,用:
ldapadd -x -D "cn=Manager,dc=example,dc=com" -W -f example.ldif
其中,example.ldif是你在上面创建的文件。
附录2
到底什么是schema了。LDAP中,schema用来指定一个目录中所包含的objects的类型(objectClass)以及每一个objectClass中的各个必备(mandatory)和可选(optional)的属性(attribute)。因此,Schema是一个数据模型,它被用来决定数据怎样被存储,被跟踪的数据的是什么类型,存储在不同的Entry下的数据之间的关系。schema需要在主配置文件slapd.conf中指定,以用来决定本目录中使用到的objectClass。管理员可以自己设计制定schema,一般包括属性定义(AttributeDefinition)、类定义(ClassDefinition)以及语法定义(SyntaxDefinition)等部分。
LDAP V3中在x.500标准的基础上定义了一个包含了网络中大多常见对象的schema,这些对象包括国家、所在地、组织、人员、小组以及设备等。同时,LDAP V3中可以很方便的从目录中提取出schema,它正是一条记录中关于属性的声明部分。
Schema中一些参数的说明
1对象标识符(Object Identifiers)
对象标识符(OID)是被LDAP内部数据库引用的数字标识。Attribute的名字是设计为方便人们读取的,但为了方便计算机的处理,通常使用一组数字来标识这些对象,这类同于SNMP中的MIB2。例如,当计算机接收到dc这个Attribute时,它会将这个名字转换为对应的OID:1.3.6.1.4.1.1466.115.121.1.26。
2、objectClass
LDAP中,一条记录必须包含一个objectClass属性,且其需要赋予至少一个值。每一个值将用作一条LDAP记录进行数据存储的模板;模板中包含了一条记录中数个必须被赋值的属性和一系列可选的属性。如上述LDIF文件中的记录所示,objectClass的值为domain。
objectClass有着严格的等级之分,最顶层的类是top和alias。例如,organizationalPerson这个objectClass隶属于Person,而Person又是top的子类。
objectClass大致分为三类:结构型的(如:person和organizationUnit)、辅助型的(如:extensibeObject)和抽象型的(这类不能直接使用)。官方定义的objectClass,如下所示:
alias
applicationEntity
dSA
applicationProcess
bootableDevice
certificationAuthority
certificationAuthority-V2
country
cRLDistributionPoint
dcObject
device
dmd
domain
domainNameForm
extensibleObject
groupOfNames
groupOfUniqueNames
ieee802Device
ipHost
ipNetwork
ipProtocol
ipService
locality
dcLocalityNameForm
nisMap
nisNetgroup
nisObject
oncRpc
organization
dcOrganizationNameForm
organizationalRole
organizationalUnit
dcOrganizationalUnitNameForm
person
organizationalPerson
inetOrgPerson
uidOrganizationalPersonNameForm
residentialPerson
posixAccount
posixGroup
shadowAccount
strongAuthenticationUser
uidObject
userSecurityInformation
3 Attribute介绍
如上文所述,Attribute类同于编程语言中的变量,它可以被赋值,就像是可以存放一个单一类型信息的容器。官方声明了许多常用的Attribute,如果其中没有你所需要的,你可以自己定义,但要避免重名。objectClass是一种特殊的Attribute,它包含其它用到的Attribute以及它自身。常见的Attribute如:givenName、l、objectClass、dc、ou、cn、c、mail、telephoneNumber、sn、uid等。分别介绍如下:
c:国家;
cn:common name,指一个对象的名字;如果指人,需要使用其全名;
dc:domain Component,经常用来指一个域名的一部分,如:dc=mydomain,dc=org;
givenName:指一个人的名字,不能用来指姓或者middle name;
l:指一个地名,如一个城市或者其它地理区域的名字;
mail:电子信箱地址
o rganizationName,指一个组织的名字;
objectClass:一个LDAP server要想启用必须能够识别每一个对象的Attribute,objectClass Attribute正是用来描述一个对象应该具有的Attribute及可选Attribute。因此,每个objectClass“模板”的Attribute中必然含有一条objectClass Attribute,我不知道用“自包含”称呼这个算不算合适。
ou rganizationalUnitName,指一个组织单元的名字。
sn:surname,指一个人的姓;
telephoneNumber:电话号码,应该带有所在的国家的代码;
uid:userid,通常指一个人的登录名,这个不同于Linux系统中用户的uid;
如果可以这样类比的话,我想,我们不妨把objectClass理解为关系数据库的表,而attribute则类同为表中的字段。schema或许可以类比作一个数据库,但它的这个类比或许从逻辑上说更合适些。
|
 微软最有价值专家(MVP)申请 <2008-2009年度> |
|