我们有一个openldap服务器,不想允许未encryption的通信,所以可以接受的是通过端口389( starttls )或ssl超过636( ldaps )。
当我们使用slapd.conf进行configuration时, olcSecurity不是一个选项。
TLSCipherSuite似乎是用slapd.conf来完成的。 但是,当使用该slapd要么不启动或忽略设置(即接受未encryption的请求)。
在使用时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启动,但在使用时接受未encryption的请求:
- TLSCipherSuite NORMAL - TLSCipherSuite NORMAL:!NULL #would be acceptable - TLSCipherSuite !NULL #would be acceptable
我们testing
ldapsearch -L -x -W -h [SERVER] -D [USER] - b [SEARCHBASE] uid=[USER]
(未encryption)
和
ldapsearch -L -x -W -ZZ -h [SERVER] -D [USER] - b [SEARCHBASE] uid=[USER]
(encryption的)
运行在os上的openldap是debian 8.7。 openldap版本似乎使用gnutls,而不是openssl,所以这可能是问题的原因。
但最后三个TLSCipherSuite变体似乎是有效的语法,至lessslapd启动没有错误。 为什么不能!NULL防止slapd接受未encryption的请求? 最后两个(使用任何密码,但不允许不encryption)是可以接受的。
是否需要其他设置/参数?
请注意,我们尝试了这里给出的build议(如上所述),但这并不奏效。
停止使用slapd.conf ,但这只是一般性的build议。 如果不是slapd-config大部分(如果不是所有的olc*指令都可以作为slapd.conf样式configuration的非olc指令使用。
为了security起见,除非你也做非TLS SASL,否则security tls=1应该是足够的。
您对TLSCipherSuite操作不起作用,因为只有在TLS正在使用时,它们才控制可接受的密码,select是否使用/需要TLS无关紧要。 为此,您将需要使用security 。 但是,您应该使用更好的TLS选项,例如至lessTLSCipherSuite 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>指定简单用户名/密码authentication所需的安全强度因子。 请注意,传输因子是底层传输提供的安全措施,例如ldapi://(最终IPSEC)。 它通常不被使用。
如果你必须继续使用slapd.conf,那么这个线程就有你需要的答案:
从man slapd.conf
TLSVerifyClient
<level>
demand | hard | true由于兼容性原因,这些关键字都是相同的。 客户端证书被请求。 如果没有提供证书,或者提供了错误的证书,会话立即终止。
在密码select方面, 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 ,并且我怀疑您可能想要检查哪些密码名称TLSCipherSuite (从pipe理员指南中 ):
除了单独的密码名称之外,说明符HIGH,MEDIUM,LOW,EXPORT和EXPORT40也可能有帮助,还有TLSv1,SSLv3和SSLv2。
要获取GnuTLS中的密码列表,请使用:
`gnutls-cli -l`