千家信息网

Openldap 整合windows AD认证

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,Openldap 整合windows AD认证I.解决的问题Openldap是开源的目录服务实现,windows AD是微软的目录服务现实。现状是有的场景(应用、客户端)跟openldap结合比较容易
千家信息网最后更新 2026年10月31日Openldap 整合windows AD认证

Openldap 整合windows AD认证

I.解决的问题

Openldap是开源的目录服务实现,windows AD是微软的目录服务现实。现状是有的场景(应用、客户端)跟openldap结合比较容易,有的场景又是必须要用AD,所以几乎不可能弃用其中的任意一种。但同时维护两套系统意味着维护工作大量增加(不仅仅只是增加一倍,要考虑信息分别维护、同步etc等)、出错几率增加。

其中的一种较成熟、使用比较多的解决方案是:openldap使用windows AD的认证,这样只需要在AD上维护一套用户密码即可。

II.流程图

如图,相关组件分四大部分:

1.LDAP client ;这个是实际调用ldap服务的系统,也可以是类似ldapsearch之类的client 程序

2.Openldap; 开源服务端,实际进程为slapd

3.Saslauthd;简单认证服务层的守护进程,该进程要安装在openldap服务器上
4.Active directory;即windows AD,这个不用解释

III.具体配置

A.检查Openldap

检查openldap安装时是否有编译参数 ./configure --enable-spasswd;如没有需要重新编译,否则不支持之后形如 userPassword: {SASL}user@domain的语法配置

Openldap的安装本文不再详细介绍

B.Saslauthd安装配置

1.安装 yum install cyrus-sasl

通过命令可查看

[root@localhost ~]# rpm -ql cyrus-sasl|grep bin

/usr/sbin/pluginviewer

/usr/sbin/saslauthd #守护进程,主程序

/usr/sbin/testsaslauthd #测试程序

[root@localhost ~]# rpm -ql cyrus-sasl|grep etc

/etc/rc.d/init.d/saslauthd #启动脚本

/etc/sysconfig/saslauthd #配置文件,conf

2.【可选】先熟悉、测试sasl本身

比如 adduser blake ; passwd blake #增加一个linux系统测试账号,设置密码

配置saslauthd使用shadow认证

      编辑 /etc/sysconfig/saslauthd,修改使 MECH=shadow一行 ,最终修改为MECH=ldap

启动saslauthd进程,service saslauthd start

测试testsaslauthd -u blake -p 密码

这里如密码正确应该出现认证成功,密码错误则失败,到这里可理解sasl本身OK的。后续配置还会用 testsaslauthd 程序测试、调试。验证OK后可删除用户。

3.配置sasl关联到ad域

【可选】先用ldap客户端测一下windowad域是否可用,用户密码是否正确,比如

ldapsearch -x -H ldap://192.168.0.101 -D "CN=administrator,CN=Users,DC=test,DC=com" -w 密码 -b "DC=test,DC=com"

这个命令ldapsearch是客户端程序,IP地址是windows AD的地址,-x参数表示简单认证,-D参数后面的一串是AD里的用户DN,其中DC=test是AD域的域名,-w后面跟密码,-b指base DN。

这个命令要成功输出东西,否则就是ldap服务器连windows AD出问题,需检查网络、用户、密码、DN等等。

下面配置sasl访问ad,再次修改 vi /etc/sysconfig/saslauthd,修改两行:MECH=ldap FLAGS="-O /etc/saslauthd2ad.conf"

然后新建一个 /etc/saslauthd2ad.conf ,写入下面内容

/etc/saslauthd2ad.conf

ldap_servers: ldap://192.168.0.101

ldap_search_base: CN=Users,DC=test,DC=com

ldap_timeout: 10

ldap_filter: sAMAccountName=%U

ldap_bind_dn: CN=administrator,CN=Users,DC=test,DC=com

ldap_password: password

ldap_deref: never

ldap_restart: yes

ldap_scope: sub

ldap_use_sasl: no

ldap_start_tls: no

ldap_version: 3

ldap_auth_method: bind

如:ldap_servers: ldap://192.168.0.7 ldap://192.168.0.20
ldap_search_base: DC=shuobaotang,DC=com
ldap_timeout: 10
ldap_filter: sAMAccountName=%U
ldap_bind_dn: CN=ldap_office,CN=Users,DC=shuobaotang,DC=com
ldap_password: *****
ldap_deref: never
ldap_restart: yes
ldap_scope: sub
ldap_use_sasl: no
ldap_start_tls: no
ldap_version: 3
ldap_auth_method: bind

