我们有一个 openldap 服务器,并且不想允许未加密的通信,因此可以接受的是通过端口 389 ( starttls
) 的 tls 或通过 636 ( ldaps
) 的 ssl。
由于我们使用 slapd.conf 进行配置,olcSecurity
所以不是一个选项。
TLSCipherSuite
似乎是使用 slapd.conf 来实现这一点的方法。但是当使用 slapd 时,它要么不启动,要么会忽略设置(即接受未加密的请求)。
使用下列命令时,slapd 无法启动(错误:TLS init def ctx 失败:-1):
- TLSCipherSuite ALL
- TLSCipherSuite Default
- TLSCipherSuite ALL:!NULL
- TLSCipherSuite ALL:!aNULL
- TLSCipherSuite AES256-SHA #one of the ciphers offered by openssl
slapd 启动但在使用时接受未加密的请求:
- TLSCipherSuite NORMAL
- TLSCipherSuite NORMAL:!NULL #would be acceptable
- TLSCipherSuite !NULL #would be acceptable
我们测试
ldapsearch -L -x -W -h [SERVER] -D [USER] - b [SEARCHBASE] uid=[USER]
(未加密)
和
ldapsearch -L -x -W -ZZ -h [SERVER] -D [USER] - b [SEARCHBASE] uid=[USER]
(加密)
openldap 运行的操作系统是 debian 8.7。openldap 版本似乎使用的是 gnutls,而不是 openssl,所以这可能是问题的原因。
但最后三种TLSCipherSuite
变体似乎是有效的语法,至少 slapd 启动时没有错误。为什么不!NULL
阻止 slapd 接受未加密的请求?最后两种(使用任何可用的密码但不允许无密码)是可以接受的。
是否需要额外的设置/参数?
请注意,我们尝试了给出的建议这里(如上所述)但是那不起作用。
答案1
停止使用slapd.conf
,但这只是一般建议。 大多数(如果不是全部)olc*
中的指令slapd-config
都可以作为非 olc 指令用于slapd.conf
样式配置。
除非您还执行非 TLS SASL,否则大约的顺序就足够了security
。security tls=1
您对 的操作TLSCipherSuite
将不起作用,因为一旦使用 TLS,这些操作仅控制可接受的密码,选择是否使用/需要 TLS 并不重要。为此,您需要使用security
。但是,您应该使用更好的 TLS 选项,例如至少TLSCipherSuite HIGH:!aNull:!MD5:@STRENGTH
和olcTLSProtocolMin 3.1
。
从slapd.conf(5)
:
security <factors>
指定一组安全强度因素(以空格分隔),以要求(见sasl-secprops's minssf
选项用于描述安全强度因素)。该指令可以全局指定和/或针对每个数据库指定。ssf=<n>
指定总体安全强度因子。transport=<n>
指定传输安全强度因子。tls=<n>
指定 TLS 安全强度因子。sasl=<n>
指定 SASL 安全强度因子。update_ssf=<n>
指定目录更新所需的整体安全强度因子。update_transport=<n>
指定目录更新所需的传输安全强度因子。update_tls=<n>
指定目录更新所需的 TLS 安全强度因子。update_sasl=<n>
指定目录更新所需的 SASL 安全强度因子。simple_bind=<n>
指定简单用户名/密码身份验证所需的安全强度因子。请注意,传输因子是底层传输提供的安全性度量,例如 ldapi://(以及最终的 IPSEC)。它通常不被使用。
答案2
如果必须继续使用 slapd.conf,那么此主题有你需要的答案:
来自 man slapd.conf
TLS验证客户端
<level>
demand | hard | true
出于兼容性原因,这些关键字都是等效的。请求客户端证书。如果没有提供证书,或者提供的证书不正确,则会话将立即终止。
在密码选择方面,Zytrax 为火箭科学家提供的 LDAP提供了一些提示:
# Cipher-list contains only RSA based
# authentication and key-exchange suites
# supported by TLSv1 (and SSLv3)
TLS_CIPHER_SUITE TLSv1+RSA
# Cipher-list contains only RSA based
# authentication and key-exchange suites
# supported by TLSv1 (and SSLv3)
# excludes EXPORT and NULL suites
TLS_CIPHER_SUITE TLSv1+RSA:!EXPORT:!NULL
# Ordered list of RSA based
# authentication and key-exchange suites
TLS_CIPHER_SUITE DES-CBC-SHA:DES-CBC3-SHA:RC4-SHA:RC4-MD5
# All ciphers excluding NULL
TLS_CIPHER_SUITE ALL:!NULL
# Default equivalent value if not defined
TLS_CIPHER_SUITE ALL
您需要更改TLS_CIPHER_SUITE
为TLSCipherSuite
,我怀疑您可能想检查哪些密码名称可以工作(从管理指南):
除了单独的密码名称之外,说明符 HIGH、MEDIUM、LOW、EXPORT 和 EXPORT40 以及 TLSv1、SSLv3 和 SSLv2 可能也有帮助。
要获取 GnuTLS 中的密码列表,请使用:
`gnutls-cli -l`