2016年1月6日 星期三

moodle 2.6 with ldap over ssl (Windows AD)

windows ad,簡單說,就是不搞死你不甘心就對啦!

場景簡介:moodle 2.6用ldap協定認AD帳號,OK就OK,不OK就認證失敗,以我的環境來說,有個問題,就是已經OK的使用者不能改密碼,真瞎。

為啥咧?

因為AD就是要搞你啊!哈哈,如果不是LDAP over ssl,簡稱ldaps的connection,那client對AD的操作幾乎就是read-only,看的到吃不著,我爽給你甚麼你就吃甚麼。

解決方案:啟動ldaps on windows ad

AD: windows 2008 R2

【enable ldaps on windows ad】

這是用windows 2008的certificate server做的
http://social.technet.microsoft.com/wiki/contents/articles/2980.ldap-over-ssl-ldaps-certificate.aspx

如果火氣大
http://www.javaxt.com/Tutorials/Windows/How_to_Enable_LDAPS_in_Active_Directory
用openssl也行,一開始用這個,因為我們的CA在linux server上,但我沒做出來,所以僅供參考,方法步驟看起來是對的。

照上述步驟,用ldap client連連看,應該就可以了.........吧!?想得美啊!

如本文開宗明義所揭示,不搞死你怎麼會甘心?上面,只是把門做好,鎖匙還沒給你啊,急啥?

給你鎖匙
https://technet.microsoft.com/en-us/library/cc546864.aspx

dsHeuristics 的 值 改成 001,就是 KEY。

以上弄好了,LDAPS也差不多了,reboot一下AD伺服器後,用ldap client以ldaps(tcp 636),連連看,有撈到點甚麼東西也就行了。

接下來搞moodle,moodle部分簡單多了...
1. 確認 apache 支援 openssl
2. 確認 php 支援 openssl
3. 確認 openldap 支援 openssl
4. 確認你裝了openssl
5. 確認你裝了openldap
6. 從AD匯出憑證
7. 到apache,匯入憑證
8. ldap載入憑證
9 用php測試ldaps是否OK
10. 用moodle登入、修改密碼是否OK
11. 你還想繼續搞啊,去喝咖啡吧!

一般來說如果是跑web server大多都會裝好,openldap則未必,若是ubuntu系統,請愛用apt-get
// install openldap
# apt-get install openldap openldap-devel
劈哩啪啦裝好即可

提醒你一下,上面已經到第五步了。

6. 到AD上匯出憑證
MMC主控台 => 嵌入 憑證 => 項目選 【本機電腦】=> 受信任的根憑證brabra => 找到你的憑證 => 按右鍵選【匯出】=> 匯出格式 選 cer => 找個目錄擺著

然後想辦法憑證搞到apache server上,用FTP、SCP(如果你有裝)等等都可。

7. apache server (ldap client),也就是跑moodle的地方
# openssl x509 -in 我的剛剛傳來的.cer -inform DER -out 我要存到啥地方.pem -outform PEM
這個-out xxx.pem,最好放在 /etc/ssl/certs,也就是ssl預設的路徑下。

 再來執行 c_rehash 指令,稀哩呼嚕,跑完沒出包,即可。

7.5 (這是多的) 可以test一下
openssl verify -verbose -CApath /etc/ssl/certs /etc/ssl/certs/my_server_certificate.pem
/etc/ssl/certs/my_server_certificate.pem: OK

 若出現OK,算你好運,到目前為止一切順利。

 順便提醒一下,若前端web server有多台,比方說有load balance,這個pem憑證,每台都要做一次。

 8. /etc/ldap/ldap.conf
# Define location of a CA Cert
TLS_CACERT /etc/ssl/certs/my_server_certificate.pem
TLS_CACERTDIR /etc/ssl/certs

 TLS_REQCERT never

 9. 以上都好了就restart一下apache
# service apache2 restart

 測試

 # a.php
<?php
function connect_AD()
  {
    $ldap_server = "ldaps://my.ad.server.ip.or.FQDN" ;
    $ldap_user   = "CN=Administrator,CN=你的,DC=你的,DC=你的,DC=你的,DC=你的" ;
    $ldap_pass   = "密碼" ;
    $ad = ldap_connect($ldap_server) ;
    ldap_set_option($ad, LDAP_OPT_PROTOCOL_VERSION, 3) ;
    $bound = ldap_bind($ad, $ldap_user, $ldap_pass);
    return $ad ;
  }
connect_AD();
?>

# php a.php
沒出現error,就好啦!

 10. 以moodle admin登入,把ldap的認證,改成ldaps://,另外有一個參數,有關密碼修改的,叫甚麼【使用標準頁面來變更密碼】,勾【是】。就可以試試看,登入,改密碼。

 後記:改完蠻有趣的,會有一段cache短暫的時間,這段時間內,只要認這台AD的服務(包含其他非MOODLE的),新舊密碼都可以用,真是太搞笑啦!
















沒有留言:

張貼留言