Configure o OpenLDAP usando GnuTLS com TLS = obrigatório

3

Temos um servidor openldap e não queremos permitir a comunicação não criptografada, portanto, aceitável é tls na porta 389 ( starttls ) ou ssl acima de 636 ( ldaps ).

Como usamos o slapd.conf para configuração, olcSecurity não é uma opção.

TLSCipherSuite parece ser a maneira de fazer isso com o slapd.conf. Mas ao usar esse slapd, ele não inicia ou ignora as configurações (isto é, aceita solicitações não criptografadas).

slapd não inicia (erro: TLS init def ctx falhou: -1) ao usar:

- TLSCipherSuite ALL
- TLSCipherSuite Default
- TLSCipherSuite ALL:!NULL
- TLSCipherSuite ALL:!aNULL
- TLSCipherSuite AES256-SHA #one of the ciphers offered by openssl

O slapd é iniciado, mas aceita solicitações não criptografadas ao usar:

- TLSCipherSuite NORMAL
- TLSCipherSuite NORMAL:!NULL #would be acceptable
- TLSCipherSuite !NULL #would be acceptable

Nós testamos com

ldapsearch -L -x -W -h [SERVER] -D [USER] - b [SEARCHBASE] uid=[USER] 

(não criptografado)

e

ldapsearch -L -x -W -ZZ -h [SERVER] -D [USER] - b [SEARCHBASE] uid=[USER]

(encriptado)

O os openldap está rodando é o debian 8.7. A versão openldap parece estar usando gnutls, não openssl, então essa pode ser a razão para os problemas.

Mas as últimas três variações TLSCipherSuite parecem ser uma sintaxe válida, pelo menos o slapd é iniciado sem erros. Por que !NULL não impede que o slapd aceite solicitações não criptografadas? Os dois últimos (use qualquer código disponível, mas não permita nenhuma cifra) seriam aceitáveis.

São necessárias configurações / parâmetros adicionais?

Observe que tentamos as sugestões fornecidas aqui (conforme descrito acima), mas não funcionou.

    
por blockbax 03.03.2017 / 12:53

2 respostas

1

Pare de usar slapd.conf , mas isso é apenas um conselho geral. A maioria, senão todas, olc* diretivas de slapd-config estão disponíveis como diretivas não-olc para uma configuração de estilo slapd.conf .

Para security , algo na ordem de security tls=1 deve ser suficiente, a menos que você também faça SASL não-TLS.

Suas manipulações de TLSCipherSuite não funcionarão porque elas controlam somente as cifras aceitáveis, uma vez que o TLS está em uso, não importa se você escolhe ou não usar / exigir TLS. Para isso, você vai querer usar security . No entanto, você deve usar melhores opções de TLS, por exemplo, pelo menos TLSCipherSuite HIGH:!aNull:!MD5:@STRENGTH e olcTLSProtocolMin 3.1 .

De slapd.conf(5) :

security <factors>
Specify a set of security strength factors (separated by white space) to require (see sasl-secprops's minssf option for a description of security strength factors). The directive may be specified globally and/or per-database. ssf=<n> specifies the overall security strength factor. transport=<n> specifies the transport security strength factor. tls=<n> specifies the TLS security strength factor. sasl=<n> specifies the SASL security strength factor. update_ssf=<n> specifies the overall security strength factor to require for directory updates. update_transport=<n> specifies the transport security strength factor to require for directory updates. update_tls=<n> specifies the TLS security strength factor to require for directory updates. update_sasl=<n> specifies the SASL security strength factor to require for directory updates. simple_bind=<n> specifies the security strength factor required for simple username/password authentication. Note that the transport factor is measure of security provided by the underlying transport, e.g. ldapi:// (and eventually IPSEC). It is not normally used.

    
por 03.03.2017 / 21:56
0

Se você precisar continuar usando o slapd.conf, então este tópico contém a resposta você precisa:

From man slapd.conf

TLSVerifyClient <level>

demand | hard | true

These keywords are all equivalent, for compatibility reasons. The client certificate is requested. If no certificate is provided, or a bad certificate is provided, the session is immediately terminated.

Em termos de seleção de cifras, o LDAP do Zytrax para cientistas de foguetes fornece algumas dicas:

# 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

Você precisa alterar TLS_CIPHER_SUITE para TLSCipherSuite e eu suspeito que você queira verificar quais nomes de criptografia funcionarão (a partir do guia de administração ):

Besides the individual cipher names, the specifiers HIGH, MEDIUM, LOW, EXPORT, and EXPORT40 may be helpful, along with TLSv1, SSLv3, and SSLv2.

To obtain the list of ciphers in GnuTLS use:

   'gnutls-cli -l'
    
por 23.03.2017 / 09:05