使用 GnuTLS 配置 OpenLDAP,其中 TLS=required

使用 GnuTLS 配置 OpenLDAP,其中 TLS=required

我们有一个 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,否则大约的顺序就足够了securitysecurity tls=1


您对 的操作TLSCipherSuite将不起作用,因为一旦使用 TLS,这些操作仅控制可接受的密码,选择是否使用/需要 TLS 并不重要。为此,您需要使用security。但是,您应该使用更好的 TLS 选项,例如至少TLSCipherSuite HIGH:!aNull:!MD5:@STRENGTHolcTLSProtocolMin 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_SUITETLSCipherSuite,我怀疑您可能想检查哪些密码名称可以工作(从管理指南):

除了单独的密码名称之外,说明符 HIGH、MEDIUM、LOW、EXPORT 和 EXPORT40 以及 TLSv1、SSLv3 和 SSLv2 可能也有帮助。

要获取 GnuTLS 中的密码列表,请使用:

   `gnutls-cli -l`

相关内容