天天看點

艱難安裝LDAP,SSL認證

第一章

1.      下載下傳 gcc 下載下傳位址: rpm found http://rpmfind.net/linux/rpm2html/search.php?query=gcc&submit=Search+...&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/OpenLDAP/openldap-stable/openldap-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 –9 5780       第三章  1 ssl 和 openldap 的連接配接    OpenSSL 的安全證書的做成 .    http://www.openldap.org/pub/ksoper/OpenLDAP_TLS.html 4.2 CA 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:organizationName, 指一個組織的名字 ;

objectClass: 一個 LDAP server 要想啟用必須能夠識别每一個對象的 Attribute , objectClass Attribute 正是用來描述一個對象應該具有的 Attribute 及可選 Attribute 。是以,每個 objectClass“ 模闆”的 Attribute 中必然含有一條 objectClass Attribute ,我不知道用“自包含”稱呼這個算不算合适。

ou:organizationalUnitName, 指一個組織單元的名字。

sn:surname, 指一個人的姓 ;

telephoneNumber: 電話号碼,應該帶有所在的國家的代碼;

uid:userid, 通常指一個人的登入名,這個不同于 Linux 系統中使用者的 uid ; 如果可以這樣類比的話,我想,我們不妨把 objectClass 了解為關系資料庫的表,而 attribute 則類同為表中的字段。 schema 或許可以類比作一個資料庫,但它的這個類比或許從邏輯上說更合适些。