我有 OpenLDAP Master-Slave 架构。有一天,我重启了 LDAP Slave 中的 slapd 服务,然后在日志中发现了 TLS 协商问题。在重新启动服务之前,它运行正常,没有任何问题
然后我尝试调试该问题,我发现一些常见问题会触发 TLS 协商问题。
- SSL 证书可能已过期- 就我而言,情况并非如此,我已经验证了证书是有效的
- 证书 CN 名称与服务器名称不匹配- 就我而言,我的证书 CN=*.example.com,我的服务器名称是 ldap.example.com 和 ldap-slave.example.com。
- 证书文件中的权限问题- 我有 2 个目录(certs - [包含证书、ca 证书和密钥]、cacert - [仅包含 cacert]),这两个目录都具有读写权限,并归 LDAP 用户所有。
这是 slapd 使用的配置。
dn: cn=config
objectClass: olcGlobal
cn: config
olcArgsFile: /var/run/openldap/slapd.args
olcDisallows: bind_anon
olcLogLevel:: YW55IA==
olcPidFile: /var/run/openldap/slapd.pid
olcRequires: authc
olcTLSCACertificateFile: /etc/openldap/certs/example.ca.crt
olcTLSCACertificatePath: /etc/openldap/certs
olcTLSCertificateFile: /etc/openldap/certs/example.crt
olcTLSCertificateKeyFile: /etc/openldap/certs/example.key
dn: cn=module{0},cn=config
objectClass: olcModuleList
cn: module{0}
olcModulePath: /usr/lib64/openldap
olcModuleLoad: {0}syncprov.la
dn: cn=module{1},cn=config
objectClass: olcModuleList
cn: module{1}
olcModulePath: /usr/lib64/openldap
olcModuleLoad: {0}auditlog.la
这是我的 ldap.conf 文件
#
# LDAP Defaults
#
# See ldap.conf(5) for details
# This file should be world readable but not world writable.
#BASE dc=example,dc=com
#URI ldap://ldap.example.com ldap://ldap-master.example.com:666
#SIZELIMIT 12
#TIMELIMIT 15
#DEREF never
#TLS_CACERT /etc/openldap/cacerts/example.ca.crt
#TLS_REQCERT demand
TLS_CACERTDIR /etc/openldap/cacerts
#TLS_CACERT /etc/openldap/certs/example.ca.crt
TLS_REQCERT allow
# Turning this off breaks GSSAPI used with krb5 when rdns = false
SASL_NOCANON on
URI ldaps://ldap.example.com/ ldaps://ldap-slave.example.com/
BASE dc=example,dc=com
所以请帮我调试这个问题。
答案1
我们可以获得包含错误的日志来帮助您吗?
另外,您不需要同时使用 olcCACertificatePath 和 olcCACertificateFile,对我来说,仅使用 olcCACertficatePath 的配置就足够了。我不知道这是否是您的错误根源,但您可以尝试删除其中一个。