LDAP:java操作AD域 解决常见问题,SSL连接

3 篇文章 0 订阅

LDAP(轻型目录访问协议)

通过IP协议提供访问控制和维护分布式信息的目录信息

是一个为查询、浏览和搜索而优化的数据库,它成树状结构组织数据,类似文件目录一样。

1、LDAP的结构用树来表示,而不是用表格。可以使用JDBC方式或者JNDI方式操作。
2、LDAP可以很快地得到查询结果,不过在写方面,就慢得多。
3、LDAP提供了静态数据的快速查询方式。
4、Client/server模型,Server 用于存储数据,Client提供操作目录信息树的工具。
5、LDAP是一种开放Internet标准,LDAP协议是跨平台的Interent协议。

目录服务

目录服务中的主要概念

目录树

  • 在一个目录系统服务中,整个目录信息集表示为目录树

  • 目录树中的每个节点是一个目录项,分为上层项、下层项、叶项、根项

对象类

  • 每个项对应一个对象,对象是现实世界物体的一个方面,有相同特征的对象有对象类标识

属性

  • 描述项的某个方面的一条信息称为属性。一个属性由一个属性类型或多个属性值组成。类型是助记符号。

甄别名称

  • RDN和DN,用来区别项。
  • RDN:相对标识,在同类中唯一标识本类
  • DN:完整标识,在目录树中唯一标识本类

模式

  • 控制数据库输入的各个方面的规则集

目录服务中的9种操作

  • 添加
  • 删除
  • 修改
  • 绑定
  • 解绑定
  • 查找
  • 比较
  • 修改甄别名称
  • 放弃操作

LDAP标准

一、LDAP的体系结构

LDAP目录服务基于客户/服务器模型,一个或火哥目录服务器包含的数据组成了LDAP目录树
一个客户端访问服务器可以从中得到更多信息的指针。无论LDAP客户端连接到哪一个LDAP服务器,他看到的目录树都是相同的。
这是想LDAP这样的全球目录服务的一个重要的特性

二、LDAP的会话机制

一次LADP会话过程包含以下4个步骤:

  1. 对本次LDAP会话初始化
  2. 客户身份验证
  3. 目录操作
  4. 结束会话

服务器对客户机的每个请求都有相应的应答信息

三、LDAP的安全机制

LDAP服务器的认证机制分为三种:无认证、基本认证和SASL认证

无认证

客户端连接服务器不需要进行认证

基本认证

客户端连接服务器提供连接的甄别名称和不加密的口令

SASL认证

sasl验证架构决定服务器本身如何存储客户端的身份证书以及如何核验客户端提供的密码。

三、LDAP的复制功能

LDAP用的是单一主服务器复制技术。一个服务器是数据库的主服务器,只有它才能在目录中进行修改,多个从属服务器提供整个目录数据库的完整信息。

四、LDAP的分布式和提名功能

  1. 分布式

LDAP支持分布式的目录服务,多个服务器存放目录的不太部分,目录服务器通过指针相连,指针称为LDAP URL,客户端查询的内容不再当前服务器,服务器返回LDAP URL,客户机按照URL去查询。

  1. 提名功能

(支持分布式)

LDAP使用场景

认证功能

  • LDAP可以快速告诉服务器用户信息
  • LDAP是国际标准的通信协议。结合LDAP与电子证书认证,可以是网上交易的资料得意确认,信息传递更有效率,失误率更低

web资源提名

LDAP为Web管理员提供提名机制,客户端访问Web资源,当资源不再当前目录中,则他将另一个目录的位置返回给客户端

内联网的Email管理

Email管理人员可以使用目录服务寻找用户邮件信箱所处的位置,不必保存个人的地址簿

LDAP安装配置

单机版

分布式

AD域安装配置

AD域搭建
创建AD域账户并登录
Windows对LDAP实现增删改查 1
Windows对LDAP实现增删改查 2

SID相同解决办法
更改密码复杂性要求

Java控制AD域

  1. 原生注解版

https://www.cnblogs.com/cnjavahome/p/9038363.html

https://www.cnblogs.com/cnjavahome/p/9043490.html

  1. spring ldap版

https://www.cnblogs.com/cnjavahome/p/9038363.html

  1. spring boot版

    https://blog.csdn.net/fukaiit/article/details/112427711

