使用TLS配置OpenLDAP =必需


16

如今,OpenLDAP的需要与的ldapmodify CN =配置来配置,如描述在这里。但无处可寻,您如何配置它以接受TLS流量。我刚刚确认我们的服务器接受未加密的流量(使用ldapsearch和tcpdump)。

通常,我只用IP表关闭非SSL端口,但是显然不赞成使用SSL端口,因此我没有那个选择。

因此,使用SSL配置命令,如下所示:

dn: cn=config
changetype:modify
replace: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/ssl/bla.key
-
replace: olcTLSCertificateFile
olcTLSCertificateFile: /etc/ssl/bla.crt
-
replace: olcTLSCACertificateFile
olcTLSCACertificateFile: /etc/ssl/ca.pem

是否有强制使用TLS的参数?

编辑:我尝试了olcTLSCipherSuite,但是它不起作用。调试输出:

TLS: could not set cipher list TLSv1+RSA:!NULL.
main: TLS init def ctx failed: -1
slapd destroy: freeing system resources.
slapd stopped.
connections_destroy: nothing to destroy.

Edit2(几乎固定):我可以通过加载来修复它:

# cat force-ssl.tx 
dn: cn=config
changetype:  modify
add: olcSecurity
olcSecurity: tls=1

但是然后像

ldapmodify -v -Y EXTERNAL -H ldapi:/// -f /etc/ssl/tls-required.ldif

不再工作...并将其更改为:

ldapmodify -v -x -D "cn=admin,dc=domain,dc=com" -H ldap://ldap.bla.tld/ -ZZ -W -f force-ssl.txt

给我“ ldap_bind:无效的凭据(49)”。显然,即使将此binddn指定为rootdn,我也不能使用它来更改cn=config。可以改变吗?

Answers:


16

我似乎已经明白了:

我是这样做的:

dn: olcDatabase={1}hdb,cn=config
changetype:  modify
add: olcSecurity
olcSecurity: tls=1

这似乎具有预期的效果。我仍然可以运行以下命令:

ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b cn=config

但是尝试在ldapsearch -xLLL -b ...不使用SSL的情况下与“ ” 进行绑定会说:“需要TLS机密性”


2
+1看起来很棒。不幸的是,如果客户端尝试在没有STARTTLS的情况下进行身份验证,它将以纯文本格式发送密码,然后服务器以TLS confidentiality required消息响应。
卡洛斯·坎德罗斯(CarlosCampderrós),

1
我将其发布在OpenLDAP邮件列表上是一个可能的安全问题。我举了FTP的例子,一旦您给USER,它便立即阻塞。但是,我被否决了。看到这个。
Halfgaar 2013年

有趣的是,我在找到该答案之前
先看

谢谢,正是我想要的。以明文形式在线传输的密码将是客户端软件上特定于实现的密码。可以先尝试使用匿名绑定测试TLS要求,然后再尝试以用户身份进行绑定。
服务器故障

3

这可以通过TLSCipherSuite选项实现。OpenLDAP Zytrax书籍的LDAP安全性章节中记录了一个示例。使用它,您可以告诉OpenLDAP服务器将接受的密码套件。例如,您可以说您不想要NULL密码套件(即:非加密会话)。

请注意,尽管OpenLDAP可以链接到OpenSSL或GnuTLS库。那些使用不同的密码列表来描述其加密支持。OpenSSL密码列表可以通过类似的命令获得,openssl ciphers -v而GnuTLS列表可以通过gnutls-cli -l

禁用不加密而不连接最简单方法是:

dn: cn=config
changetype: modify
replace: olcTLSCipherSuite
olcTLSCipherSuite: ALL:!NULL

使用GnuTLS语法的更具体的限制:

dn: cn=config
changetype: modify
replace: olcTLSCipherSuite
olcTLSCipherSuite: TLS_RSA_CAMELLIA_128_CBC_SHA1:TLS_RSA_CAMELLIA_256_CBC_SHA1:!NULL

一个更完整的示例可能是(使用OpenSSL语法):

dn: cn=config
changetype: modify
replace: olcTLSCipherSuite
olcTLSCipherSuite: HIGH:+SSLv3:+TLSv1:MEDIUM:+SSLv2:@STRENGTH:+SHA:+MD5:!NULL

有一个关于OpenLDAP邮件列表的讨论,值得阅读有关类似问题的信息

还值得注意的是,ldapsearch当连接到服务器以禁止未加密的连接时,OpenLDAP cli工具(如)会自动切换为使用TLS。这意味着,你就不会需要添加-Z到的args列表。


我尝试过这个。没用 我编辑了问题以反映它。
Halfgaar 2012年

我认为您报告的错误与TLS实现知道的密码有关。可以使用OpenSSL或gnuTLS库编译OpenLDAP。我给的示例使用了OpenSSL语法,您的实现可能使用了gnuTLS。我建议您尝试使用简化的CipherSuite,例如ALL:!NULL
Tonin

“警告:不要聪明,将TLSCipherSuite更改为类似HIGH:MEDIUM:-SSLv2的聪明–这是一个openssl指令”-阅读rogermoffatt.com/2011/08/24/ubuntu-openldap-with-ssltls
Xdg
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.