Usando Permite criptografar certificados com o openLDAP

2

Estou executando um servidor openLDAP há vários meses e o usamos para autenticação em vários aplicativos. Um membro da equipe anterior configurou o servidor e ele não parece ser uma instalação padrão, mas é bastante simples.

Recentemente, um de nossos certificados de CA expirou e foi tomada a decisão de substituí-lo por Let's Encrypt. Meu gerente substituiu o certificado no servidor.

Funciona para o aplicativo da web (Gerenciador LDAP, alteração de senha de autoatendimento), no entanto, nenhum cliente pode autenticar com relação a ele. Por exemplo, se eu tentar testar uma configuração LDAP Redmine, recebo uma mensagem dizendo "Não é possível conectar (SSL_connect SYSCALL retornado = 5 errno = 0 estado = SSLv2 / v3 servidor de leitura olá A)"

Testando a autenticação do Nexus contra ela, ela simplesmente não se conecta.

Frustrantemente, não há nada nos logs no servidor LDAP ou naqueles com os aplicativos para indicar por que isso está falhando. Minhas investigações me levam a acreditar que é algo para fazer como o certificado / chave está configurado, mas eu tentei tudo o que posso pensar e tudo o que posso encontrar on-line e nada funciona.

Detalhes do ambiente são:

Debian 8 openLDAP openldap-2.4.40

Minha configuração é a seguinte:

/etc/ldap/ldap.conf

# LDAP Defaults
#
# See ldap.conf(5) for details
# This file should be world readable but not world writable.
#BASE   dc=example,dc=com
#URI    ldap://ldap.example.com ldap://ldap-master.example.com:666
#SIZELIMIT      12
#TIMELIMIT      15
#DEREF          never
# TLS certificates (needed for GnuTLS)
TLS_CACERT      /etc/letsencrypt/live/myserver.com/fullchain.pem

/etc/ldap/slapd.d/cn=config.ldif

dn: cn=config
objectClass: olcGlobal
cn: config
olcArgsFile: /var/run/slapd/slapd.args
olcLogLevel: none
olcPidFile: /var/run/slapd/slapd.pid
olcToolThreads: 1
structuralObjectClass: olcGlobal
entryUUID: c6dd9e40-9dc2-1035-8c03-add74f928a5e
creatorsName: cn=config
createTimestamp: 20160423171552Z
entryCSN: 20160423171552.629347Z#000000#000#000000
modifiersName: cn=config
modifyTimestamp: 20160423171552Z

Se eu testar a conexão:

admin@ldap:~$ sudo openssl s_client -connect localhost:636 -showcerts -state -CAfile /etc/letsencrypt/live/myserver.com/fullchain.pem
CONNECTED(00000003)
SSL_connect:before/connect initialization
SSL_connect:SSLv2/v3 write client hello A
140394818631312:error:140790E5:SSL routines:SSL23_WRITE:ssl handshake failure:s23_lib.c:184:
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 0 bytes and written 289 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE

Alguém tem alguma ideia do que me falta?

EDITAR

Como sugestão de @ 84104 eu editei o arquivo tls.ldif para ler como segue:

dn: cn=config
changetype: modify
replace: olcTLSCACertificateFile
olcTLSCACertificateFile: /etc/letsencrypt/live/myserver/fullchain.pem
-
replace: olcTLSCertificateFile
olcTLSCertificateFile: /etc/letsencrypt/live/myserver/cert.pem
-
replace: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/letsencrypt/live/myserver/privkey.pem

Em seguida, execute o comando:

ldapmodify -Y EXTERNAL -H ldapi:/// -f tls.ldif

No entanto, a saída que agora recebo é:

SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "cn=config"
ldap_modify: Other (e.g., implementation specific) error (80)

Eu encontrei uma sugestão que isso pode ser devido às permissões no certificado ou nos arquivos de chave, mas eu os alterei para corresponder exatamente aos dos arquivos usados anteriormente e ainda recebi esta mensagem.

Mais uma vez peço desculpas por minha falta de conhecimento geral sobre o assunto, mas alguém pode sugerir outra coisa?

EDITAR

