OpenLDAP 配置 TLS SSL https 认证

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=ca.fooher.com/emailAddress=Service@fooher.com"/pre>

2.创建 index.txt 和 serial 文件

index.txt文件用于存放客户端证书信息,serial文件用于存放客户端证书编号,可以自定义,用于识别客户端证书
touch index.txt
echo "01" > serial

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

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

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

CA检测用户请求,通过后生成证书

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

 OpenLDAP CA证书服务器签发证书

5. 显示上面错误,请修改 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证书服务器签发证书

6. 测试服务端证书的合法性

openssl verify -CAfile /etc/pki/CA/cacert.pem /etc/openldap/certs/openldapcert61.pem
/etc/openldap/certs/openldapcert61.pem: OK

6. 配置 openldap 证书

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

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
chmod -R 0400 /etc/openldap/certs/{openldapkey236.pem,openldapkey236.csr,cacert.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

7. 测试服务端证书的合法性

openssl verify -CAfile /etc/pki/CA/cacert.pem /etc/openldap/certs
/etc/openldap/ssl/ldapcert.pem: OK

7. 删除配置文件,重新生成,删除前请备份 使用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/slapdlog.ldif

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

ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/ldif/slapdlog.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

8. 开始导出 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 证书为受信任的根证书

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

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

选择 "是" 确定完成

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

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

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

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

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

12. 客户端配置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://ca.fooher.com -b dc=fooher,dc=com dn

添加自签发的SSL证书测试

13. OpenLDAPadmin 配置 https 认证

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

默认情况下:

  • ldap监听在 389/tcp 端口
  • ldaps监听在 636/tcp 端口
yum -y install httpd mod_ssl
mkdir -p /etc/httpd/sslcert
cd /etc/httpd/sslcert
(umask 077;openssl genrsa -out openldapadmin.key 2048)
openssl req -new -key openldapadmin.key -out openldapadmin.csr -days 3650 -subj "/C=CN/ST=福建省/L=厦门市/O=运维天涯/OU=湖里区/CN=ldap.fooher.com/emailAddress=Service@fooher.com"
openssl ca -in openldapadmin.csr -out /etc/pki/CA/certs/openldapadmin.crt -days 3650 -subj "/C=CN/ST=福建省/L=厦门市/O=运维天涯/OU=湖里区/CN=ldap.fooher.com/emailAddress=Service@fooher.com"

 httpd 配置 ssl 证书

/bin/cp /etc/pki/CA/certs/openldapadmin.crt /etc/httpd/
/bin/cp /etc/pki/CA/certs/openldapadmin.crt /etc/httpd/certs/
chown -R apache:apache /etc/httpd
chmod -R 0400 /etc/httpd/certs/*
vim /etc/httpd/conf.d/phpldapadmin.conf 

下面是配置 Apache

cat > /etc/httpd/conf.d/openldapadmin.conf << EOF

   DocumentRoot "/usr/share/ldap/htdocs"
   ServerName ldap.fooher.com
   ServerAdmin service@fooher.com
   DirectoryIndex index.html index.htm index.php
   ErrorLog "/var/log/ldap.fooher.com_error.log"
   CustomLog /var/log/ldap.fooher.com_access_nts_%Y%m%d.log comonvhost
   Alias /phpldapadmin /usr/share/ldap/htdocs
   Alias /ldapadmin /usr/share/ldap/htdocs
  
     
     #Apache 2.4
     Require all granted
     Require local
     
     
     # Apache 2.2
     Order Deny,Allow
     Allow from 127.0.0.1
     Allow from ::1
     
  


   DocumentRoot "/usr/share/ldap/htdocs"
   ServerName ldap.fooher.com
   ServerAdmin service@fooher.com
   DirectoryIndex index.html index.htm index.php
   ErrorLog "/var/log/ldap.fooher.com_error.log"
   CustomLog /var/log/ldap.fooher.com_access_nts_%Y%m%d.log comonvhost
   Alias /phpldapadmin /usr/share/ldap/htdocs
   Alias /ldapadmin /usr/share/ldap/htdocs
   SSLEngine on
   SSLCertificateFile "/etc/httpd/conf/sslcert/openldapadmin.crt"
   SSLCertificateKeyFile "/etc/httpd/conf/sslcert/openldapadmin.key" 
  
     
     #Apache 2.4
     Require all granted
     Require local
     
     
     # Apache 2.2
     Order Deny,Allow
     Allow from 127.0.0.1
     Allow from ::1
     
  

EOF
chown -R apache:apache /etc/httpd

启动 Apache

systemctl start httpd
systemctl enable httpd

浏览器打开

https://ldap.fooher.com

 httpd 配置 ssl 证书