我正在为新的 OpenLDAP 服务器设置 TLS。系统是 Debian Jessie(已更新至最新的 8.7 稳定版),我已通过安装软件包设置了服务器slapd
,到目前为止几乎没有任何修改。
我正在尝试配置的其中一项是 TLS 密码套件。以下是 LDIF:
dn: cn=config
changetype: modify
add: olcTLSCipherSuite
olcTLSCipherSuite: HIGH
当我尝试使用以下命令提交此更改时:
ldapmodify -Y EXTERNAL -H ldapi:/// -f set-cipher-suite.ldif
我收到此错误:
ldap_modify: Server is unwilling to perform (53)
我还尝试使用以下 LDIF 设置证书文件:
dn: cn=config
changetype: modify
add: olcTLSCertificateFile
olcTLSCertificateFile: /etc/ssl/certs/foo.crt
这里我收到错误 80,而不是错误 53。
ldap_modify: Other (e.g., implementation specific) error (80)
我仔细检查了该文件是否存在以及是否slapd
有人有权访问该文件。
我改为olcLogLevel
(any
从而证明我有能力修改配置)并检查了调试输出,但我看到的内容对我这个外行人来说没有任何信息价值。以下是发生错误 53 的代码片段:
[...] 6月8日 16:46:21 pelargir slapd[36937]: slap_queue_csn: 排队 0x7f3648f4a430 20160608144621.742848Z#000000#000#000000 6月8日 16:46:21 pelargir slapd[36937]: oc_check_required 条目 (cn=config),objectClass“olcGlobal” 6月8日 16:46:21 pelargir slapd[36937]: oc_check_allowed 类型“objectClass” 6月8日 16:46:21 pelargir slapd[36937]: oc_check_allowed 类型“cn” 6月8日 16:46:21 pelargir slapd[36937]: oc_check_allowed 类型“olcArgsFile” 6月8日 16:46:21 pelargir slapd[36937]: oc_check_allowed 类型“olcLogLevel” 6月8日 16:46:21 pelargir slapd[36937]: oc_check_allowed 类型“olcPasswordHash” 6月8日 16:46:21 pelargir slapd[36937]: oc_check_allowed 类型“olcPidFile” 6月8日 16:46:21 pelargir slapd[36937]: oc_check_allowed 类型“olcToolThreads” 6月8日 16:46:21 pelargir slapd[36937]: oc_check_allowed 类型“structuralObjectClass” 6月8日 16:46:21 pelargir slapd[36937]: oc_check_allowed 类型“entryUUID” 6月8日 16:46:21 pelargir slapd[36937]: oc_check_allowed 类型“creatorsName” 6月8日 16:46:21 pelargir slapd[36937]: oc_check_allowed 类型“createTimestamp” 6月8日 16:46:21 pelargir slapd[36937]: oc_check_allowed 类型“olcTLSCipherSuite” 6月8日 16:46:21 pelargir slapd[36937]: oc_check_allowed 类型“entryCSN” 6月8日 16:46:21 pelargir slapd[36937]: oc_check_allowed 类型“modifiersName” 6月8日 16:46:21 pelargir slapd[36937]: oc_check_allowed 类型“modifyTimestamp” 6月8日 16:46:21 pelargir slapd[36937]: send_ldap_result: conn=1002 op=1 p=3 6月8日 16:46:21 pelargir slapd[36937]: send_ldap_result: err=53 匹配=“” text=“” 6月8日 16:46:21 pelargir slapd[36937]: send_ldap_response: msgid=2 tag=103 err=53 6月8日 16:46:21 pelargir slapd[36937]: conn=1002 op=1 RESULT tag=103 err=53 text= [...]
有人能提示我这里可能做错了什么吗?令我感到非常困惑的是,我可以成功修改简单选项(例如olcLogLevel
或olcPasswordHash
),但当我尝试对类似简单的 TLS 选项(例如 )执行相同操作时却失败了olcTLSCipherSuite
。
答案1
我遇到了同样的问题,debian 中的 openldap 是针对 gnu-tls 包进行编译的,但默认情况下并未安装。
这可能会有帮助:
apt install gnutls-bin
还要确保 openldap 用户具有足够的权限来读取证书。例如:
useradd letsencrypt
chown openldap:letsencrypt /etc/letsencrypt/ -R
usermod -a -G letsencrypt openldap
答案2
问题
olcTLSCipherSuite: HIGH
是 GnuTLS 不认识“HIGH”密码套件,因为这是仅由 OpenSSL 支持的方便名称。如果您想查看 GnuTLS 支持的可用密码名称,请运行命令gnutls-cli -l
。安装gnutls-bin
Debian 软件包以访问该gnutls-cli
实用程序。
问题
olcTLSCertificateFile: /etc/ssl/certs/foo.crt
三年多后我还是无法重现这个问题。正如 Alexander Kjäll 在他的回答中指出的那样,这毕竟可能是权限问题。