https://www.jianshu.com/p/3e14313aa3f5?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

4、解决spring版不能使用

问题描述

使用原生api可以查询到AD服务器上的信息,但是使用spring LDAP报错

javax.naming.PartialResultException: Unprocessed Continuation Reference(s)

解决方案:将389端口号更改为3268

​ 如果你使用的是636,就改成3269


相关资料
https://www.cnblogs.com/kevingrace/p/5773974.html

https://segmentfault.com/a/1190000014683418

增删改查方法

https://gitee.com/google1/spring-boot-ldap/blob/master/src/main/java/com/example/demo/repo/LdapService.java

https://blog.csdn.net/muriyue6/article/details/81586043

AD域证书

https://blog.csdn.net/hc1017/article/details/81293323?locationNum=1&fps=1

导出证书,连接SSL(重要)

https://blog.csdn.net/hct368/article/details/97247258

获取秘钥

https://lework.github.io/2019/07/24/ad-install/#配置域证书

漫游配置

https://blog.51cto.com/122932692/1935167

SMB

https://wenku.baidu.com/view/f935e50c824d2b160b4e767f5acfa1c7aa008220.html

磁盘映射

https://jingyan.baidu.com/article/ab0b5630720f97c15afa7dff.html

linux加入AD域

https://my.oschina.net/guol/blog/182291

AD域属性

https://www.cnblogs.com/wuyuxiang/p/5166650.html

Samba

https://www.cnblogs.com/hahayixiao/p/10250190.html

主副域(副域需要把DNS改为主域IP)

https://blog.csdn.net/tladagio/article/details/79489760

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要通过Java使用LDAP获取AD用户和组织信息,需要使用Java的JNDI API。 以下是一个简单的Java程序,演示如何使用JNDI API连接AD并获取用户和组织信息: ``` import java.util.*; import javax.naming.*; import javax.naming.directory.*; public class ADInfo { public static void main(String[] args) { String ldapURL = "ldap://AD服务器地址:389"; String ldapUser = "CN=LDAP查询用户,OU=xxx,DC=xxx,DC=xxx"; String ldapPassword = "LDAP查询用户密码"; String searchBase = "OU=xxx,DC=xxx,DC=xxx"; Hashtable<String, String> env = new Hashtable<String, String>(); env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); env.put(Context.PROVIDER_URL, ldapURL); env.put(Context.SECURITY_AUTHENTICATION, "simple"); env.put(Context.SECURITY_PRINCIPAL, ldapUser); env.put(Context.SECURITY_CREDENTIALS, ldapPassword); try { DirContext ctx = new InitialDirContext(env); SearchControls searchControls = new SearchControls(); searchControls.setSearchScope(SearchControls.SUBTREE_SCOPE); String filter = "(objectCategory=user)"; NamingEnumeration<SearchResult> results = ctx.search(searchBase, filter, searchControls); while (results.hasMore()) { SearchResult searchResult = results.next(); Attributes attributes = searchResult.getAttributes(); Attribute attribute = attributes.get("cn"); String cn = (String) attribute.get(); System.out.println(cn); } filter = "(objectCategory=organizationalUnit)"; results = ctx.search(searchBase, filter, searchControls); while (results.hasMore()) { SearchResult searchResult = results.next(); Attributes attributes = searchResult.getAttributes(); Attribute attribute = attributes.get("ou"); String ou = (String) attribute.get(); System.out.println(ou); } ctx.close(); } catch (NamingException e) { e.printStackTrace(); } } } ``` 在上面的代码中,替换以下变量: - ldapURL:AD服务器地址和端口号 - ldapUser:用于查询ADLDAP用户的DN - ldapPassword:用于查询ADLDAP用户的密码 - searchBase:要搜索的AD的基本DN 该程序连接AD并搜索用户和组织。它使用过滤器来限制搜索结果,只搜索用户和组织单位对象。它还使用SearchControls对象来设置搜索范围。 对于每个搜索结果,程序从属性中提取cn或ou,并将其打印到控制台上。 请注意,此代码需要在Java应用程序中包含JNDI API类路径。如果您使用Maven或Gradle之类的构建工具,则可以将以下依赖项添加到项目中: ``` <dependency> <groupId>com.sun.jndi</groupId> <artifactId>ldap</artifactId> <version>1.2.1</version> </dependency> ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值