Openssl OpenLDAP TLS失败,TLS init def ctx失败:-69

Openssl OpenLDAP TLS失败,TLS init def ctx失败:-69,openssl,openldap,Openssl,Openldap,我已经尝试了两天让OpenLDAP与TLS一起工作,我有一个由我自己的中间CA签署的站点证书,该证书由我自己的根CA签署。无论我做了什么尝试,我都在syslog中得到了TLS init def ctx失败:-69,并且slapd没有启动 我已在以下服务器上运行ldapmodify,并收到0的退出代码: dn: cn=config changetype: modify replace: olcTLSCACertificateFile olcTLSCACertificateFile: /etc/ld

我已经尝试了两天让OpenLDAP与TLS一起工作,我有一个由我自己的中间CA签署的站点证书,该证书由我自己的根CA签署。无论我做了什么尝试,我都在syslog中得到了TLS init def ctx失败:-69,并且slapd没有启动

我已在以下服务器上运行ldapmodify,并收到0的退出代码:

dn: cn=config
changetype: modify
replace: olcTLSCACertificateFile
olcTLSCACertificateFile: /etc/ldap/ca-certs/ca-ica.cert.crt
-
replace: olcTLSCertificateFile
olcTLSCertificateFile: /etc/ldap/sasl2/site.cert.crt
-
replace: olcTLSCertificateKeyFile:
olcTLSCertificateKeyFile: /etc/ldap/sasl2/site.key.crt
我已将这些文件的所有者设置为openldap。我在site.key.crt上找到了chmod 640。 ca-ica.cert.crt是由cat intermediate.crt ca.cert>ca-ica.cert.crt创建的

我知道证书链会进行验证,因为我运行了
openssl-verify-CAfile ca-ica.cert.crt site.cert.crt
,它工作正常

我甚至尝试在c_rehash目录上使用
olcTLSCertificatePath
。什么都不管用

如果我只是尝试一个简单的自签名证书,一切正常,我可以连接StartTLS

我在OpenLDAP方面的知识约为20%,在证书管理方面的知识约为30%。但是我很困惑

任何想法都将不胜感激

已更新 我带着-d的痕迹跑了。这是系统日志输出。
谢谢你的帮助<代码>/usr/sbin/slapd--version返回ls(GNU coreutils)8.21。证书为2014年1月6日openssl 1.01f版生成的PEM格式。赞成。这是旧的。 带有-d跟踪的系统日志内容

May 18 15:45:22 JohnLaptop kernel: [1017829.972053] type=1400 audit(1589834722.159:158): apparmor="DENIED" operation="open" profile="/usr/sbin/slapd" name="/home/john/openldap-certs/ca.crt" pid=21376 comm="slapd" requested_mask="r" denied_mask="r" fsuid=119 ouid=119

我一直在胡闹,现在得到的是-1而不是-69。

根据路径和错误代码,我假设使用的TLS库是GnuTLS

从中,错误-69是
GNUTLS\u E\u ASN1\u DER\u error

通过搜索Google,如果证书被认为是无效的,则可能会发出此消息,并且GnuTLS在某些方面可能比OpenSSL更严格。最近的一个例子是:

如果您尝试使用GnuTLS的certtool(
apt install GnuTLS bin
)验证链,您可能会得到更有用的反馈

从您的更新:

May 18 15:45:22 JohnLaptop kernel: [1017829.972053] type=1400 audit(1589834722.159:158): apparmor="DENIED" operation="open" profile="/usr/sbin/slapd" name="/home/john/openldap-certs/ca.crt" pid=21376 comm="slapd" requested_mask="r" denied_mask="r" fsuid=119 ouid=119
那是一个明显的否认

位于
/etc/apparmor.d/usr.sbin.slapd
的配置文件包含slapd可以访问的文件和文件夹
/home/john/openldap certs/ca.crt
不在其中;如果要使用该位置,必须禁用配置文件(o ju),或将路径添加到该位置

如果您只是想暂时关闭AppArmor进行调试,可以将其设置为投诉模式:

sudo aa-complain /usr/sbin/slapd
完成并希望再次启用时:

sudo aa-enforce /usr/sbin/slapd

Ubuntu wiki上关于AppArmor的更多信息:

请尝试在调试模式下运行slapd以获取更多信息,例如:
slapd-u openldap-g openldap-d trace
。我假设这是Debian/Ubuntu/派生发行版上发行版提供的openldap包?具体版本是什么?错误-69是GNUTLS\u E\u ASN1\u DER\u错误;我猜您的cert证书采用DER格式?如果是,您是否尝试过转换为PEM?谢谢您的帮助。
/usr/sbin/slapd--version
返回ls(GNU coreutils)8.21.证书是2014年1月6日用openssl版本1.01f生成的PEM格式。是的。它很旧。调试输出直接打印到stderr,而不是到syslog。我不确定如何
ls(GNU coreutils)
将其输入到版本输出中,但是如果您安装了apt get,请尝试
dpkg query-W slapd
,或者
/usr/sbin/slapd-VV
其他。openldap在非常旧的ubuntu版本上运行。我升级到LTS 20并重新安装openldap,使所有内容都更新。我现在已经安全地工作了。我非常高兴确定旧的gnuTLS冲突是一个问题。我在这里找到了一个很好的TLS和openldap运行程序:我也尝试使用certtool生成证书。获取
main:TLS init def ctx失败:-1
我只建议通过certtool运行您现有的证书,以尝试找出gnuTLS不喜欢它的原因。我不是说您需要这样做生成一个全新的!OpenLDAP使用OpenSSL。在您的系统上,可能是这样。发行版在Debian和Ubuntu上提供的OpenLDAP包使用GnuTLS。基于
/etc/ldap
和AppArmor的存在,我猜是Ubuntu。