作者 主題: LDAP over TLS  (閱讀 11028 次)

0 會員 與 1 訪客 正在閱讀本文。

Niko

  • 活潑的大學生
  • ***
  • 文章數: 281
  • 性別: 男
    • 檢視個人資料
LDAP over TLS
« 於: 2013-01-22 23:07 »
各位好,又是小弟我 :P           
這次是與各位大大們分享小弟的實作成果...

關於TLS與SSL可以參考wiki的說明 → http://zh.wikipedia.org/wiki/SSL

LDAP要走TLS/SSL,也就是加密,用最最最簡單來理解的話,有兩種方式
一 : 在server上作certificate就OK
二 : server與client都要作certificate,雙方都要通過驗證才可以 (較安全)

第二點在『man slapd.conf』中有提到 :
TLSVerifyClient <level>
              Specifies what checks to perform on client certificates in an incoming TLS session, if any.  The <level> can be specified as one of the following keywords:

never     This is the default.  slapd will not ask the client for a certificate.

所以,實作部份小弟就用最簡單的方式來完成,主要目的只要能夠走TLS就好。
另外還有一個非常非常重要的觀念,只要是有關LDAP over TLS/SSL的文章裡,每位大大都會提到的 :
TLS是走port 389,SSL才是port 636,也就是  TLS → ldap://xxx.xxx.tw          SSL → ldaps://xxx.xxx.tw

小弟的環境是 :
網域為split.com.tw
IP網段為192.168.1.0/24
OS統一是CentOS 6.3
DNS server一台,跑dns、dhcp服務。hostname : dns
LDAP server兩台,使用mirror mode來互相複製。hostname : ldap1、ldap2
samba server兩台,分別為PDC與BDC,另外還有nfs、heartbeat、drbd等服務。hostname : smb1、smb2
client兩台,用來做測試,分別用nslcd與sssd來加入LDAP。hostname : client、client2


1. 建立TLS憑證 (以ldap1為例,ldap2也用相同作法)

使用簡單的方法,一次把cert和key做好
代碼: [選擇]
[root@ldap1 ~]# cd  /etc/pki/tls/certs 在certs目錄下有一個『Makefile』,是製作憑證的script,先修改裡面的內容,讓製作出來的憑證有效日期加長為10年。
代碼: [選擇]
[root@ldap1 certs]# vim  Makefile 在『%.pem:』這個項目中,找到
『/usr/bin/openssl req $(UTF8) -newkey rsa:2048 -keyout $$PEM1 -nodes -x509 -days 365 -out $$PEM2 -set_serial $(SERIAL)』這一行 (約41行),把『-days 365』修改成『-days 3650』。

產生ldap1.pem憑證
代碼: [選擇]
[root@ldap1 certs]# make  ldap1.pem umask 77 ; \
   PEM1=`/bin/mktemp /tmp/openssl.XXXXXX` ; \
   PEM2=`/bin/mktemp /tmp/openssl.XXXXXX` ; \
   /usr/bin/openssl req -utf8 -newkey rsa:2048 -keyout $PEM1 -nodes -x509 -days 3650 -out $PEM2 -set_serial 0 ; \
   cat $PEM1 >  ldap1.pem ; \
   echo ""    >> ldap1.pem ; \
   cat $PEM2 >> ldap1.pem ; \
   rm -f $PEM1 $PEM2
