简介
轻量目录访问协议(LDAP)被定义在RFC2251(LDAPv3)中,由于LDAP是以TCP字节流的方式进行数据传输,其必要的绑定操作和频繁的数据搜索查询会在一定程度消耗较多的TCP连接资源,于是IETF在1995年发布了面向无连接的轻量目录访问协议(CLDAP),官方文档为RFC1798。
LDAP
服务端搭建
openldap
- 命令行指定源hub.rat.dev
- 拉取镜像
[root\@localhost workspace]# docker pull hub.rat.dev/osixia/openldap
[root\@localhost workspace]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hub.rat.dev/osixia/openldap latest 31d1d6e16394 4 years ago 257MB
- 运行
- 默认账号admin
- 密码123456
- 组织mytest
- 域名mytest.com
[root@localhost workspace]# docker run \
-d \
-p 389:389 \
-p 636:636 \
-v /usr/local/ldap:/usr/local/ldap \
-v /var/openldap/ldap:/var/lib/ldap \
-v /var/openldap/slapd.d:/etc/ldap/slapd.d \
--env LDAP_ORGANISATION="mytest" \
--env LDAP_DOMAIN="mytest.com" \
--env LDAP_ADMIN_PASSWORD="123456" \
--name openldap \
--hostname openldap-host\
--network bridge \
hub.rat.dev/osixia/openldap
[root@localhost workspace]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1bd94c0e4478 hub.rat.dev/osixia/openldap "/container/tool/run" 5 seconds ago Up 4 seconds 0.0.0.0:389->389/tcp, :::389->389/tcp, 0.0.0.0:636->636/tcp, :::636->636/tcp openldap
phpldapadmin
- 拉取镜像
[root@localhost workspace]# docker pull hub.rat.dev/osixia/phpldapadmin
[root@localhost workspace]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hub.rat.dev/osixia/phpldapadmin latest dbb580facde3 4 years ago 309MB
- 运行
- 注意Ip和端口(按需设置)
- 192.168.11.102
- 18080
[root@localhost workspace]# docker run \
-p 18080:80 \
--privileged \
--name myldap \
--env PHPLDAPADMIN_HTTPS=false \
--env PHPLDAPADMIN_LDAP_HOSTS=192.168.11.102 \
--detach hub.rat.dev/osixia/phpldapadmin
[root@localhost workspace]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
82bf5635ac67 hub.rat.dev/osixia/phpldapadmin "/container/tool/run" 5 seconds ago Up 4 seconds 443/tcp, 0.0.0.0:18080->80/tcp, :::18080->80/tcp myldap
- 访问
- http://192.168.11.102:18080/
- DN:cn=admin,dc=mytest,dc=com
- 密码:123456
Go客户端
使用tcp协议,先进行绑定,再发起searchRequest请求。
- main.go
package main
import (
"fmt"
"log"
"github.com/go-ldap/ldap/v3"
)
func main() {
// 连接 LDAP 服务器
l, err := ldap.DialURL("ldap://192.168.11.102:389")
if err != nil {
log.Fatal(err)
}
defer l.Close()
// 绑定操作(添加这部分)
bindDN := "cn=admin,dc=mytest,dc=com" // 替换为实际绑定DN
password := "123456" // 替换为实际密码
if err := l.Bind(bindDN, password); err != nil {
log.Fatalf("绑定失败: %v", err)
}
// 构建 SearchRequest
searchRequest := ldap.NewSearchRequest(
"dc=mytest,dc=com", // The base dn to search
ldap.ScopeWholeSubtree, ldap.NeverDerefAliases, 0, 0, false,
"(objectClass=*)", // The filter to apply
[]string{"dn", "cn"}, // A list attributes to retrieve
nil,
)
// 执行搜索请求
sr, err := l.Search(searchRequest)
if err != nil {
fmt.Println("search failed.")
log.Fatal(err)
}
// 遍历搜索结果
for _, entry := range sr.Entries {
fmt.Printf("DN: %s, Common Name (CN): %s\n", entry.DN, entry.GetAttributeValue("cn"))
}
}
- 编译运行
[xiaofeng@localhost cldap]$ go build main.go
[xiaofeng@localhost cldap]$ ./main
DN: dc=mytest,dc=com, Common Name (CN): xf
DN: cn=aaaa bbbbbbbb,dc=mytest,dc=com, Common Name (CN): aaaa bbbbbbbb
- 报文分析
- bindRequest报文
- bindResponse报文
- searchRequest报文
- searchResEntry报文
- searchResDone报文
- bindRequest报文
CLDAP
Windows 10 AD LSD
- 点击 "开始" 按钮,搜索 "启用或关闭 Windows 功能",然后打开它并完成安装
- 点击 "开始" 按钮,找到 "Windows 管理工具",然后打开 "AD LDS 管理工具"。
- 创建 AD LDS 实例
rootDSE请求
rootDSE条目在AD服务配置时创建,且允许未经身份验证的客户端对服务器的配置状态、功能和扩展属性进行查询,也被称作“AD ping”
- bindRequest报文
- searchRequest报文
- 反射放大报文
- 放大倍数 请求包长度81,响应包长度2978,放大倍数36