OpenLdap中TLS协议配置

TLS协议配置

在 LDAP 中启用 TLS(Transport Layer Security)需要完成 证书生成服务端配置客户端配置 三个核心步骤,确保 LDAP 服务器与客户端之间的通信通过加密通道进行。以下是详细操作流程(以 OpenLDAP 为例):

一、前提条件
  1. 已安装 OpenLDAP 服务(slapd),并正常运行。

  2. 需安装证书工具:openssl(用于生成证书)。

  3. 确定 LDAP 根域(如 dc=hadoop,dc=com)和服务器主机名(如 cdh01.hadoop.com)。

二、生成 TLS 证书(CA 根证书 + 服务器证书 主)

LDAP 启用 TLS 需要 CA 根证书(用于签名)和 服务器证书(LDAP 服务端使用),建议在 LDAP 服务器(服务端)上操作:

1. 创建证书存储目录
# 创建证书存放目录(OpenLDAP 默认读取此路径)
mkdir -p /etc/openldap/certs
chown -R ldap:ldap /etc/openldap/certs  # 确保 ldap 用户有权限访问
chmod 700 /etc/openldap/certs
2. 生成 CA 根证书(自签名,测试 / 内部环境用)
# 生成 CA 私钥(无密码,生产环境建议加密码)
openssl genrsa -out /etc/openldap/certs/ca.key 2048

# 生成 CA 根证书(有效期 3650 天)
openssl req -new -x509 -days 3650 -key /etc/openldap/certs/ca.key \
  -out /etc/openldap/certs/ca.crt \
  -subj "/C=CN/ST=Beijing/L=Beijing/O=hadoop/OU=bigdata/CN=hadoop-ca"
# 说明:subj 字段根据实际情况修改(C=国家,ST=省份,L=城市,O=组织,CN=CA 名称)
3. 生成 LDAP 服务器证书
# 生成服务器私钥
openssl genrsa -out /etc/openldap/certs/server.key 2048

# 生成证书请求(CSR),CN 必须与 LDAP 服务器主机名一致(如 cdh01.hadoop.com)
openssl req -new -key /etc/openldap/certs/server.key \
  -out /etc/openldap/certs/server.csr \
  -subj "/C=CN/ST=Beijing/L=Beijing/O=hadoop/OU=bigdata/CN=cdh01.hadoop.com"

# 用 CA 根证书签名服务器证书(有效期 365 天)
openssl x509 -req -in /etc/openldap/certs/server.csr \
  -CA /etc/openldap/certs/ca.crt \
  -CAkey /etc/openldap/certs/ca.key \
  -CAcreateserial \
  -out /etc/openldap/certs/server.crt \
  -days 365
4. 调整证书权限(关键!)
# 服务器私钥必须让 ldap 用户可读
chmod 600 /etc/openldap/certs/server.key
chown ldap:ldap /etc/openldap/certs/server.key

# 其他证书权限
chmod 644 /etc/openldap/certs/ca.crt /etc/openldap/certs/server.crt
三、配置 LDAP 服务端(slapd)启用 TLS

通过修改 OpenLDAP 配置,启用 TLS 并指定证书路径:

1. 创建 TLS 配置 LDIF 文件(主)
vim tls.ldif

添加以下内容(替换为实际证书路径):

dn: cn=config
changetype: modify
replace: olcTLSCACertificateFile
olcTLSCACertificateFile: /etc/openldap/certs/ca.crt
-
replace: olcTLSCertificateFile
olcTLSCertificateFile: /etc/openldap/certs/server.crt
-
replace: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/openldap/certs/server.key
2. 应用配置到 LDAP 服务端(主)
# 使用 ldapmodify 命令加载配置(需要 LDAP 管理员权限)
ldapmodify -Y EXTERNAL -H ldapi:/// -f tls.ldif

#参数显示修改成功
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "cn=config"
  • -Y EXTERNAL:通过本地 socket 认证(需要 root 权限)。

  • 若成功,输出 modifying entry “cn=config”。