Generating a 2048 bit RSA private key
...........+++
......................+++
writing new private key to '/tmp/openssl.LDBJkp'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:TW
State or Province Name (full name) []:Taiwan
Locality Name (eg, city) [Default City]:Taipei
Organization Name (eg, company) [Default Company Ltd]:
Organizational Unit Name (eg, section) []:IT
Common Name (eg, your name or your server's hostname) []:ldap1.split.com.tw      #重要,必須是server的FQDN
Email Address []:xxxx@gmail.com

修改憑證權限
代碼: [選擇]
[root@ldap1 certs]# chmod  640  ldap1.pem
[root@ldap1 certs]# chown  ldap:ldap  ldap1.pem

將ldap1的憑證與CA的憑證放到openldap的certs目錄下
代碼: [選擇]
[root@ldap1 certs]# ln  -s  `pwd`/ldap1.pem  /etc/openldap/certs/
[root@ldap1 certs]# ln  -s  `pwd`/ca-bundle.crt  /etc/openldap/certs/

修改系統的啟動設定檔,開啟LDAPS的功能
代碼: [選擇]
[root@ldap1 certs]# vim  /etc/sysconfig/ldap SLAPD_LDAPS=yes       #約16行

修改slapd.conf,加入憑證路徑
代碼: [選擇]
[root@ldap1 certs]# vim  /etc/openldap/slapd.conf 約71~73行
befort
TLSCACertificatePath  /etc/openldap/certs
TLSCertificateFile  "\"OpenLDAP Server\""
TLSCertificateKeyFile  /etc/openldap/certs/password

after
TLSCACertificateFile  /etc/openldap/certs/ca-bundle.crt
TLSCertificateFile  /etc/openldap/certs/ldap1.pem
TLSCertificateKeyFile  /etc/openldap/certs/ldap1.pem
# Certificate的File和KeyFile因為在製作時都已包含在內,所以指定同一個檔案即可

使用上面作法把ldap2也搞定

2. 本機驗證
兩台都做完成後,先來試看看能不能使用TLS (目前焦點還是在ldap1、ldap2上)

修改ldap.conf
代碼: [選擇]
[root@ldap1 ~]# vim  /etc/openldap/ldap.conf新增
TLS_REQCERT  never

代碼: [選擇]
[root@ldap1 ~]# ldapsearch  -x  -ZZ 如果有查詢到資料並且在log中 :
conn=1000  op=0  STARTTLS
conn=1000  op=0  RESULT  oid=  err=0  text=
conn=1000  fd=16  TLS  established  tls_ssf=256  ssf=256
有出現類似訊息,就代表已經成功走TLS了。(如果client上有設定TLS,在log中都會出現類似的訊息)

3. 設定mirror mode
在slapd.conf裡的mirror mode參數中新增內容,ldap1、ldap2都是相同設定 (另一種Syncrepl模式,只要設定consumer就好)。
小弟用先前筆記的設定截取一部份來說明 :

serverID 1

syncrepl         rid=123
                      provider=ldap://ldap2.split.com.tw
                      bindmethod=simple
                      binddn="cn=admin2,dc=split,dc=com,dc=tw"
                      credentials=redhat
                      searchbase="dc=split,dc=com,dc=tw"
                      schemachecking=on
                      type=refreshAndPersist
                      retry="60 +"
                      starttls=yes
                      tls_reqcert=never


mirrormode on

完成,就是這麼簡單 :P,以下設定client的方式其實都滿簡單的,是否有成功,觀察一下log就知道了
小提醒:只要動到slapd.conf的話都必須要 :
代碼: [選擇]
[root@ldap1 ~]# rm  -rf  /etc/openldap/slapd.d/*
[root@ldap1 ~]# slaptest  -f  /etc/openldap/slapd.conf  -F  /etc/openldap/slapd.d
[root@ldap1 ~]# chown  -R  ldap:ldap  /etc/openldap/slapd.d
[root@ldap1 ~]# service  slapd  restart

Samba PDC/BDC(smb1、smb2設定相同)
先編輯『/etc/openldap/ldap.conf』
加入:
TLS_REQCERT  never

再修改『/etc/samba/smb.conf』
找到『ldap ssl = No』這一行,改成『ldap ssl = start tls』,
如果沒有就自己新增進去,修改完後重新啟動samba即可。


Client
這裡要分兩部份介紹,第一部份是小弟先前用手動的方式加入LDAP,採用nslcd和pam_ldap;
第二部份則是RHEL 6使用的"系統安全性服務SSSD (System Security Services Daemon)",一種管理身份驗證的機制。

client(nslcd、pam_ldap)
修改ldap.conf
代碼: [選擇]
[root@client ~]# vim  /etc/openldap/ldap.conf
新增
TLS_REQCERT  never

修改nslcd.conf
代碼: [選擇]
[root@client ~]# vim  /etc/nslcd.conf
把先前的設定
ssl  no
修改成
ssl  start_tls
tls_reqcert  never


最後修改pam_ldap.conf (與sudo有關)
代碼: [選擇]
[root@client ~]# vim  /etc/pam_ldap.conf
約263行
tls_checkpeer    no

先前的設定
ssl  no
改成
ssl  start_tls

Client(sssd)
有兩種方法,一種是『authconfig-tui』文字介面,另一種是『authconfig-gtk』圖形介面,前提都必須要有server的cert才可以。
依照上面作法來說明,server的certificate位置應該在/etc/pki/tls/certs目錄下,先分別把兩台的certificate處理一下(以ldap1為例,ldap2也用相同作法)
代碼: [選擇]
[root@ldap1 ~]# cp   /etc/pki/tls/certs/ldap1.pem   /etc/openldap/certs/ldap1-cert.pem
[root@ldap1 ~]# chmod  755  /etc/openldap/certs/ldap1-cert.pem
代碼: [選擇]
[root@ldap1 ~]# vim  /etc/openldap/certs/ldap1-cert.pem
-----BEGIN  CERTIFICATE-----
XXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXX
-----END  CERTIFICATE-----
只留BEGIN  CERTIFICATE到END  CERTIFICATE這部份就好,其他的請刪除


接著要先在client的"/etc/openldap/"目錄下新增一個"cacerts"目錄
代碼: [選擇]
[root@client ~]# mkdir  /etc/openldap/cacerts
把ldap1-cert.pem、ldap2-cert.pem複製到client的"/etc/openldap/cacerts"目錄下
代碼: [選擇]
[root@ldap1 ~]# scp  /etc/pki/tls/certs/ldap1-cert.pem  client:/etc/openldap/cacerts
[root@ldap2 ~]# scp  /etc/pki/tls/certs/ldap2-cert.pem  client:/etc/openldap/cacerts

所有事情都做好後,在client上就用authconfig-gtk這個圖形介面來玩玩 (authconfig-tui 作法也是一樣的)


開啟後長這樣,LDAP伺服器欄位的寫法 :『ldap://ldap1.split.com.tw  ldap://ldap2.split.com.tw』(因為有兩台LDAP server)
『下載CA憑證』那個不用去理它,因為我們已經把憑證放好了。之所以要手動先放置好憑證的原因就是我們有兩台LDAP server,如果先去下載ldap1-cert.pem,再去下載ldap2-cert.pem,會把原本的ldap1-cert.pem給覆蓋掉。
設定好後直接按套用,此時cacerts目錄底下會長這樣 :


到此client也算完成了,不過最後小弟還要提一個東西,那就是用sssd加入LDAP後的sudo

檢查sudo版本與檔案
代碼: [選擇]
[root@client ~]# rpm  -qa|grep  sudo
sudo-1.7.4p5-11.el6.x86_64

代碼: [選擇]
[root@client ~]# ls  /etc/sudo-ldap.conf
/etc/sudo-ldap.conf

編輯sudo-ldap.conf
代碼: [選擇]
[root@client ~]# vim  /etc/sudo-ldap.conf
uri  ldap://ldap1.split.com.tw  ldap://ldap2.split.com.tw
sudoers_base  ou=Sudoers,dc=split,dc=com,dc=tw
ssl  start_tls
tls_checkpeer  no

編輯nsswitch.conf
代碼: [選擇]
[root@client ~]# vim  /etc/nsswitch.conf
新增
sudoers:    ldap

以上就是小弟的筆記。 ;D

參考資料 :
http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=1032785
http://www.study-area.org/tips/smbldap/
http://blog.jangmt.com/2012/08/centos-6-ldap-server-ldap.html
http://www.weithenn.org/cgi-bin/wiki.pl?OpenLDAP-SSL_TLS_%E8%A8%AD%E5%AE%9A
http://www.l-penguin.idv.tw/article/ldap-5.htm
https://gist.github.com/4187388

2013/01/26
補上小弟用wireshark來觀察有TLS和沒有TLS的差別

沒有TLS


TLS
« 上次編輯: 2013-01-26 12:55 由 Niko »

wlhfor

  • 懷疑的國中生
  • **
  • 文章數: 39
    • 檢視個人資料
Re: LDAP over TLS
« 回覆 #1 於: 2013-01-23 11:58 »
給大大一個讚....

treble

  • 活潑的大學生
  • ***
  • 文章數: 215
    • 檢視個人資料
    • 牛的大腦
Re: LDAP over TLS
« 回覆 #2 於: 2013-01-23 20:00 »
滿詳細的
[牛的大腦  http://systw.net ] 用來放一些筆記資料
[單字我朋友  http://systw.net/word ] 練英文用的
2分鐘檢測你的單字能力 http://systw.net/word/q.php

Niko

  • 活潑的大學生
  • ***
  • 文章數: 281
  • 性別: 男
    • 檢視個人資料
Re: LDAP over TLS
« 回覆 #3 於: 2013-01-23 22:32 »
謝謝treble大大!!!!
小弟就是深怕有一天忘記又剛好要用到,所以能詳細點就詳細點,不要到時看不懂自己再寫什麼...XD
然後然後.....小弟有看到重點....原來牛的大腦作者就是treble大啊!!!最近在研究freeradius,剛好有找到大大的筆記耶!!不知道能不能給我舉手發問....

treble

  • 活潑的大學生
  • ***
  • 文章數: 215
    • 檢視個人資料
    • 牛的大腦
Re: LDAP over TLS
« 回覆 #4 於: 2013-01-23 23:54 »
我只會簡單的,不可以問太難,haha
[牛的大腦  http://systw.net ] 用來放一些筆記資料
[單字我朋友  http://systw.net/word ] 練英文用的
2分鐘檢測你的單字能力 http://systw.net/word/q.php

Niko

  • 活潑的大學生
  • ***
  • 文章數: 281
  • 性別: 男
    • 檢視個人資料
Re: LDAP over TLS
« 回覆 #5 於: 2013-01-24 11:53 »
HAHA!!!大大太謙虛了..
小弟的作法是WiFi WPA2 + eap-peap +  mschap + openldap
目前大致成功,ios、android、winxp都可驗證通過並連線,但是win7就是不行 (mac手邊沒有 :P)
radius server上也出現"Sending Access-Accept",但是在win7使用內建軟體就是出現無法連線,如果用其它軟體去連線又是可以(如dlink的Wireless Connection Manager)

忘了補充,等小弟整理好後再PO上來請教大大!!!
« 上次編輯: 2013-01-24 16:09 由 Niko »

treble

  • 活潑的大學生
  • ***
  • 文章數: 215
    • 檢視個人資料
    • 牛的大腦
Re: LDAP over TLS
« 回覆 #6 於: 2013-01-24 20:08 »
是無線做802.1x嗎?因為聽很多負面的事情,所以這部份我就沒去實做了

win7應該是要最容易成功的說
[牛的大腦  http://systw.net ] 用來放一些筆記資料
[單字我朋友  http://systw.net/word ] 練英文用的
2分鐘檢測你的單字能力 http://systw.net/word/q.php

Niko

  • 活潑的大學生
  • ***
  • 文章數: 281
  • 性別: 男
    • 檢視個人資料
Re: LDAP over TLS
« 回覆 #7 於: 2013-01-24 22:28 »
是啊!!但是小弟用戶驗證的方式是用PEAP及MSCHAPv2來做的....
開debug模式去看,是有Access-Accept,但是win7確跟我說無法連線...冏
小弟會邊找方法邊把做法整理好再貼上來給各位大大們看看,是否哪裡有漏掉沒設定好的

treble

  • 活潑的大學生
  • ***
  • 文章數: 215
    • 檢視個人資料
    • 牛的大腦
Re: LDAP over TLS
« 回覆 #8 於: 2013-01-24 22:59 »
太好了,又可以學到新東西了,期待你的實作過程
[牛的大腦  http://systw.net ] 用來放一些筆記資料
[單字我朋友  http://systw.net/word ] 練英文用的
2分鐘檢測你的單字能力 http://systw.net/word/q.php

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17308
    • 檢視個人資料
    • http://www.study-area.org
Re: LDAP over TLS
« 回覆 #9 於: 2013-01-26 09:19 »
哇!這個不推不行!

讚~~~

Niko

  • 活潑的大學生
  • ***
  • 文章數: 281
  • 性別: 男
    • 檢視個人資料
Re: LDAP over TLS
« 回覆 #10 於: 2013-01-26 12:58 »
小弟找到原因了,非常....囧
win7的問題是出在usb無線網卡的光碟driver太舊,似乎在win7上有問題,重新下載個新的就可以了.....


netman大大,小弟只是一個小小的MIS,還有許多地方要跟你們各位大大學習!!! ;D

treble

  • 活潑的大學生
  • ***
  • 文章數: 215
    • 檢視個人資料
    • 牛的大腦
Re: LDAP over TLS
« 回覆 #11 於: 2013-01-26 19:17 »
太棒了

以後找相關文獻就快多了
[牛的大腦  http://systw.net ] 用來放一些筆記資料
[單字我朋友  http://systw.net/word ] 練英文用的
2分鐘檢測你的單字能力 http://systw.net/word/q.php

Niko

  • 活潑的大學生
  • ***
  • 文章數: 281
  • 性別: 男
    • 檢視個人資料
Re: LDAP over TLS
« 回覆 #12 於: 2013-02-06 23:28 »
太棒了

以後找相關文獻就快多了
XD,有人跟小弟說讓user越無腦越好,所以client端要改成用Captive Portal的方式,有稍微做了點功課,最簡單的方式是買台高級點的無線AP或是所謂的無線閘道器就可以辦到,但是要花錢......不過在linux上還有另外找到一個叫CoovaChilli的套件似乎就可以辦到....年關將近比較忙一點,所以還沒開始仔細研究,看來小弟的筆記又得延後了,不知道過年連假能不能完成.....