OpenLDAP 配置 StartTLS 时出错:ldap_modify:其他(例如,特定于实现)错误(80)

OpenLDAP 配置 StartTLS 时出错:ldap_modify:其他(例如,特定于实现)错误(80)

为 OpenLDAP 配置 StartTLS。

  • Ubuntu 服务器 16.04
  • Slapd 2.4.42+dfsg-2ubuntu3.2

我有自己的内部证书颁发机构来提供证书。

我已经在 /etc/ssl/certs 中设置了证书和密钥:

-rw-r----- 1 root ssl-cert   3268 Jul 14 23:02 ldaptest.roenix.net.cert.pem

lrwxrwxrwx 1 root root         51 Jul  2 13:22 roenix.ca.cert.pem -> /usr/local/share/ca-certificates/roenix.ca.cert.crt

在/etc/ssl/private中:

-rw-r----- 1 root ssl-cert 3243 Jul 14 23:01 ldaptest.roenix.net.key.pem

我已正确设置主机名:

@ldaptest:/etc/ssl/certs$ hostname -f
ldaptest.roenix.net

我尝试使用此 LDIF 将配置添加到 slapd:

dn: cn=config
changetype: modify
add: olcTLSCACertificateFile
olcTLSCACertificateFile: /etc/ssl/certs/roenix.ca.cert.pem
-
add: olcTLSCertificateFile
olcTLSCertificateFile: /etc/ssl/certs/ldaptest.roenix.net.cert.pem
-
add: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/ssl/private/ldaptest.roenix.net.key.pem

使用以下命令:

sudo ldapmodify -Y EXTERNAL -H ldapi:/// -f certinfo.ldif

我收到此错误:

SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "cn=config"
ldap_modify: Other (e.g., implementation specific) error (80)

非常感谢您的帮助!

答案1

我通过改变 file.ldif 中的顺序解决了这个问题,如下所示:

dn: cn=config
changetype: modify
replace: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/openldap/certs/your_key

dn: cn=config 
changetype: modify
replace: olcTLSCertificateFile 
olcTLSCertificateFile: /etc/openldap/certs/your_certificate

然后我运行了命令

ldapmodify -Y EXTERNAL -H ldapi:/// -f your_file.ldif 

确保存在一个 acl,使得 root 有资格通过使用 SASL 绑定进行身份验证来进行更改。

要确保更改已完成,请运行此命令

ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config | grep olcTLS

答案2

我遇到了同样的问题。证书存储在 中/opt/local/cert

您必须将此目录添加到已解析文件列表中/etc/apparmor.d/local/usr.sbin.slapd

/opt/local/cert/ r,
/opt/local/cert/* r,

答案3

此错误也可能是权限错误。例如,如果执行此命令

vim newcerts.ldif

dn: cn=config
changetype: modify
replace: olcTLSCACertificateFile
olcTLSCACertificateFile: /etc/ssl/certs/myca.crt
-
replace: olcTLSCertificateFile
olcTLSCertificateFile: /etc/ssl/certs/ldap1.mydom.crt
-
replace: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/ssl/private/ldap1.mydom.key
-
replace: olcTLSRandFile
olcTLSRandFile: /dev/urandom

然后

ldapmodify -Y EXTERNAL -H ldapi:/// -f newcerts.ldif

SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "cn=config"
ldap_modify: Other (e.g., implementation specific) error (80)

但使用 setfacl 授予 openldap 用户读取密钥文件的权限后(证书通常对所有人都是可读的)

setfacl -m u:openldap:r-x /etc/ssl/private
setfacl -m u:openldap:r-x /etc/ssl/private/ldap1.mydom.key

全部作品

ldapmodify -Y EXTERNAL -H ldapi:/// -f newcerts.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "cn=config"

答案4

托马斯的评论让我走上了正确的道路。

问题原因:我没有意识到 /etc/ssl/certs/roenix.ca.cert.crt 实际上是 /usr/local/share/ca-certificates/roenix.ca.cert.crt 的符号链接。

解决方案:在 /usr/local/share/ca-certificates 中的实际证书文件上设置正确的权限。

还阅读了其他评论,学到了很多东西!谢谢大家。

相关内容