Клиентский поиск LDAP с SSL - CentOS7

Кто-либо получил аутентификацию клиента SSL, работающую с OpenLDAP (на CentOS7 - который использует moznss)?

Я имею поиск прошлых 2 дней, пытаясь заставить это работать, и с certutil базой данных и с прямой конфигурацией PEM, и разбил это, это не работает.

Моя начальная буква, хотя клиент, не отправляет сертификат SSL за проверкой, и я доказал это при использовании аутентификации PEM и strace (и там не открыто () на crt файле или ключе).

Во-первых, это - RHEL7, и оба клиента и сервера имеют ту же версию установленного openldap:

Сервер:

openldap-servers-2.4.39-6.el7.x86_64
openldap-2.4.39-6.el7.x86_64

Клиент:

openldap-clients-2.4.39-6.el7.x86_64
openldap-2.4.39-6.el7.x86_64

SSL: Мое собственное Приблизительно.

Используя аутентификацию PEM:

Сервер (cn=config.ldif):

olcTLSCACertificateFile:  /etc/openldap/tls/ldap-ca.crts
olcTLSCertificateFile:    /etc/openldap/tls/ldap-server.crt
olcTLSCertificateKeyFile: /etc/openldap/tls/ldap-server.key
olcTLSVerifyClient:       hard

Сервер (/usr/sbin/slapd-u ldap-h "ldapi:///ldap:///ldaps:///"-d 1):