3. 验证服务端 TLS 配置(主)
# 查看 slapd 配置,确认 TLS 相关参数已生效
slapcat -n 0 | grep -i tls

应输出类似内容:

olcTLSCACertificatePath: /etc/openldap/certs
olcTLSCACertificateFile: /etc/openldap/certs/ca.crt
olcTLSCertificateFile: /etc/openldap/certs/server.crt
olcTLSCertificateKeyFile: /etc/openldap/certs/server.key
4.修改配置文件slapd(all)

编辑 /etc/sysconfig/slapd 文件,在 SLAPD_URLS 中添加 ldaps:///

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

#分发所有节点
5.修改配置文件ldap.conf(all)
vim /etc/openldap/ldap.conf

#URI ldap://172.21.35.150:389
URI ldaps://172.21.35.150:636

#使用CA根证书(推荐),注释下面这个配置
#TLS_CACERTDIR /etc/openldap/cacerts/
TLS_CACERT /etc/openldap/certs/ca.crt

#分发所有节点
6. 重启 slapd 服务(all)
systemctl restart slapd
# 确认服务启动成功(无报错)
systemctl status slapd
#查看636端口启动成功
netstat -tulpn | grep 636
四、配置 LDAP 客户端(使用 TLS 连接)

客户端(如 nslcd、sssd 或 ldapsearch 工具)需要信任 CA 根证书,并配置使用 TLS 连接 LDAP 服务器。

1. 复制 CA 根证书到客户端(all)

将服务端生成的 ca.crt 复制到所有客户端节点的 /etc/openldap/certs/ 目录:

# 在客户端执行(从服务端复制)
scp /etc/openldap/certs/ca.crt root@cdh02:/etc/openldap/certs/
chmod 644 /etc/openldap/certs/ca.crt
2.分发CA根证书到cacerts文件夹(all)
  • cacerts文件夹核心作用:存储信任的证书颁发机构(CA)证书
    当 OpenLDAP 客户端或服务端通过 TLS/SSL 连接其他 LDAP 服务器时,会从该目录加载 CA 证书,用于验证对方证书的合法性(确保对方是受信任的实体)。
#管理节点会自主创建ldap用户,这两个文件夹均存在
#服务节点不存在ldap用户,证书文件权限均为644即可,不存在文件夹就新建一个
mkdir /etc/openldap/cacerts/
cp -r /etc/openldap/certs/ca.crt /etc/openldap/cacerts/

  • certs 文件夹核心作用:存储 OpenLDAP 服务端自身使用的证书和密钥文件,以及与证书管理相关的文件。
  • 常见文件及用途:
    • ca.crt:CA 证书(可能是自签名的根证书,用于给服务端证书签名)。
    • ca.key:CA 证书对应的私钥(用于签发其他证书)。
    • server.crt:OpenLDAP 服务端的 TLS 证书(供客户端验证服务端身份)。
    • server.key:服务端证书对应的私钥(用于 TLS 握手时解密客户端信息)。
    • cert8.dbkey3.db 等:NSS 数据库文件(早期 OpenLDAP 可能使用 NSS 库管理证书,现在更多使用 OpenSSL)。
3. 修改配置文件sssd.conf,配置 sssd 客户端(前面配置使用 sssd)

修改 /etc/sssd/sssd.conf,启用 TLS:

vim /etc/sssd/sssd.conf

在 [domain/hadoop.com] 段添加:

ldap_uri = ldaps://cdh01.hadoop.com:636
ldap_id_use_start_tls = False  # 若用 ldaps://,设为 False;若用 StartTLS,设为 True
ldap_tls_cacert = /etc/openldap/certs/ca.crt

重启 sssd:

systemctl restart sssd
4. 配置客户端工具(以 ldapsearch 为例)

临时测试 TLS 连接:

# 使用 ldaps:// 协议(默认端口 636)
ldapsearch -x -H ldaps://cdh01:636 \
  -D "cn=Manager,dc=hadoop,dc=com" \
  -w 123456 \
  -b "dc=hadoop,dc=com" \
  -ZZ  # 强制使用 StartTLS 升级加密(可选,替代 ldaps://)
  • 若成功返回 LDAP 数据,说明 TLS 连接正常。

  • 若失败,检查证书 CN 与服务器主机名是否一致、CA 证书是否正确复制。

5. 配置 nslcd 客户端(若使用 nslcd)(待定)

修改 /etc/nslcd.conf,启用 TLS:

vim /etc/nslcd.conf

添加 / 修改以下配置:

uri ldaps://cdh01.hadoop.com:636  # 或 ldap://cdh01.hadoop.com:389(配合 starttls)
ssl on  # 启用 SSL/TLS
tls_cacertfile /etc/openldap/certs/ca.crt  # 指定 CA 根证书

重启 nslcd:

systemctl restart nslcd
五、验证 TLS 连接是否加密

通过 tcpdump 抓包验证数据是否加密(在客户端执行):

#安装tcpdump
yum install -y tcpdump
# 抓包 LDAP 端口(636 或 389)
tcpdump -i any port 636 -A  # -A 表示以 ASCII 格式显示
  • 若启用 TLS,抓包结果应显示乱码(加密数据),而非明文的用户信息或密码。

  • 若未启用 TLS,会看到明文的 uid=testuser 等信息。

用 openssl 直接测试服务器端 SSL 握手
cdh01 本地执行,所有节点均可执行成功,验证自身 LDAPS 服务的 SSL 配置:

[root@cdh01 cn=config]# openssl s_client -connect cdh01:636 -CAfile /etc/openldap/certs/ca.crt
CONNECTED(00000003)
depth=1 C = CN, ST = Shanghai, L = Shanghai, O = hadoop, OU = bigdata, CN = hadoop.com
verify return:1
depth=0 C = CN, ST = Shanghai, L = Shanghai, O = hadoop, OU = bigdata, CN = cdh01
verify return:1
---
Certificate chain
 0 s:/C=CN/ST=Shanghai/L=Shanghai/O=hadoop/OU=bigdata/CN=cdh01
   i:/C=CN/ST=Shanghai/L=Shanghai/O=hadoop/OU=bigdata/CN=hadoop.com
 1 s:/C=CN/ST=Shanghai/L=Shanghai/O=hadoop/OU=bigdata/CN=hadoop.com
   i:/C=CN/ST=Shanghai/L=Shanghai/O=hadoop/OU=bigdata/CN=hadoop.com
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIDTTCCAjUCCQCCSmb0nSUIxjANBgkqhkiG9w0BAQsFADBrMQswCQYDVQQGEwJD
TjERMA8GA1UECAwIU2hhbmdoYWkxETAPBgNVBAcMCFNoYW5naGFpMQ8wDQYDVQQK
DAZoYWRvb3AxEDAOBgNVBAsMB2JpZ2RhdGExEzARBgNVBAMMCmhhZG9vcC5jb20w
HhcNMjUwODI1MDIyNjMzWhcNMjYwODI1MDIyNjMzWjBmMQswCQYDVQQGEwJDTjER
MA8GA1UECAwIU2hhbmdoYWkxETAPBgNVBAcMCFNoYW5naGFpMQ8wDQYDVQQKDAZo
YWRvb3AxEDAOBgNVBAsMB2JpZ2RhdGExDjAMBgNVBAMMBWNkaDAxMIIBIjANBgkq
hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0wLpzeuinjLbLl6uMQOQQuOs33CAdpCs
ke/Q6OrWp2pssLdZSQDxFOeg3Ah/2zgAgJaifnioNDFv+/ugvbfQP4hN5AZ3Jc/O
bAw4IjHU4udVe3eylr9GAWaVroVlBOCYEbQfGGpcpkHxpeyBqbDwaW5PA6BwbQOi
qUae2300u3hXRCfmQdSFoelxJdDm6LG+Xb/lAAasi48E6N9d3jlzpZt7rn0icaZs
BosqRJ5GnUPohhJj4XcH5dPpXDTt2+EoRZtms6KfOqfsVEa+b1TfcwsUs4rLk3mF
vdQsxIn1lhAa7GgwlG5NNj5vYI6O5msNkLZQA2Pr+0S/SVy+ghMO/wIDAQABMA0G
CSqGSIb3DQEBCwUAA4IBAQBAKQotqmsjIzfJ7sPDkbPdOoo2ZJiCdRcPa/7aE/CA
sJSwDvxcni+Eezuk1hTHuz2sHVtx6iGD6YbzSyLbZ6U2WPrnlk+7XqDfUlUzaa3m
KwcGrxnnTNP/mwcmmSoUeu5KteH3wfVHuXuCDcgxDd5YfJFzmzR9dyanKwNERyDA
HnPFN/hXpmDRYWHSaN2xWXSIuSLkK4lxuu/LCa/Q2Siep21tTIVqTEcmz0k3Z+xL
vYvnRkQtQi95wHGTGS4U2PDHdYcBaU4ncBZvR2RUgQmbo9kSWGyFlANVV7c91zVz
+Mxw4VGSmkvWBXa8BdJefOJTPAB+clzJryaKzJlQly61
-----END CERTIFICATE-----
subject=/C=CN/ST=Shanghai/L=Shanghai/O=hadoop/OU=bigdata/CN=cdh01
issuer=/C=CN/ST=Shanghai/L=Shanghai/O=hadoop/OU=bigdata/CN=hadoop.com
---
No client certificate CA names sent
---
SSL handshake has read 2106 bytes and written 607 bytes
---
New, TLSv1/SSLv3, Cipher is AES256-GCM-SHA384
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : AES256-GCM-SHA384
    Session-ID: C6BE7B660D22D7BBC6A0D203D3D488183DC33400F5A784D7C974FF8D6F34AA9D
    Session-ID-ctx: 
    Master-Key: AAB5015097A42524C8BCEBA675F1AA02BFE75020F45EEBC256D873606839ADAFD1D89870E7F3C52D6744ED9DF05C8A26
    Key-Arg   : None
    Krb5 Principal: None
    PSK identity: None
    PSK identity hint: None
    TLS session ticket lifetime hint: 300 (seconds)
    TLS session ticket:
    0000 - 46 64 d3 7f 26 2c e0 95-1b 6c 2d 3d df dc a8 22   Fd..&,...l-=..."
    0010 - fd 45 a5 ec c5 e5 65 26-df cf 80 76 46 2b d4 38   .E....e&...vF+.8
    0020 - e0 0e 36 f6 ce bc 39 fb-ea 46 b7 70 27 11 5a c4   ..6...9..F.p'.Z.
    0030 - 7e cc 41 06 3e 67 a2 52-da 35 ae 8e b8 9e 08 87   ~.A.>g.R.5......
    0040 - 3c 38 35 dc c9 24 ad 10-1a c3 6d 6f 1a 3b 72 fb   <85..$....mo.;r.
    0050 - bc 62 71 44 7c 95 9c 5f-80 27 6e a0 f0 69 3c 3c   .bqD|.._.'n..i<<
    0060 - d5 b3 f0 32 57 77 ea 7a-92 c9 4d 6a 35 bb 17 47   ...2Ww.z..Mj5..G
    0070 - 60 31 a4 b2 72 a3 96 9a-81 9f 3e e4 4c 87 2f a7   `1..r.....>.L./.
    0080 - 55 91 77 a8 02 41 a0 d5-ce 41 09 ec b1 68 2c 48   U.w..A...A...h,H
    0090 - 6b c0 8b ba e2 bd 6f f7-f3 12 77 9c 37 4b 7c df   k.....o...w.7K|.

    Start Time: 1756105036
    Timeout   : 300 (sec)
    Verify return code: 0 (ok)
---

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值