OpenLDAP 配置 TLS SSL 认证

OpenLDAP软件设计用于在各种计算环境中运行,从严格控制的封闭网络到全球Internet。因此,OpenLDAP软件支持许多不同的安全机制。

默认情况下:

1. 配置TLS/SSL创建CA证书

yum –y install openssl
cd /etc/pki/CA
(umask 077;openssl genrsa -out private/cakey.pem 2048)
openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3650 \
-subj "/C=CN/ST=福建省/L=厦门市/O=运维天涯/OU=湖里区/CN=ldap.fooher.com/emailAddress=Service@fooher.com"
touch index.txt
echo "01" > serial

2. ldap服务器端创建证书请求

cd /etc/openldap/certs/
(umask 077;openssl genrsa -out openldapkey236.pem 2048)
这里 -subj 后面内容要和上面一致不然有警告提示
openssl req -new -key openldapkey236.pem -out openldap236.csr -days 3650 -subj "/C=CN/ST=福建省/L=厦门市/O=运维天涯/OU=湖里区/CN=120.25.102.236/emailAddress=Service@fooher.com"

3. CA证书服务器签发证书

cd /etc/pki/CA
openssl ca -in /etc/openldap/certs/openldap236.csr -out /etc/pki/CA/certs/openldapcert236.pem -days 3650

 OpenLDAP CA证书服务器签发证书

4. 显示上面错误,请修改 openssl.cnf 文件,在第42行和330行

 OpenLDAP CA证书服务器签发证书

dir     = ./demoCA

改为

dir     = /etc/pki/CA

特别注意这个文件 index.txt

一定要是字节0,最好是删除然后用 touch inxex.txt 命令重建,,里面有一个字节都会导致openssl ca错误:

Using configuration from /usr/local/openssl/openssl.cnf
wrong number of fields on line 1 (looking for field 6, got 1, '' left)

然后执行下面命令:

openssl ca -in /etc/openldap/certs/openldap236.csr -out certs/openldapcert236.pem -days 3650

 OpenLDAP CA证书服务器签发证书

5. 配置 openldap 证书

cd /etc/pki/CA
/bin/cp /etc/pki/CA/certs/openldapcert236.pem /etc/pki/CA/cacert.pem /etc/openldap/certs/
chown -R ldap:ldap /etc/openldap/certs

这里执行权限时不要,千万不要把 certs 文件设成 0400

chmod -R 0400 /etc/openldap/certs/{openldapcert236.pem,cacert.pem,openldapkey236.pem}

注意:不要有空行,修改下面内容

vim /etc/openldap/slapd.ldif
olcTLSCACertificatePath: /etc/openldap/certs
olcTLSCertificateFile: "OpenLDAP Server"
olcTLSCertificateKeyFile: /etc/openldap/certs/password

改为

olcTLSCertificateFile: /etc/openldap/certs/openldapcert236.pem
olcTLSCertificateKeyFile: /etc/openldap/certs/openldapkey236.pem
olcTLSCACertificateFile: /etc/openldap/certs/cacert.pem
olcTLSVerifyClient: never

注意:在生产环境中重新生成配置文件一定要备份 "/etc/openldap/slapd.d" 这个目录,
防止 slapd.ldif 文件里的配置和 slapd.d 里的配置不一致,不然会导致有的配置不生效或者丢失掉,这里千万要注意.

systemctl stop slapd
/bin/mv /etc/openldap/slapd.d /etc/openldap/slapd.d_bak_$(date +%Y%m%d%H)
mkdir -p slapd.d
chown -R ldap:ldap /etc/openldap/slapd.d
vim /etc/sysconfig/slapd

修改下面的一行

SLAPD_URLS="ldapi:/// ldap:///"

改为:

SLAPD_URLS="ldapi:/// ldap:/// ldaps:///"

或者修改OpenLDAP默认监听389端口

SLAPD_URLS=”ldapi://0.0.0.0:4567/ldap://0.0.0.0:4567/“

重启OpenLDAP服务,如下:

systemctl daemon-reload
systemctl start slapd.service
netstat -tunlp

6. 删除配置文件,重新生成,删除前请备份 使用shell脚本,自动添加配置参数

cat > /etc/openldap/ldif/config_init.sh << EOF
#!/bin/bash
export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
rm -rf /etc/openldap/slapd.d/*
slapadd -n -0 -F /etc/openldap/slapd.d -l /etc/openldap/slapd.ldif
chown -R ldap:ldap /etc/openldap/slapd.d
systemctl restart slapd

ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/ldif/log.ldif

echo   -e "\033[34m 查看配置文件是否添加成功,这里要在全局里找 \033[0m"
cat /etc/openldap/slapd.d/cn\=config.ldif
netstat -tunlp
EOF

现在可以通过 LDAP admin 客户端连接 ssl 636 端口 tls测试是否正常,记得要把防火墙636端口要放行.
注意:如果无法启动ssl,检查证书文件权限,这里没有导入 cacert.pem 证书,状态下会显示 "无法找到该证书的颁发者"
LDAP admin 客户端连接 ssl

7. 开始导出 cacert.pem 证书,用 sz 命令保存到你指定的位置

yum -y install lrzsz
yum clean all && yum makecache
cd /etc/openldap/certs
sz cacert.pem

然后使用谷哥浏览器在地址栏里输入 "chrome://settings/security" 找到 "管理证书 管理 HTTPS/SSL 证书和设置" 点击进去,选择 "受信任的根证书颁发机构" 最后导入
添加自签发的SSL 证书为受信任的根证书
添加自签发的SSL 证书为受信任的根证书

8. 选择 cacert.pem 证书存放位置

添加自签发的SSL 证书为受信任的根证书

选择 "是" 确定完成

添加自签发的SSL 证书为受信任的根证书

9. 查看证书是否导入成功

添加自签发的SSL 证书为受信任的根证书

10. 也可以用使用 快捷键 "Win+R" 运行命令 "certmgr.msc" 进行查看

添加自签发的SSL 证书为受信任的根证书

11. 客户端配置tls/ssl,修改以下两项

vim /etc/openldap/ldap.conf
TLS_REQCERT hard
TLS_CACERT /etc/openldap/certs/cacert.pem

在这里我们签发证书时,我们用的是 "ca.fooher.com",所以下面一定要填写这个地址,不然报错.
域名 ca.fooher.com dn 没有解析的话请把这个域名加入到 /etc/hosts 里

127.0.0.1          ca.fooher.com

测试

ldapsearch -x -LLL dn

下面这个是如果在签发证书时(cn=IP),那么要使用下面命令

ldapsearch -x -LLL -H ldaps://120.25.102.236 -b dc=fooher,dc=com dn
ldapsearch -x -LLL -H ldaps://ldap.fooher.com dn -b dc=fooher,dc=com dn

添加自签发的SSL证书测试