一,大致流程。
1.首先在Linux上搭建一个LDAP服务器 2.在LDAP服务器上安装CA证书,服务器证书,因为SSL/TLS,start tls都属于机密通信,需要客户端和服务器都存在一个相同的证书认证双方的身份。3.安装phpldapadmin工具,为我们提供一个可视化操作的LDAP服务器界面,让我们能够方便去管理用户,组织。4.通过TLS和start tls和连接到LDAP服务器。
2.提交了解,新手必看。首先你在执行下述安装LDAP搭建之前,创建一个新的ubuntu的作为你的服务器的载体。其次,你新建的这个ubuntu的IP地址就是你LDAP服务器的IP地址,默认服务器管理员账户名为admin。鬼知道我之前找IP地址和管理员账户在配置文件里面扒拉了多少时间。
二.搭建LDAP服务器
三.搭配CA证书,服务器证书
二,三两个步骤我就不写了,这两个文章在这位大佬里面的博客写得非常详细,直接粘贴复制这位大佬的命令就行了。然后我会解决大佬文章中出现的一个错误,应该是版本更迭原因。
大佬的文章做到"配置OpenLDAP以使用证书和密钥"这一步时,他在保存addcerts.ldif后直接执行了写入配置文件这条命令。
经过我多次测试,如果在执行这条命令前不执行重启Openldap服务:sudo service slapd force-reload这条命令的话,会报出ldap_modify: Other (e.g., implementation specific) error (80)这样的错误,当你保存addcerts.ldif这个文件之后,正确的执行命令应当是。
sudo service slapd force-reload
sudo ldapmodify -H ldapi:// -Y EXTERNAL -f addcerts.ldif
sudo service slapd force-reload
修改配置文件,开启SSL\TLS和Start TLS认证
sudo vim /etc/default/slapd
SLAPD_SERVICES="ldap:/// ldapi:/// ldaps:///" //手动开始服务器支持TLS和SSL,前提是你的证书和私钥全部安装完毕;ldapi表示开启Start TLS认证,ldaps表示开启SSL\TLS认证
sudo vim /etc/ldap/ldap.conf
在文件中添加下面两行数据
TLS_REQCERT try //表示强制开启client验证服务器的证书,如果改为allow,可以通过IP连接到服务器
TLS_CACERT /etc/ldap/ca_certs.pem //指定证书的位置
四,安装phpldapadmin工具(不需要可视化界面的可以直接跳到第五步,不影响连接到LDAP服务器)
搭载phpldapadmin,phpldapdamin,这是一个可视化的LDAP服务器操作页面,能够更好的管理LDAP服务器。
1.安装phpldapadmin工具包
sudo apt-get install -y phpldapadmin
2.安装成功之后检查对应的配置文件,红色为修改部分
sudo vim /etc/phpldapadmin/config.phphp //打开配置文件
$servers->setValue('server'. 'host', '127.0.0.1') //第三个参数修改为本地环回地址,一般都是这个
$servers->setValue('server'. 'base', array('dc=example,dc=com')) //填写域名,我的是example.com
$servers->setValue('login', 'bind_id', 'cn=ldap,dc=example,dc=com') //管理员名+域名 上诉步骤均没有指定管理员名,服务器的默认管理员名均为admin
保存退出
3. 配置文件修改之后配置防火漆:防火墙放行Apache2
Ubuntu命令行执行以下3条命令
ufw allow "Apache"
ufw allow "Apache Full"
ufw allow "Apache Secure"
4 重启服务器
sudo /etc/init.d/apache2 restart
5.将http:///phpldapadmin 替换为LDAP服务器的IP地址,将这个放到任意一个游览器中运行,点击左侧登录会出现以下画面进行登录
6.3.6 登录成功之后进入以下画面
五,连接到AD服务器
1.验证是否配置成功Strat TLS认证
这里的ldap://ldap.example.com 必须使用域名,不可以使用IP地址,因为client验证服务器的证书使用的是域名而不是IP地址,如果形式变为ldap://192.168.45.xxx 的形式,就不能连接到服务器。除非你将TLS_REQCERT try改为TLS_REQCERT allow(表示不强制开启client验证服务器的证书)。
ldapwhoami -H ldap://ldap.example.com -x -ZZ //-ZZ表示强制使用Strat TLS
如果成功,那么你将会看见
anonymous
如果失败,请检查以下
1. /etc/ldap/ldap.conf中指定的证书路径是否正确TLS_CACERT /etc/ldap/ca_certs.pem
2.证书内容是否在复制过程中,多了空格,换行,建议直接复制文件
3.服务器的/etc/default/slapd文件中的SLAPD_SERVICES="ldap:/// ldapi:/// ldaps:///"字段是否有ldapi:///内容,如果是该错误,修改完配置文件之后,重启服务sudo service slapd force-reload 。
4.如果以上3步全部正确,尝试在client的/etc/hosts加上反向域名解析:
sudo vim /etc/hosts
#添加方向域名解析
127.0.1.1 ldap.example.com ldap
127.0.0.1 localhost
192.168.45.147 ldap.example.com
2.远程客户端通过SSL\TLS连接到服务器
ldapwhoami -H ldaps://ldap.example.com -x
如果成功
anonymous
失败的话请查看Strat TLS中提到的错误检查,如果Strat TLS已经成功了,而你的SSL\TLS失败了,就只有/etc/default/slapd文件中的SLAPD_SERVICES字段没有添加ldaps:///
六,通过C++代码实现Strat TLS和SSL\TLS认证流程
......