使用允许使用openLDAPencryption证书

我已经运行了几个月的openLDAP服务器,我们使用它来validation许多应用程序。 以前的工作人员build立服务器,它似乎不是一个标准的安装,但它非常简单。

最近,我们的一个CA证书过期了,我们决定用Let's Encrypt取代它。 我的经理取代了服务器上的证书。

它适用于Web应用程序(LDAPpipe理器,自助服务密码更改),但是没有客户端可以对其进行身份validation。 例如,如果我尝试testingRedmine LDAPconfiguration,则会收到一条消息:“无法连接(SSL_connect SYSCALL返回= 5 errno = 0 state = SSLv2 / v3读取服务器hello A)”

testingNexus身份validation,它只是不连接。

令人沮丧的是,LDAP服务器上的日志或者应用程序的日志中都没有指出为什么会失败。 我的调查使我相信,这是证书/密钥configuration的一些事情,但我已经尝试了所有我能想到的,以及我可以在网上find的一切,没有任何工作。

环境细节是:

Debian 8 openLDAP openldap-2.4.40

我的configuration如下:

/etc/ldap/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 certificates (needed for GnuTLS) TLS_CACERT /etc/letsencrypt/live/myserver.com/fullchain.pem 

/etc/ldap/slapd.d/cn=config.ldif

 dn: cn=config objectClass: olcGlobal cn: config olcArgsFile: /var/run/slapd/slapd.args olcLogLevel: none olcPidFile: /var/run/slapd/slapd.pid olcToolThreads: 1 structuralObjectClass: olcGlobal entryUUID: c6dd9e40-9dc2-1035-8c03-add74f928a5e creatorsName: cn=config createTimestamp: 20160423171552Z entryCSN: 20160423171552.629347Z#000000#000#000000 modifiersName: cn=config modifyTimestamp: 20160423171552Z 

如果我testing连接:

 admin@ldap:~$ sudo openssl s_client -connect localhost:636 -showcerts -state -CAfile /etc/letsencrypt/live/myserver.com/fullchain.pem CONNECTED(00000003) SSL_connect:before/connect initialization SSL_connect:SSLv2/v3 write client hello A 140394818631312:error:140790E5:SSL routines:SSL23_WRITE:ssl handshake failure:s23_lib.c:184: --- no peer certificate available --- No client certificate CA names sent --- SSL handshake has read 0 bytes and written 289 bytes --- New, (NONE), Cipher is (NONE) Secure Renegotiation IS NOT supported Compression: NONE Expansion: NONE 

有没有人有任何想法我失踪?

编辑

根据@ 84104的build议,我编辑了tls.ldif文件,内容如下:

 dn: cn=config changetype: modify replace: olcTLSCACertificateFile olcTLSCACertificateFile: /etc/letsencrypt/live/myserver/fullchain.pem - replace: olcTLSCertificateFile olcTLSCertificateFile: /etc/letsencrypt/live/myserver/cert.pem - replace: olcTLSCertificateKeyFile olcTLSCertificateKeyFile: /etc/letsencrypt/live/myserver/privkey.pem 

然后运行命令:

 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" ldap_modify: Other (eg, implementation specific) error (80) 

我发现这可能是由于对证书或密钥文件的权限,但我改变了这些与以前使用的文件的完全匹配,并仍然得到这个消息的build议。

我再一次对这个话题缺乏一般性的知识表示歉意,但任何人都可以提出其他build议吗?

编辑

根据这个build议,我改变了tls.ldif并把所有的命令从replace更改为delete,然后再次运行ldapmodify命令。 还有一个错误。

  admin@ldap:/etc/ansible_ldif_work$ sudo ldapmodify -Y EXTERNAL -H ldapi:/// -f tls.remove.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: Inappropriate matching (18) additional info: modify/delete: olcTLSCACertificateFile: no equality matching rule 

fullchain.pem文件不是cert.pem文件之上的证书链的串联,而是chain.pem和cert.pem文件的串联。

chain.pem文件和根权限文件必须连接到您要呈现给slapd的文件中作为olcTLSCACertificateFile

privkey.pem文件必须作为olcTLSCertificateKeyFile呈现给slapd。

简单的cert.pem文件必须作为olcTLSCertificateFile呈现给slapd。

我不确定连接的顺序是否重要,但这是我使用的顺序:cat chain.pem root.pem> ca.merged.crt

您使用的openssltesting显示,如此设置时,一切正常。

根权限文件可以在这里find: https : //www.identrust.com/certificates/trustid/root-download-x3.html

testing:

 [root @█████ssl]#openssl s_client -connect [删除]:636 -showcerts -state -CAfile ca.merged.crt
连(00000003)
 SSL_connect:在/连接初始化之前
 SSL_connect:SSLv2 / v3写入客户端hello A.
 SSL_connect:SSLv3读取服务器hello A.
