公司的環境比較特殊, Windows server + Linux desktop, 所以我們希望在server端啟用LDAP over SSL功能. 當中走了不少彎路, 網上文章也搜了一大堆, 千辛萬苦終於搞定, 現在把過程記錄下來.
域控制器: 基於Win2012R2, 搭建這個沒什么難度所以過程省略.
證書服務器: Windows CA --> Ubuntu Server + OpenSSL --> Ubuntu Desktop + gnoMint, Windows CA太龐大, OpenSSL待研究, gnoMint簡單方便
客戶機: Ubuntu
先說說那些走過的彎路: 根據微軟的KB生成證書請求文件, 再去OpenSSl里生成CA, 然后私鑰公鑰簽發等等, 再將生成的證書導入到域控, 可惜始終無法成功.
后來干脆放棄命令行的OpenSSL, 使用了具有圖形界面的gonMint. 步驟其實也很簡單, 首先Add an autosigned CA, 然后Add a new certificate signing request (所以無需按照微軟KB的格式生成證書請求文件), 這樣就生成了根證書和它為域控簽發的證書, 分別導出為cer和pfx格式.
將這兩張證書導入域控, 其中根證書導入紅色框, 域控證書導入藍色框.
導入之后即可使用LDP.exe工具通過Port#636連接(注意: 連接時的服務器名必須和證書簽發時的CN名一致)
ld = ldap_sslinit("DC1.ABC.LOCAL", 636, 1); Error 0 = ldap_set_option(hLdap, LDAP_OPT_PROTOCOL_VERSION, 3); Error 0 = ldap_connect(hLdap, NULL); Error 0 = ldap_get_option(hLdap,LDAP_OPT_SSL,(void*)&lv); Host supports SSL, SSL cipher strength = 256 bits Established connection to DC1.ABC.LOCAL. Retrieving base DSA information... Getting 1 entries:
以下省略-----------
對於希望從Linux客戶端上通過ldapsearch命令查詢的需求, 需要改動的地方稍微有點多.
1. vi /etc/ldap/ldap.conf 加入以下行:
HOST DC1.ABC.LOCAL PORT 636 TLS_CACERT /home/chen/ca.crt ##指定根證書的路徑
2. ldapsearch -x -LLL -D 'CN=administrator,CN=Users,DC=abc,DC=local' -W -H ldaps://DC1.ABC.LOCAL -b 'OU=vb-user,DC=abc,DC=local'
2015-8-13更新:
我們發現用gnoMint生成的證書, 所使用的簽名算法是SHA1, 而且還無法更改. 但是這個算法即將被Google拋棄, 故在Chrome中依舊會顯示為不安全連接. 所以我們准備使用openssl命令生成證書, 但是得到的證書死活無法成功使用LDAPs, 經過大半天的研究終於找到原因, 現記錄如下:
左圖是默認使用openssl導出的證書, 右邊是修改了/etc/ssl/openssl.cnf參數的, 其中多了一項“增強型密鑰用法”, 也就是微軟KB文檔中的 OID=1.3.6.1.5.5.7.3.1
具體修改的地方是[ usr_cert ]下面的extendedKeyUsage屬性 (注意字母K和U為大寫),將其設置為1.3.6.1.5.5.7.3.1即可。
2015-8-14更新:
還有個簡單的辦法, 就是使用圖形化界面的tinyCA, 但是不知道為何在Ubuntu下沒有SHA-256的加密算法(https://github.com/pld-linux/tinyca/blob/master/tinyca-sha2.patch), CentOS下卻有.
參考網站:
https://support.microsoft.com/en-us/kb/321051
http://virtuallyhyper.com/2013/06/enabling-ldaps-on-windows-2008-active-directory-server/
https://www.digicert.com/ssl-certificate-installation-microsoft-active-directory-ldap-2012.htm
https://forums.opensuse.org/showthread.php/401522-Performing-ldapsearch-over-TLS-SSL-against-Active-Directory
http://serverfault.com/questions/571910/how-to-add-extended-key-usage-string-when-generating-a-self-signed-certificate-u
https://www.openssl.org/docs/manmaster/apps/x509v3_config.html