Persuadindo o openldap a trabalhar com SSL no Ubuntu com cn = config

3

Eu simplesmente não consigo fazer isso (conexão TLS ao openldap) funcionar e gostaria de receber ajuda.

Eu tenho um servidor openldap funcionando no Ubuntu 10.04 LTS, ele está configurado para usar cn = config e a maioria das informações que posso encontrar para o TLS parece usar o arquivo slapd.conf mais antigo: - (

Tenho seguido em grande medida as instruções aqui link , além de outras leia aqui e em outros lugares - o que naturalmente poderia ser parte do problema, já que eu não entendo tudo isso ainda!

Eu criei um arquivo ssl.ldif da seguinte forma:

dn:cn=config

add: olcTLSCipherSuite
olcTLSCipherSuite: TLSV1+RSA:!NULL
add: olcTLSCRLCheck
olcTLSCRLCheck: none
add: olcTLSVerifyClient
olcTLSVerifyClient: never
add: olcTLSCACertificateFile
olcTLSCACertificateFile: /etc/ssl/certs/ldap_cacert.pem
add: olcTLSCertificateFile
olcTLSCertificateFile: /etc/ssl/certs/my.domain.com_slapd_cert.pem
add: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/ssl/private/my.domain.com_slapd_key.pem

e eu importo usando a seguinte linha de comando

ldapmodify -x -D cn=admin,dc=mydomain,dc=com -W -f ssl.ldif

Eu editei / etc / default / slapd para que ele tenha a seguinte linha de serviços:

SLAPD_SERVICES="ldap:/// ldapi:/// ldaps:///"

E toda vez que estou fazendo uma alteração, estou reiniciando o slapd com /etc/init.d/slapd restart

A seguinte linha de comando para testar a conexão não TLS funciona bem;

ldapsearch -d 9 -D cn=admin,dc=mydomain,dc=com -w mypassword \
-b dc=mydomain,dc=com -H "ldap://mydomain.com" "cn=roger*"

Mas quando eu alterno para ldaps usando esta linha de comando;

ldapsearch -d 9 -D cn=admin,dc=mydomain,dc=com -w mypassword \
-b dc=mydomain,dc=com -H "ldaps://mydomain.com" "cn=roger*"

Isso é o que eu recebo;

ldap_url_parse_ext(ldaps://mydomain.com)
ldap_create
ldap_url_parse_ext(ldaps://mydomain.com:636/??base)
ldap_sasl_bind
ldap_send_initial_request
ldap_new_connection 1 1 0
ldap_int_open_connection
ldap_connect_to_host: TCP mydomain.com:636
ldap_new_socket: 3
ldap_prepare_socket: 3
ldap_connect_to_host: Trying 127.0.0.1:636
ldap_pvt_connect: fd: 3 tm: -1 async: 0
TLS: can't connect: A TLS packet with unexpected length was received..
ldap_err2string
ldap_sasl_bind(SIMPLE): Can't contact LDAP server (-1)

Agora, se eu verificar netstat -al , posso ver;

tcp        0      0 *:www                   *:*                     LISTEN
tcp        0      0 *:ssh                   *:*                     LISTEN
tcp        0      0 *:https                 *:*                     LISTEN
tcp        0      0 *:ldaps                 *:*                     LISTEN
tcp        0      0 *:ldap                  *:*                     LISTEN

Eu não tenho certeza se isso é significativo também ... Eu suspeito que seja;

openssl s_client -connect mydomain.com:636 -showcerts
CONNECTED(00000003)
916:error:140790E5:SSL routines:SSL23_WRITE:ssl handshake failure:s23_lib.c:188:

Acho que fiz todos os meus certificados, etc. OK e aqui estão os resultados de algumas verificações;

Se eu fizer isso,

certtool -e --infile /etc/ssl/certs/ldap_cacert.pem

Recebo a saída de verificação da cadeia: Verificada.

certtool -e --infile /etc/ssl/certs/mydomain.com_slapd_cert.pem

Dá "certtool: o último certificado não é auto-assinado", mas de outra forma parece OK?

Onde eu errei? Certamente obter o openldap para rodar com segurança no Ubuntu deve ser fácil e não requerer um diploma em ciência de foguetes!

Alguma idéia?

    
por Roger 23.08.2011 / 21:04

2 respostas

2

Parece que a sintaxe do meu arquivo ssl.ldif está incorreta. Depois de seguir um guia diferente on-line, eu mudei para isso (e também certificados auto-assinados regenerados).

dn: cn=config
changetype: modify
add: olcTLSCipherSuite
olcTLSCipherSuite: NORMAL
-
add: olcTLSCRLCheck
olcTLSCRLCheck: none
-
add: olcTLSVerifyClient
olcTLSVerifyClient: never
-
add: olcTLSCertificateFile
olcTLSCertificateFile: /etc/ssl/certs/new-ca-cert.pem
-
add: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/ssl/private/new-ca-key.pem

Isso ainda não foi totalmente resolvido, mas pelo menos agora eu posso usar;

openssl s_client -connect mydomain.com:636 -showcerts

E, na verdade, obter um resultado. Vou atualizar essa resposta enquanto descubro mais.

EDITAR:

Eu escrevi minha solução no link que pode ajudar outra pessoa . Tal palavrório!

    
por 24.08.2011 / 01:35
2

O link de Roger apodreceu, aqui está o mesmo no WayBack Machine do Internet Archive, a partir da última data arquivada antes dele mudar seu site: link

Eu também tomei a liberdade de anexar o conteúdo dele abaixo:

O ponto de partida

Suponho que você tenha uma instalação de openldap funcional (não protegida) usando cn = config (o banco de dados LDAP) para configuração em vez da variação do estilo antigo slapd.conf. Se você está fazendo alterações editando o arquivo slapd.conf, então o resto deste artigo não é para você!

PASSO UM

Crie alguns certificados autoassinados para começar. Se você já criou alguns certificados para um servidor da Web usando o openssl, a primeira coisa que vai te surpreender é que eles não funcionam com o ldap. Você precisa de certificados em um formato diferente e, para gerá-los, precisamos de uma nova ferramenta que você ainda não tenha.

sudo -i
apt-get update
apt-get install gnutls-bin
certtool --generate-privkey --outfile /etc/ssl/private/ldap-ca-key.pem
certtool --generate-self-signed --load-privkey /etc/ssl/private/ldap-ca-key.pem --outfile /etc/ssl/certs/ldap-ca-cert.pem

Corrija suas permissões - os arquivos resultantes precisam ser legíveis pelo grupo openldap.

Para isso, adicione o usuário openldap ao grupo ssl-cert e, em seguida, assegure-se de que os certificados e chaves sejam de propriedade do grupo ssl-cert. Lembre-se de que o diretório / etc / ssl / private tem permissões restritas para que você precise fazer isso corretamente.

adduser openldap ssl-cert
chgrp /etc/ssl/private/ldap-ca-key.pem

PASSO DOIS

Crie um arquivo ssl.ldif adequado para importação no banco de dados de configuração. Vale a pena dizer, neste momento, que os que eu vi online tiveram erros de sintaxe que os impediram de funcionar - e eles falham silenciosamente, o que faz você pensar que eles funcionaram! Note especialmente que os hífens são sintaticamente importantes.

dn: cn=config
changetype: modify
add: olcTLSCipherSuite
olcTLSCipherSuite: NORMAL
-
add: olcTLSCRLCheck
olcTLSCRLCheck: none
-
add: olcTLSVerifyClient
olcTLSVerifyClient: never
-
add: olcTLSCertificateFile
olcTLSCertificateFile: /etc/ssl/certs/ldap-ca-cert.pem
-
add: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/ssl/private/ldap-ca-key.pem

AVISO: Não seja inteligente e mude o TLSCipherSuite para algo inteligente como HIGH: MEDIUM: -SSLv2 - esta é uma diretiva openssl e você verá que não é possível reiniciar o slapd, pois ele falhará na inicialização: - (Para diagnosticar isso, tente iniciar o slapd com o seguinte comando;

slapd -d 16383

Se você fizer isso, provavelmente verá o seguinte:

TLS: could not set cipher list HIGH:MEDIUM:+SSLv2.
main: TLS init def ctx failed: -1

Você pode corrigir isso editando /etc/ldap/slapd.d/cn=config.ldif diretamente se tiver cuidado.

PASSO TRÊS

Importe o arquivo ssl.ldif e fique atento ao que você deve ver quando funcionar, ao contrário do que você verá quando isso não acontecer. Também esteja ciente de que, se você estiver executando isso várias vezes, será necessário alterar o add para substituir no arquivo ssl.ldif.

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

O -v fornece uma saída detalhada. Certifique-se de ver as novas entradas sendo impressas, se ela disser algo como:

modifying entry "cn=config"
modify complete

Então isso NÃO significa que funcionou. Isso provavelmente significa que ele não processou o arquivo devido a erros e nenhuma alteração foi realmente feita. Você precisa ver listar as entradas que ele modificou. Por exemplo, esta é uma versão funcional (usando substituir, não adicionar)

SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
replace olcTLSCipherSuite:
NORMAL
replace olcTLSCRLCheck:
none
replace olcTLSVerifyClient:
never
replace olcTLSCertificateFile:
/etc/ssl/certs/ldap2-ca-cert.pem
replace olcTLSCertificateKeyFile:
/etc/ssl/private/ldap2-ca-key.pem
modifying entry "cn=config"
modify complete

PASSO QUATRO

Certifique-se de que o slapd esteja atento a ldaps: // connections Vamos editar novamente um arquivo (alguém está pensando que usar cn = config está causando mais aborrecimentos do que resolve?), Desta vez precisamos editar /etc/default/slapd e alterar a linha SLAPD_SERVICES para que ela tenha os ldaps: /// entrada como mostrado aqui;

SLAPD_SERVICES="ldap:/// ldapi:/// ldaps:///"

PASSO CINCO

Corrija o problema do certificado não confiável. Você acha que já teríamos terminado, mas acontece que há uma configuração em outro arquivo que é realmente importante. Se você tentar se conectar agora, usando uma linha de comando que se liga ao servidor ldap como este;

ldapsearch -d 9 -D “cn=admin,dc=mydomain,dc=com” -w adminpassword -b “dc=mydomain,dc=com” -H “ldaps://mydomain.com” “objectClass=*”

Você provavelmente vai conseguir;

TLS: peer cert untrusted or revoked (0x42)
TLS: can't connect: (unknown error code).
ldap_err2string
ldap_sasl_bind(SIMPLE): Can't contact LDAP server (-1)

Para resolver isso, edite o arquivo /etc/ldap/ldap.conf (note que este não é o arquivo slapd.conf - pode ser um pouco confuso) e adicione a única linha abaixo ao que é provavelmente um completamente comentado. arquivo fora;     TLS_REQCERT nunca

Agora deve funcionar!

    
por 25.07.2016 / 19:30