今天在寫一支程式,想要連進AD改密碼,但是一開始怎樣都連接不上,後來查到windows AD要改密碼必須透過ldaps連線,於是照著門神大的這篇一步一步安裝 Windows 2012 AD LDAPs 安裝設定憑證 CA SSL TLS 必成功設定AD,用ldp.exe去測試是連線成功的。
但是遇到用程式連的時候,怎麼連都不成功。
一開始的設定如下:
l.set_option(ldap.OPT_REFERRALS, 0)
l.set_option(ldap.OPT_PROTOCOL_VERSION, 3)
l.set_option(ldap.OPT_X_TLS_CACERTFILE, os.getcwd()+"/ad.cer")
l.set_option(ldap.OPT_X_TLS,ldap.OPT_X_TLS_DEMAND)
l.set_option(ldap.OPT_X_TLS_DEMAND, True)
l.set_option(ldap.OPT_DEBUG_LEVEL, 255)
在bind的時候都直接跳憑證錯誤。
後來改用:
ldap.set_option(ldap.OPT_X_TLS_REQUIRE_CERT, ldap.OPT_X_TLS_NEVER)
反而成功了...甚至不用cert。
想請問2件事:
1.這樣DC到底有沒有用TLS?還是要另外設定?有什麼參考資料?
2.在程式中所使用的cert是從DC匯出的憑證嗎?
自問自答一下:
原因是因為我用自簽證書。
根據下面這篇參考資料:
https://stackoverflow.com/questions/3495739/ldap-connection-problem-with-self-signed-cert
ldap.set_option(ldap.OPT_X_TLS_REQUIRE_CERT, ldap.OPT_X_TLS_ALLOW)
加入這段才可以用證書登入並修改
這段是告訴openssl不要去外部驗證證書。
ldap.set_option(ldap.OPT_X_TLS_REQUIRE_CERT, ldap.OPT_X_TLS_NEVER)
這段是忽略證書檢查,基本上就沒有安全性了。