该文件的主要参数:

ldap_servers: LDAP URI, windowsAD地址

ldap_bind_dn: DN for connection ,一个windows AD用户的DN,实际不需要admin的

ldap_password: Password for connection,密码

ldap_search_base: Search base

ldap_filter: Search filter ,%U 表示user, %u 表示user@domain

重启服务service saslauthd restart

测试testsaslauthd -u administrator -p 密码 ,这里就是使用AD域的用户-密码认证了,并不只是写到配置文件里面的administrator,而是所有AD用户都已经可以用testsaslauthd程序测试验证。可进一步AD里面加用户、或改密码测试。需注意AD修改密码,老密码依然可用5分钟。如验证不通过检查 sasl的配置。

C.配置openldap使用Saslauthd

修改openldap的配置文件 /etc/openldap/slapd.conf加入

sasl-host localhost

sasl-secprops none

这两行配置是告诉openldap使用本机的sasl

再修改/新建sasl的配置文件,vi /etc/sasl2/slapd.conf

mech_list: plain

pwcheck_method: saslauthd

saslauthd_path: /var/run/saslauthd/mux

这个配置文件相当于sasl的前端,意思是来自于slapd的请求,让saslauthd接手处理。注意这两个配置文件文件名是相同的,但却是不同软件包的配置文件。如果slapd是用非root的OS用户启动的,那还要将用户加到组里。

usermod -a -G sasl ldap

最后修改openldap里面的用户配置,比如在openldap里新建用户blake,设置userpassword: {SASL}blake,这样openldap就会讲用户blake转发给sasl程序认证,而sasl又会进一步转发给windows AD,至此配置完成。

最终测试:

ldapsearch -w 密码1 -H ldap://192.168.0.107 -D "cn=blake,ou=users,dc=saybot,dc=com" -b "cn=blake,ou

=users,dc=saybot,dc=com"

这个测试命令,blake用户在openldap和windows AD上都存在,IP是本机openldap的IP,DN,查询DN也都是openldap的信息,但是密码却是在windows AD上管理的。如成功,到windows AD上修改用户密码,用新密码验证,再等5分钟,旧密码失效。到此配置完成。

IV.配置SSL
/TLS支持

前面的配置有一个安全问题。这样配置下来密码从openldap到windows AD只是明文传输。如果不是在内网、或有×××保护,就有可能被截取。并且,openldap 到 windows AD 之间其实是会传输两个用户名/密码。一个是配置在saslauthd 里面的的用户,一个是真正连入openldap的认证用户。

/TLS支持

前面的配置有一个安全问题。这样配置下来密码从openldap到windows AD只是明文传输。如果不是在内网、或有×××保护,就有可能被截取。并且,openldap 到 windows AD 之间其实是会传输两个用户名/密码。一个是配置在saslauthd 里面的的用户,一个是真正连入openldap的认证用户。

file0002.jpg

一次认证,可截获2个用户名/密码,都是明文

解决方案有这么几种:

Ø外层网络层加密,比如×××隧道

Ø使用windows安全认证如NTLM 、Kerberos

Ø启用SSL/TLS镶套协议

本文采用TLS方案

D.Windowsad启用TLS

Windows AD启用TLS支持需要先安装证书服务,即 AD CS,建议在功能里面安装相关管理工具。安装完成后执行 certutil -dcinfo verify ,再用ldp.exe程序本地验证。

通过后在用ldapsearch远程验证。这个有几个注意点,过程如下:

4.导出windows证书,并配置给ldapsearch

windows的证书导出如图:

一次认证,可截获2个用户名/密码,都是明文

解决方案有这么几种:

Ø外层网络层加密,比如×××隧道

Ø使用windows安全认证如NTLM 、Kerberos

Ø启用SSL/TLS镶套协议

本文采用TLS方案

D.Windowsad启用TLS

Windows AD启用TLS支持需要先安装证书服务,即 AD CS,建议在功能里面安装相关管理工具。安装完成后执行 certutil -dcinfo verify ,再用ldp.exe程序本地验证。

通过后在用ldapsearch远程验证。这个有几个注意点,过程如下:

4.导出windows证书,并配置给ldapsearch

windows的证书导出如图:

讲导出的文件传到ldapsearch所在服务器

修改配置文件(ldap客户端配置文件和openldap客户端配置文件是不同的)