De acordo com a sugestão, eu alterei tls.ldif e mudei todos os comandos de replace para delete, depois executei o comando ldapmodify novamente. Existe outro erro.

    admin@ldap:/etc/ansible_ldif_work$ sudo ldapmodify -Y EXTERNAL -H   ldapi:/// -f tls.remove.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "cn=config"
ldap_modify: Inappropriate matching (18)
        additional info: modify/delete: olcTLSCACertificateFile: no equality matching rule
    
por shaneoh 16.05.2016 / 11:53

6 respostas

5

O arquivo fullchain.pem NÃO é uma concatenação da cadeia de certificados acima do arquivo cert.pem, é uma concatenação do arquivo chain.pem e cert.pem.

O arquivo chain.pem e o arquivo de autoridade raiz devem ser concatenados no arquivo que você apresentará para o slapd como olcTLSCACertificateFile

O arquivo privkey.pem deve ser apresentado ao slapd como olcTLSCertificateKeyFile.

O arquivo simples cert.pem deve ser apresentado para slapd como olcTLSCertificateFile.

Não tenho certeza se a ordem da concatenação é importante, mas esta é a ordem que usei: gato chain.pem root.pem > ca.merged.crt

O teste openssl que você usou mostra que tudo está OK quando configurado assim.

O arquivo de autoridade raiz pode ser encontrado aqui: link

Teste:

[root@█████ ssl]# openssl s_client -connect [REDACTED]:636 -showcerts -state -CAfile ca.merged.crt
CONNECTED(00000003)
SSL_connect:before/connect initialization
SSL_connect:SSLv2/v3 write client hello A
SSL_connect:SSLv3 read server hello A
depth=2 O = Digital Signature Trust Co., CN = DST Root CA X3
verify return:1
depth=1 C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3
verify return:1
depth=0 CN = [REDACTED]
verify return:1
SSL_connect:SSLv3 read server certificate A
SSL_connect:SSLv3 read server key exchange A
SSL_connect:SSLv3 read server done A
SSL_connect:SSLv3 write client key exchange A
SSL_connect:SSLv3 write change cipher spec A
SSL_connect:SSLv3 write finished A
SSL_connect:SSLv3 flush data
SSL_connect:SSLv3 read finished A
---
Certificate chain
 0 s:/CN=[REDACTED]
   i:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
-----BEGIN CERTIFICATE-----
[REDACTED]
-----END CERTIFICATE-----
 1 s:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
   i:/O=Digital Signature Trust Co./CN=DST Root CA X3
-----BEGIN CERTIFICATE-----
[REDACTED]
-----END CERTIFICATE-----
 2 s:/O=Digital Signature Trust Co./CN=DST Root CA X3
   i:/O=Digital Signature Trust Co./CN=DST Root CA X3
-----BEGIN CERTIFICATE-----
[REDACTED]
-----END CERTIFICATE-----
---
Server certificate
subject=/CN=[REDACTED]
issuer=/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
---
No client certificate CA names sent
Server Temp Key: ECDH, secp384r1, 384 bits
---
SSL handshake has read 4417 bytes and written 405 bytes
---
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES256-GCM-SHA384
Server public key is 4096 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : ECDHE-RSA-AES256-GCM-SHA384
    Session-ID: [REDACTED]
    Session-ID-ctx:
    Master-Key: [REDACTED]
    Key-Arg   : None
    Krb5 Principal: None
    PSK identity: None
    PSK identity hint: None
    Start Time: 1487882605
    Timeout   : 300 (sec)
    Verify return code: 0 (ok)
---
    
por 23.02.2017 / 21:35
3

Seu servidor OpenLDAP não parece ter o TLS configurado.

Seu /etc/ldap/slapd.d/cn=config.ldif deve ter algo como o seguinte:

olcTLSCertificateKeyFile: /etc/ldap/ssl/ldap.key
olcTLSCACertificateFile: /etc/ldap/ssl/ldap_ca.cert
olcTLSCertificateFile: /etc/ldap/ssl/ldap.cert
olcTLSCipherSuite: HIGH:!aNull:!MD5:@STRENGTH
olcTLSProtocolMin: 3.1

