使用TLS = GnuTLSconfigurationOpenLDAP =必需

我们有一个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:@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>指定简单用户名/密码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`