Configure o OpenLDAP com TLS = obrigatório

16

Atualmente, o OpenLDAP precisa ser configurado com ldapmodify cn = config, como descrito aqui . Mas em nenhum lugar posso encontrar como você o configura para aceitar apenas o tráfego TLS. Acabei de confirmar que nosso servidor aceita tráfego não criptografado (com ldapsearch e tcpdump).

Normalmente, eu fecharia a porta não SSL com tabelas IP, mas o uso da porta SSL foi descontinuado, aparentemente, então não tenho essa opção.

Portanto, com os comandos de configuração SSL, assim:

dn: cn=config
changetype:modify
replace: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/ssl/bla.key
-
replace: olcTLSCertificateFile
olcTLSCertificateFile: /etc/ssl/bla.crt
-
replace: olcTLSCACertificateFile
olcTLSCACertificateFile: /etc/ssl/ca.pem

Existe um parâmetro para forçar o TLS?

Edit: Eu tentei o olcTLSCipherSuite, mas não funciona. Saída de depuração:

TLS: could not set cipher list TLSv1+RSA:!NULL.
main: TLS init def ctx failed: -1
slapd destroy: freeing system resources.
slapd stopped.
connections_destroy: nothing to destroy.

Edit2 (quase corrigido): Consegui corrigi-lo carregando:

# cat force-ssl.tx 
dn: cn=config
changetype:  modify
add: olcSecurity
olcSecurity: tls=1

Mas então comandos como

ldapmodify -v -Y EXTERNAL -H ldapi:/// -f /etc/ssl/tls-required.ldif

Não funciona mais ... E altere-o para:

ldapmodify -v -x -D "cn=admin,dc=domain,dc=com" -H ldap://ldap.bla.tld/ -ZZ -W -f force-ssl.txt

me dá "ldap_bind: credenciais inválidas (49)". Aparentemente, mesmo que este binddn seja especificado como rootdn, não posso usá-lo para alterar cn=config. Isso pode ser mudado?

Halfgaar
fonte

Respostas:

16

Eu parecia ter conseguido:

Eu fiz isso:

dn: olcDatabase={1}hdb,cn=config
changetype:  modify
add: olcSecurity
olcSecurity: tls=1

E isso parece ter o efeito desejado. Ainda posso executar comandos como:

ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b cn=config

Mas tentar vincular-se a " ldapsearch -xLLL -b ..." sem SSL diz: "É necessário sigilo TLS"

Halfgaar
fonte
2
+1 parece funcionar muito bem. Infelizmente, se o cliente tentar se autenticar sem STARTTLS, ele enviará a senha em texto sem formatação e o servidor responderá com a TLS confidentiality requiredmensagem.
Carlos Campderrós
11
Publiquei isso na lista de discussão do OpenLDAP como um possível problema de segurança. Dei o exemplo do FTP, que bloqueia assim que você fornece USER. Mas fui anulado. Veja isso.
Halfgaar
engraçado, eu olhei para esse segmento antes que eu encontrei esta resposta :)
Carlos Campderrós
Obrigado, exatamente o que eu estava procurando. A senha que passa pela conexão em texto não criptografado será uma implementação específica no software do lado do cliente. O requisito TLS pode ser testado com ligação anônima primeiro antes de tentar se conectar como usuário.
Falha no servidor
3

Isso é alcançado com a opção TLSCipherSuite . Um exemplo está documentado no capítulo de segurança LDAP do livro OpenLDAP Zytrax . Com ele, você pode informar ao OpenLDAP os conjuntos de cifras que seu servidor aceitará. Por exemplo, você pode dizer que não deseja um NULLconjunto de criptografia (por exemplo: sessão não criptografada).

Tenha cuidado, porém, para que o OpenLDAP possa ser vinculado às bibliotecas OpenSSL ou GnuTLS. Eles usam listas de códigos diferentes para descrever seu suporte à criptografia. A lista de cifras OpenSSL pode ser obtida com um comando como openssl ciphers -ve a lista GnuTLS com gnutls-cli -l.

A maneira mais simples de desativar a conexão sem criptografia seria:

dn: cn=config
changetype: modify
replace: olcTLSCipherSuite
olcTLSCipherSuite: ALL:!NULL

Uma restrição mais específica usando a sintaxe GnuTLS :

dn: cn=config
changetype: modify
replace: olcTLSCipherSuite
olcTLSCipherSuite: TLS_RSA_CAMELLIA_128_CBC_SHA1:TLS_RSA_CAMELLIA_256_CBC_SHA1:!NULL

Um exemplo mais completo pode ser (usando a sintaxe OpenSSL ):

dn: cn=config
changetype: modify
replace: olcTLSCipherSuite
olcTLSCipherSuite: HIGH:+SSLv3:+TLSv1:MEDIUM:+SSLv2:@STRENGTH:+SHA:+MD5:!NULL

Há uma discussão na lista de discussão do OpenLDAP que vale a pena ler sobre uma pergunta semelhante .

Também é importante notar que as ferramentas CLI do OpenLDAP, como ldapsearch, estão automaticamente mudando para o uso do TLS ao se conectar a um servidor que proíbe as conexões não criptografadas. Isso significa que você não precisa adicionar -Zà lista de argumentos.

Tonin
fonte
Eu tentei. Não deu certo. Eu editei minha pergunta para refletir isso.
precisa saber é o seguinte
Acho que o erro relatado está relacionado às cifras que a sua implementação TLS conhece. O OpenLDAP pode ser compilado com as bibliotecas OpenSSL ou gnuTLS. O exemplo que eu dei usou a sintaxe do OpenSSL, sua implementação provavelmente está usando o gnuTLS. Eu sugiro que você tente um CipherSuite simplificado, por exemploALL:!NULL
Tonin
"AVISO: Não seja inteligente e altere o TLSCipherSuite para algo inteligente como HIGH: MEDIUM: -SSLv2 - esta é uma diretiva openssl" - leia rogermoffatt.com/2011/08/24/ubuntu-openldap-with-ssltls .
Xdg