深度= 2 O = Digital Signature Trust Co.,CN = DST根CA X3
validation退货:1
深度= 1 C = US,O =我们encryption,CN =我们encryption权限X3
validation退货:1
深度= 0 CN = [编辑]
validation退货:1
 SSL_connect:SSLv3读取服务器证书
 SSL_connect:SSLv3读取服务器密钥交换A
 SSL_connect:完成SSLv3读取服务器A
 SSL_connect:SSLv3写客户端密钥交换
 SSL_connect:SSLv3写入更改密码规格A
 SSL_connect:SSLv3写入完成
 SSL_connect:SSLv3刷新数据
 SSL_connect:SSLv3读完A
 ---
证书链
  0 s:/ CN = [编辑]
   我:/ C = US / O =我们encryption/ CN =我们encryption权限X3
 ----- BEGIN CERTIFICATE -----
 [删除]
 -----结束证书-----
  1 s:/ C = US / O =我们encryption/ CN =我们encryption权限X3
   我:/ O =数字签名信任有限公司/ CN = DST根CA X3
 ----- BEGIN CERTIFICATE -----
 [删除]
 -----结束证书-----
  2 s:/ O =数字签名信任有限公司/CN=DST根CA X3
   我:/ O =数字签名信任有限公司/ CN = DST根CA X3
 ----- BEGIN CERTIFICATE -----
 [删除]
 -----结束证书-----
 ---
服务器证书
受试者= / CN = [删除]
 issuer = / C = US / O =我们encryption/ CN =我们encryption权限X3
 ---
未发送客户端证书CA名称
服务器临时密钥:ECDH,secp384r1,384位
 ---
 SSL握手已经读取了4417个字节并写入了405个字节
 ---
新的TLSv1 / SSLv3,密码是ECDHE-RSA-AES256-GCM-SHA384
服务器公钥是4096位
支持安全重协商
压缩:无
扩展:无
 SSL会话:
    协议:TLSv1.2
    密码:ECDHE-RSA-AES256-GCM-SHA384
    会话ID:[编辑]
    会话ID-CTX:
    主密钥:[编纂]
     Key-Arg:无
     Krb5负责人:无
     PSK身份:无
     PSK身份提示:无
    开始时间:1487882605
    超时:300(秒)
    validation返回码:0(ok)
 ---

您的OpenLDAP服务器似乎没有configurationTLS。

你的/etc/ldap/slapd.d/cn=config.ldif应该有如下内容:

 olcTLSCertificateKeyFile: /etc/ldap/ssl/ldap.key olcTLSCACertificateFile: /etc/ldap/ssl/ldap_ca.cert olcTLSCertificateFile: /etc/ldap/ssl/ldap.cert olcTLSCipherSuite: HIGH:!aNull:!MD5:@STRENGTH olcTLSProtocolMin: 3.1 

你应该通过ldapmodify添加。

你有任何额外的安全措施启用(如apparmor)限制读取访问您的证书? 我得到了同样的错误消息ldap_modify: Other (eg, implementation specific) error (80)因为apparmor不允许openldap访问我们的encryption证书:

以下步骤解决了我的问题:

  • 将行添加到/etc/apparmor.d/local/usr.sbin.slapd /etc/letsencrypt/** r,

  • service apparmor restart

有一个关于这个话题的美丽的博客文章。 它适用于我https://www.dahlem.uk/display/deb/Configure+and+enable+TLS+for+OpenLDAP

我的系统是这样的:

 # lsb_release -a No LSB modules are available. Distributor ID: Debian Description: Debian GNU/Linux 8.8 (jessie) Release: 8.8 Codename: jessie # slapd -V @(#) $OpenLDAP: slapd (Jul 16 2017 19:57:41) $ Debian OpenLDAP Maintainers <[email protected]> 

这里快速通过。 处理文件系统访问letsencrypt …

 useradd letsencrypt chown openldap:letsencrypt /etc/letsencrypt/ -R usermod -a -G letsencrypt openldap 

激活服务…

 # /etc/default/slapd SLAPD_SERVICES="ldap:/// ldapi:/// ldaps:///" 

并告诉openldap你的证书…

 # /root/add_ssl.ldif dn: cn=config changetype: modify add: olcTLSCipherSuite olcTLSCipherSuite: NORMAL - add: olcTLSCRLCheck olcTLSCRLCheck: none - add: olcTLSVerifyClient olcTLSVerifyClient: never - add: olcTLSCACertificateFile olcTLSCACertificateFile: /etc/letsencrypt/live/YOURDOMAIN/fullchain.pem - add: olcTLSCertificateFile olcTLSCertificateFile: /etc/letsencrypt/live/YOURDOMAIN/cert.pem - add: olcTLSCertificateKeyFile olcTLSCertificateKeyFile: /etc/letsencrypt/live/YOURDOMAIN/privkey.pem - add: olcTLSProtocolMin olcTLSProtocolMin: 3.3 

阅读ldif文件…

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

最后重启并检查slapd。

 systemctl restart slapd.service systemctl status slapd.service