Configure o OpenLDAP com TLS = obrigatório

15

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

Normalmente, basta fechar a porta não-SSL com tabelas IP, mas o uso da porta SSL está obsoleto, aparentemente, por isso não tenho essa opção.

Então, 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, em seguida, comandos como

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

Não trabalhe mais ... E altere para:

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

me da "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?

    
por Halfgaar 20.12.2012 / 16:52

2 respostas

15

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. Eu ainda posso executar comandos como:

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

Mas a tentativa de associar-se a " ldapsearch -xLLL -b ... " sem SSL diz: "É necessária confidencialidade de TLS"

    
por 04.01.2013 / 13:43
3

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

Tenha cuidado, pois o OpenLDAP pode ser vinculado a bibliotecas OpenSSL ou GnuTLS. Aqueles usam diferentes listas de criptografia para descrever seu suporte de criptografia. A lista de códigos OpenSSL pode ser obtida com um comando como openssl ciphers -v e 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 do 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 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 ser lida sobre uma questão semelhante .

Também vale a pena notar que as ferramentas cli do OpenLDAP, como ldapsearch , estão mudando automaticamente para o 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.

    
por 20.12.2012 / 18:04