55935ff8 slap_listener_activate(10):
55935ff8 >>> slap_listener(ldaps:///)
55935ff8 connection_get(18): got connid=1000
55935ff8 connection_read(18): checking for input on id=1000
TLS: loaded CA certificate file /etc/openldap/tls/ldap-ca.crts.
TLS: error: the certificate '/etc/openldap/tls/ldap-server.crt' could not be found in the database - error -12285:Unable to find the certificate or key necessary for authentication..
TLS: certificate '/etc/openldap/tls/ldap-server.crt' successfully loaded from PEM file.
TLS: no unlocked certificate for certificate 'CN=x.x.x,...,C=AU'.
TLS: certificate [CN=x.x.x,...,C=AU] is valid
55935ff8 connection_get(18): got connid=1000
55935ff8 connection_read(18): checking for input on id=1000
TLS: error: accept - force handshake failure: errno 11 - moznss error -12285
TLS: can't accept: TLS error -12285:Unable to find the certificate or key necessary for authentication..
55935ff8 connection_read(18): TLS accept failure error=-1 id=1000, closing
55935ff8 connection_close: conn=1000 sd=18

Клиент (/etc/openldap/ldap.conf):

TLS_CACERT                /etc/openldap/tls/ldap-ca.crts
TLS_CERT                  /etc/openldap/tls/ldap-client.crt
TLS_KEY                   /etc/openldap/tls/ldap-client.key
TLS_REQCERT               never

Клиент (ldapsearch-d1-H ldaps://x.x.x-b c=AU 'uid=x'):

TLS: loaded CA certificate file /etc/openldap/tls/ldap-ca.crts.
TLS: certificate [CN=x.x.x,...,C=AU] is valid
TLS: error: connect - force handshake failure: errno 21 - moznss error -12271
TLS: can't connect: TLS error -12271:SSL peer cannot verify your certificate..

Клиент (strace - никакая презентация клиентского сертификата)

...
8047  stat("/etc/openldap/tls/ldap-ca.crts", {st_mode=S_IFREG|0644, st_size=5287, ...}) = 0
8047  open("/etc/openldap/tls/ldap-ca.crts", O_RDONLY) = 4
...

Соединение клиента просто с помощью openssl подключение хорошо работает:

openssl s_client -connect x.x.x:636 -showcerts -CAfile /etc/openldap/tls/ldap-ca.crts -key /etc/openldap/tls/ldap-client.key -state -cert /etc/openldap/tls/ldap-client.crt

...
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES128-SHA
Server public key is 1024 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : ECDHE-RSA-AES128-SHA
    Session-ID: [long hex value]
    Session-ID-ctx:
    Master-Key: [long hex value]
    Key-Arg   : None
    Krb5 Principal: None
    PSK identity: None
    PSK identity hint: None
    Start Time: 1435722028
    Timeout   : 300 (sec)
    Verify return code: 0 (ok)

Используя certutil (moznss база данных):

Та же проблема:

Сервер (cn=config.ldif):

olcTLSVerifyClient:      hard
olcTLSCertificateFile:   "x.x.x - X"
olcTLSCACertificatePath: /etc/openldap/certs

Сервер (moznss):

[root@host certs]# certutil -d . -L
Certificate Nickname                          Trust Attributes
                                              SSL,S/MIME,JAR/XPI

x LDAP CA                                     CT,C,C
x.x.x - X                                     u,u,u
x CA                                          CT,C,C
x CA                                          CT,C,C

Сервер (/usr/sbin/slapd-u ldap-h "ldapi:///ldap:///ldaps:///"-d 1):

559363d2 connection_get(18): got connid=1000
559363d2 connection_read(18): checking for input on id=1000
TLS: certdb config: configDir='/etc/openldap/certs' tokenDescription='ldap(0)' certPrefix='' keyPrefix='' flags=readOnly
TLS: using moznss security dir /etc/openldap/certs prefix .
TLS: certificate 'x.x.x - X' successfully loaded from moznss database.
TLS: no unlocked certificate for certificate 'CN=x.x.x,...,C=AU'.
TLS: certificate [CN=x.x.x,...,C=AU] is valid
559363d2 connection_get(18): got connid=1000
559363d2 connection_read(18): checking for input on id=1000
TLS: error: accept - force handshake failure: errno 11 - moznss error -12285
TLS: can't accept: TLS error -12285:Unable to find the certificate or key necessary for authentication..

Клиент (/etc/openldap/ldap.conf):

TLS_CACERTDIR   /etc/openldap/certs
TLS_CERT        "x - X"
TLS_REQCERT     never

Клиент (moznss):

[root@client certs]# certutil -d  . -L

Certificate Nickname                          Trust Attributes
                                              SSL,S/MIME,JAR/XPI

X LDAP CA                                     CT,C,C
x - X                                         u,u,u
X Root CA                                     CT,C,C
X CA                                          CT,,

Клиент (ldapsearch-d1-H ldaps://x.x.x-b c=AU 'uid=x'):

TLS: certdb config: configDir='/etc/openldap/certs' tokenDescription='ldap(0)' certPrefix='' keyPrefix='' flags=readOnly
TLS: using moznss security dir /etc/openldap/certs prefix .
TLS: certificate [CN=x.x.x,...,C=AU] is valid
TLS: error: connect - force handshake failure: errno 21 - moznss error -12271
TLS: can't connect: TLS error -12271:SSL peer cannot verify your certificate..

Используя этот метод openssl тест хорошо работает, однако, ldapsearch сбои с той же ошибкой. strace не помогает, но действительно показывает открытие файлов базы данных для сертификатов.

Клиент (strace):

8075  stat("/etc/openldap/certs/cert8.db", {st_mode=S_IFREG|0644, st_size=65536, ...}) = 0
8075  open("/etc/openldap/certs/cert8.db", O_RDONLY) = 4
8075  stat("/etc/openldap/certs/key3.db", {st_mode=S_IFREG|0644, st_size=16384, ...}) = 0
8075  open("/etc/openldap/certs/key3.db", O_RDONLY) = 5

Кто-либо получил какие-либо подсказки? (разбитый - я знаю, что у меня была эта работа над более старыми версиями CentOS),

2
задан 1 July 2015 в 06:59
1 ответ

Следующее взято с работающего ldap-сервера CentOS7 и должно охватывать ключевые аспекты SASL/EXTERNAL(TLS) аутентификации
. Заметки несовершеннолетних:
- В этом примере в качестве клиента также выступает сервер
. - В данном примере используется ~/.ldaprc, а не /etc/openldap/ldap.conf
- В данном примере используется olcTLSVerifyClient: verify, а не hard, так как в дополнение к SASL/EXTERNAL(TLS) аутентификации сервер поддерживает и другие типы аутентификации.

slapd-config

[root@ldap ~]# ldapsearch cn=config olcTLSCACertificateFile olcTLSCertificateFile olcTLSCertificateKeyFile olcTLSVerifyClient
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
# extended LDIF
#
# LDAPv3
# base <cn=config> (default) with scope subtree
# filter: cn=config
# requesting: olcTLSCACertificateFile olcTLSCertificateFile olcTLSCertificateKeyFile olcTLSVerifyClient 
#

# config
dn: cn=config
olcTLSCACertificateFile: /etc/pki/tls/certs/ldap.example.com_CA.crt
olcTLSCertificateFile: /etc/pki/tls/certs/ldap.example.com.crt
olcTLSCertificateKeyFile: /etc/pki/tls/private/ldap.example.com.key
olcTLSVerifyClient: try

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1

certificate key permissions

[root@ldap ~]# ls -lZ /etc/pki/tls/private/ldap.example.com.key
-rw-r-----+ root root unconfined_u:object_r:cert_t:s0  /etc/pki/tls/private/ldap.example.com.key

[root@ldap ~]# getfacl /etc/pki/tls/private/ldap.example.com.key
getfacl: Removing leading '/' from absolute path names
# file: etc/pki/tls/private/ldap.example.com.key
# owner: root
# group: root
user::rw-
user:ldap:r--
group::---
mask::r--
other::---

sasl configuration

[root@ldap ~]# cat /etc/sasl2/slapd.conf 
mech_list: external gssapi plain
pwcheck_method: saslauthd

ldap client settings

[root@ldap ~]# cat .ldaprc
URI ldapi:///
BASE cn=config
SASL_MECH external
#TLS_CACERT /etc/ssl/certs/ca-bundle.crt
TLS_CACERT /etc/pki/tls/certs/ldap.example.com_CA.crt
TLS_CERT /etc/pki/tls/certs/ldap.example.com.crt
TLS_KEY /etc/pki/tls/private/ldap.example.com.key

successful SASL/EXTERNAL(TLS) bind

[root@ldap ~]# ldapwhoami -ZZ -h ldap.example.com
SASL/EXTERNAL authentication started
SASL username: cn=ldap.example.com,<cert locality info>
SASL SSF: 0
dn:cn=ldap.example.com,<cert locality info>
[root@ldap ~]# ldapwhoami -H ldaps://ldap.example.com
SASL/EXTERNAL authentication started
SASL username: cn=ldap.example.com,<cert locality info>
SASL SSF: 0
1
ответ дан 3 December 2019 в 12:46

Теги

Похожие вопросы