Você deve adicionar isso em via ldapmodify.

    
por 19.05.2016 / 01:52
2

Você tem alguma medida de segurança extra ativada (como o apparmor) que restringe o acesso de leitura aos seus certificados? Eu recebi a mesma mensagem de erro ldap_modify: Other (e.g., implementation specific) error (80) porque o apparmor não permitiu o acesso do openldap aos certificados para criptografar:

As etapas a seguir resolveram o problema para mim:

  • Adicione uma linha a /etc/apparmor.d/local/usr.sbin.slapd : /etc/letsencrypt/** r,

  • service apparmor restart

por 23.05.2016 / 10:52
2

Há uma postagem de blog bonita sobre esse tópico. Funciona para mim link

Meu sistema é este:

# lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description:    Debian GNU/Linux 8.8 (jessie)
Release:        8.8
Codename:       jessie

# slapd -V
@(#) $OpenLDAP: slapd  (Jul 16 2017 19:57:41) $
        Debian OpenLDAP Maintainers <[email protected]>

Aqui uma rápida corrida. Lidar com o acesso ao sistema de arquivos para o letsencrypt ...

useradd letsencrypt
chown openldap:letsencrypt /etc/letsencrypt/ -R
usermod -a -G letsencrypt openldap

Ativar serviços ...

# /etc/default/slapd
SLAPD_SERVICES="ldap:/// ldapi:/// ldaps:///"

E diga ao openldap sobre seus certs ...

# /root/add_ssl.ldif
dn: cn=config
changetype: modify
add: olcTLSCipherSuite
olcTLSCipherSuite: NORMAL
-
add: olcTLSCRLCheck
olcTLSCRLCheck: none
-
add: olcTLSVerifyClient
olcTLSVerifyClient: never
-
add: olcTLSCACertificateFile
olcTLSCACertificateFile: /etc/letsencrypt/live/YOURDOMAIN/fullchain.pem
-
add: olcTLSCertificateFile
olcTLSCertificateFile: /etc/letsencrypt/live/YOURDOMAIN/cert.pem
-
add: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/letsencrypt/live/YOURDOMAIN/privkey.pem
-
add: olcTLSProtocolMin
olcTLSProtocolMin: 3.3

Leia no arquivo ldif ...

ldapmodify -Y EXTERNAL -H ldapi:/// -f add_ssl.ldif

Finalmente reinicie e verifique o slapd.

systemctl restart slapd.service
systemctl status slapd.service
    
por 22.07.2017 / 23:45
1

Eu tive o mesmo problema ao configurar certificações de Vamos criptografar com OpenLDAP

O erro:

~ # ldapmodify -Y EXTERNAL -H ldapi:/// -f add_ssl.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "cn=config"
ldap_modify: Other (e.g., implementation specific) error (80)

Os arquivos de log contêm:

... apparmor="DENIED" operation="open" profile="/usr/sbin/slapd" name="/etc/letsencrypt/archive/your.domain.tld/fullchain1.pem" ...

Eu encontrei a seguinte solução:

  1. Editar o arquivo /etc/apparmor.d/usr.sbin.slapd
  2. Adicionar linha: /etc/letsencrypt/archive/your.domain.tld/* r,
  3. Reinicie o *apparmor*: service apparmor restart '
  4. E agora execute ldapmodify novamente
por 29.01.2018 / 23:37
0

Eu consegui fazer isso quando mudei o caminho "live" para "archive":

dn: cn=config
changetype: modify
replace: olcTLSCACertificateFile
olcTLSCACertificateFile: /etc/letsencrypt/archive/SOMEDOMAIN/fullchain1.pem
-
replace: olcTLSCertificateFile
olcTLSCertificateFile: /etc/letsencrypt/archive/SOMEDOMAIN/cert1.pem
-
replace: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/letsencrypt/archive/SOMEDOMAIN/privkey1.pem

e permitindo que o usuário do openldap leia esses arquivos usando, por exemplo: setfacl -m "u: openldap: r" /etc/whesencrypt/archive/SOMEDOMAIN/ {fullchain1, cert1, privkey1} .pem

    
por 14.02.2018 / 18:54