/usr/local/openldap2.4/etc/openldap/ldap.conf

加入 TLS_CACERT /etc/openldap/certs/ca2.crt

5.可能需要修改/etc/hosts

192.168.0.101 WIN-QLMQQENMPLO.test.com

因为会验证主机名是否与证书里的字段匹配,所以不能用ip地址访问

测试命令:

ldapsearch -x -H ldaps://WIN-QLMQQENMPLO.test.com -D "CN=blake,CN=Users,DC=test,DC=com" -w 密码 -b "CN=administrator,CN=Users,DC=test,DC=com"

注意连接协议是ldaps,默认636端口,不再是ldap

这里OK了再继续。否则后面也容易出问题

E.Sasl配置TLS

修改配置文件/etc/saslauthd2ad.conf

[root@localhost log]# cat /etc/saslauthd2ad.conf

ldap_servers: ldaps://WIN-QLMQQENMPLO.test.com/

ldap_search_base: CN=Users,DC=test,DC=com

ldap_filter: sAMAccountName=%U

ldap_bind_dn: CN=administrator,CN=Users,DC=test,DC=com

ldap_password: 密码

ldap_tls_cacert_file: /etc/openldap/certs/ca-test.cer

这里和前面的配置有2点不同,一是协议变为ldaps,而是最后一行指定了证书。就是前面从windows导出的证书。这里的逻辑是:自签名的ssl/tls证书,ldaps要求把自签名用到的ca证书配置给客户端。Ldapsearch程序修改ldap.conf文件,sasl则修改本文件。

使用testsaslauthd -u administrator -p 密码 命令验证

F.Openldap配置TLS

Openldap服务端也可以配置TLS,配置文件是slapd.conf

比如 /usr/local/openldap2.4/etc/openldap/slapd.conf

增加3行

TLSCACertificateFile /etc/openldap/certs/ca.crt

TLSCertificateFile /etc/openldap/certs/ldap.crt

TLSCertificateKeyFile /etc/openldap/certs/ldap.key.pem

这里第一行是自签名用到的ca证书(可以不是本机,可以用前面的windows服务器来签证书),第二行是本机服务器证书,第三行是本机服务器证书密钥。证书的概念这里不详细讲解。

之后,用命令开启TLSslapd -4 -h "ldap:/// ldaps:///"

特别注意,这里要验证openldapTLS的话又比较麻烦

可以先openssl s_client -connect localhost:636看一下证书对不对

然后配置ldapsearch 1.合并证书,即ldap.conf 配置文件里面,TLS_CACERT 参数指定的文件,直接用cat命令讲两个ca证书合并(一个是前面windows的,一个是签发给openldap的) 2.修改/etc/hosts 192.168.0.107 ldap

测试验证命令:ldapsearch -w 密码 -H ldaps://ldap -D "cn=blake,ou=users,dc=saybot,dc=com" -b "cn=blake,ou

=users,dc=saybot,dc=com"

G.概念总结

TLS的配置整体比较麻烦,把握以下概念:

ØLdap协议是389端口,明文;TLS加密后协议是ldaps ,636端口

ØWindowsad开启ldaps(TLS)安装活动目录证书(AD CS)服务

Ø证书有2种,1是服务器证书,2是签发服务器证书的ca证书

Ø自签名的情况下,客户端需要额外配置ca证书(第二种)

配置 密码 用户 证书 文件 服务 认证 测试 验证 命令 程序 服务器 客户 客户端 参数 方案 明文 进程 问题 本机 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技未来 奇酷互联网络科技公司 互联网科技论坛 中盈科技互联网信息有限公司 互联网教育科技公司vipkid 宁夏众和广鑫互联网科技有限公司 互联网科技与管理 苏州五指互联网络科技有限 世界互联网领先科技成果获奖 山东星卡互联网科技有限公司官网 产业互联网科技服务公司 普陀区互联网教育科技管理办法 广州智享互联网科技 银川新华互联网科技学校是国营吗 众联互联网络科技 互联网科技博主张洲 恒生科技指数 中概互联网 互联网科技对化妆品行业 互联网的黑科技实验室 小牛互联网科技有限公司地址 花魁咖啡 互联网新科技 新华互联网科技学院 互联网巨头科技公司 易互联网科技有限公司 成都互联网科技公司100强 茂名市互联网科技产业园 每天都有哪些好的互联网科技 梅州GM互联网络科技有限公司 广东鹅鹅鹅互联网科技有限公司
0