如何通過 LDAP 向活動目錄調試 SASL 身份驗證
我正在嘗試配置在 Centos 6.5 上執行的 SASL,以允許對企業活動目錄伺服器進行身份驗證。最終目標是驗證對該伺服器上執行的某些顛覆儲存庫的訪問權限,但在這個階段,我只是試圖讓 saslauthd 進行身份驗證,並使用 testaslauthd 對其進行測試。
身份驗證每次都失敗,日誌中顯示以下內容:
saslauthd[20843] :do_auth : auth failure: [user=MYUSER] [service=svn] [realm=MYREALM] [mech=ldap] [reason=Unknown] saslauthd[20843] :do_request : response: NO
這是我的 /etc/saslauthd.conf:
ldap_auth_method: bind ldap_servers: ldaps://ldap.ad.mycompany.com:3269/ ldap_bind_dn: MYBINDDN ldap_password: xxxxxxxxxx ldap_search_base: DC=mycompany,DC=xx ldap_filter: (&(cn=%u)(objectClass=person)) ldap_referrals: yes log_level: 10
請注意,我知道 ldap 伺服器 URI、綁定 DN、密碼、搜尋庫和過濾器是正確的,因為我有一個 perl 腳本,它使用這些腳本對網站執行身份驗證,並且工作正常。perl 腳本使用 Net::LDAP,綁定到 AD,使用搜尋庫和過濾器搜尋使用者,然後嘗試使用使用者的 DN 和密碼進行綁定。據我了解,這正是 SASL 應該嘗試按照我配置它的方式進行的操作。
我的第一個觀察結果是,儘管將 log_level 設置為 10,但我只收到一條線告訴我它失敗了,原因未知。我使用 -d (調試)選項從 shell 啟動 saslauthd。我還能做些什麼來獲得更多的調試輸出?
有什麼方法可以記錄 LDAP 互動?
最後,有人能看出我的配置有什麼問題嗎?也許一些 AD 怪癖需要在 SASL 配置中進行特殊設置?
最後,我無法讓 saslauthd 輸出任何更好的調試資訊,但如果它可以幫助其他人,這是我解決問題所遵循的過程。
首先,我使用 strace 啟動 saslauthd,如下所示:
# strace -f saslauthd -d -a ldap
然後我可以看到 saslauthd 進行的所有系統呼叫。它看起來好像在與 AD 伺服器的初始交換期間失敗了,可能是在 TLS 協商期間。
我決定看看是否可以使用 openldap 提供的命令行 ldapsearch 工具重現類似的行為。我給出了這樣的命令:
$ ldapsearch -d 9 -H ldaps://ldap.ad.mycompany.com:3269/ -D MYBINDDN -w xxxxxx \ -b DC=mycompany,DC=xx '(&(cn=myuser)(objectClass=person))'
-d 9 終於給了我一些有用的調試輸出:
TLS: certificate [CN=VeriSign Class 3 Public Primary Certification Authority - G5,OU="(c) 2006 VeriSign, Inc. - For authorized use only",OU=VeriSign Trust Network,O="VeriSign, Inc.",C=US] is not valid - error -8179:Peer's Certificate issuer is not recognized..
閱讀 ldap.conf 的手冊頁,我發現我應該將 TLS_CACERT 和/或 TLS_CACERTDIR 設置為指向證書包和文件。我正在使用 Centos 6,它在 /etc/pki/tls/certs/ 中有這些,所以我設置了以下內容:
TLS_CACERT /etc/pki/tls/certs/ca-bundle.crt TLS_CACERTDIR /etc/pki/tls/certs/
之後 ldapsearch 工作,重新啟動 saslauthd 後,對 AD 伺服器的身份驗證成功。