Tommy 碎碎念

Tommy Wu's blog

« 上一篇 | 下一篇 »

在 PHP 中使用 TLS 與 OpenLDAP 連線
post by tommy @ 20 六月, 2007 19:55

首先, TLS 是在 Protocol Version 3 才有提供, 所以必須在 ldap_connect() 之後, 使用 ldap_set_option() 設定使用 protocol version 3 才可以. 如果這樣子處理, 並沒有辦法正確的執行 ldap_bind(), 則必須在你 client 端的 ldap.conf 中, 加上 TLS_REQCERT 這個參數, 其值為 nerver 或 allow 才可以. 如果沒有 ldap.conf, 也可以利用環境變數 LDAPTLS_REQCERT 來設定, 或直接使用 putenv() 來設定這個變數.

<?php
$id = ldap_connect("ldaps://ldapserver", 636);
if (!$id) {
echo "ldap_connect() failed\n";
exit;
}
if (!ldap_set_option($id, LDAP_OPT_PROTOCOL_VERSION, 3)) echo "can't change to protocol 3\n";
putenv("LDAPTLS_REQCERT=allow");
if (@ldap_bind($id, "uid=tommy.wu,ou=people,dc=xxx,dc=com", "password"))
echo "bind ok!\n";
else
echo "bind fail!\n";
ldap_close($id);
?>

上頭的 ldaps:// 才表示是使用 SSL/TLS 來連線 (port 636 可省略), 如果只使用 ldap:// 或是單純的 ip 或 hostname, 就不使用 SSL/TLS.

另外, 我們也可以不需要連線到 port 636, 而是連到原本的 389 這個 port, 然後再使用 ldap_start_tls() 來告知要使用 TLS 連線, 一樣可以做到加密的功能, 如:

<?php
$id = ldap_connect("ldap://ldapserver", 389);
if (!$id) {
echo "ldap_connect() failed\n";
exit;
}
if (!ldap_set_option($id, LDAP_OPT_PROTOCOL_VERSION, 3)) echo "can't change to protocol 3\n";
putenv("LDAPTLS_REQCERT=allow");
if (!@ldap_start_tls($id)) echo "start tls failed\n";
if (@ldap_bind($id, "uid=tommy.wu,ou=people,dc=xxx,dc=com", "password"))
echo "bind ok!\n";
else
echo "bind fail!\n";
ldap_close($id);
?>

這樣子就可以了.

Del.icio.us Furl HEMiDEMi Technorati MyShare
迴響
暱稱:
標題:
個人網頁:
電子郵件:
迴響

  

Bad Behavior 已經阻擋了 128 個過去 7 天試圖闖關的垃圾迴響與引用。
Power by LifeType. Template design by JamesHuang. Valid XHTML and CSS