최근 LDAP 호스트에서 CA 인증서를 업데이트했습니다. LDAP 호스트에 대해 인증하는 데 문제가 없는 것처럼 보이는 몇 개의 CentOS 5.x 서버가 있지만 인증할 수 없는 Centos 6.6 서버가 한 개 있습니다. 서버가 원래 어떻게 구성되었는지는 잘 모르겠고, 시스템 관리자는 떠날 때 문서화하는 방식에 별로 손을 대지 않았습니다. ldapsearch 클라이언트는 문제 없이 작동하는 것 같습니다. 최대한 자세한 디버그 출력을 사용하여 ldapsearch를 실행하면 오류가 표시되지 않습니다.
$ ldapsearch -h ldap.hostname.com -x -LLL -v -d 167 -s base -b "" 2>&1 | grep -i error
res_errno: 0, res_error: <>, res_matched: <>
res_errno: 0, res_error: <>, res_matched: <>
유틸리티 의 출력은 다음과 같습니다 openssl s_client
.
$ openssl s_client -connect ldap.hostname.com:636 < /dev/null
CONNECTED(00000003)
depth=3 C = SE, O = AddTrust AB, OU = AddTrust External TTP Network, CN = AddTrust External CA Root
verify return:1
depth=2 C = US, ST = New Jersey, L = Jersey City, O = The USERTRUST Network, CN = USERTrust RSA Certification Authority
verify return:1
depth=1 C = US, ST = MI, L = Ann Arbor, O = Internet2, OU = InCommon, CN = InCommon RSA Server CA
verify return:1
depth=0 C = , postalCode = , ST = , L = , street = , O = , OU = , CN = ldap.hostname.com
verify return:1
---
Certificate chain
0 s:/C=US/postalCode=/ST=/L=/street=/OU=/CN=ldap.hostname.com
i:/C=US/ST=MI/L=Ann Arbor/O=Internet2/OU=InCommon/CN=InCommon RSA Server CA
1 s:/C=US/ST=MI/L=Ann Arbor/O=Internet2/OU=InCommon/CN=InCommon RSA Server CA
i:/C=US/ST=New Jersey/L=Jersey City/O=The USERTRUST Network/CN=USERTrust RSA Certification Authority
2 s:/C=US/ST=New Jersey/L=Jersey City/O=The USERTRUST Network/CN=USERTrust RSA Certification Authority
i:/C=SE/O=AddTrust AB/OU=AddTrust External TTP Network/CN=AddTrust External CA Root
3 s:/C=SE/O=AddTrust AB/OU=AddTrust External TTP Network/CN=AddTrust External CA Root
i:/C=SE/O=AddTrust AB/OU=AddTrust External TTP Network/CN=AddTrust External CA Root
---
Server certificate
-----BEGIN CERTIFICATE-----
[...]
-----END CERTIFICATE-----
subject=/C=/postalCode=/ST=/L=/street=/O=/OU=/CN=ldap.hostname.com
issuer=/C=US/ST=MI/L=Ann Arbor/O=Internet2/OU=InCommon/CN=InCommon RSA Server CA
---
No client certificate CA names sent
---
SSL handshake has read 5715 bytes and written 607 bytes
---
New, TLSv1/SSLv3, Cipher is AES256-SHA256
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
Protocol : TLSv1.2
Cipher : AES256-SHA256
Session-ID: [...]
Session-ID-ctx:
Master-Key: [...]
Key-Arg : None
Krb5 Principal: None
PSK identity: None
PSK identity hint: None
Start Time: [...]
Timeout : 300 (sec)
Verify return code: 0 (ok)
---
DONE
디버그 모드에서 nslcd를 실행하면 다음 오류가 발견됩니다.
$ sudo nslcd -d -d -d 2>&1 > nslcd.log
$ cat nslcd.log | grep -i error
res_errno: 0, res_error: <>, res_matched: <>
TLS: cannot open certdb '/etc/openldap/cacerts', error -8018:Unknown PKCS #11 error.
TLS: certificate [...] is not valid - error -8172:Peer's certificate issuer has been marked as not trusted by the user..
TLS: error: connect - force handshake failure: errno 0 - moznss error -8172
TLS: can't connect: TLS error -8172:Peer's certificate issuer has been marked as not trusted by the user..
nslcd: [8b4567] ldap_start_tls_s() failed: Connect error (uri="ldap://ldap.hostname.com/")
nslcd: [8b4567] failed to bind to LDAP server ldap://ldap.hostname.com/: Connect error
res_errno: 0, res_error: <>, res_matched: <>
[...]
내용은 다음과 같습니다 /etc/ldap.conf
.
base o=org
timelimit 120
bind_timelimit 120
idle_timelimit 3600
nss_initgroups_ignoreusers root,ldap,named,avahi,haldaemon,dbus,radvd,tomcat,radiusd,news,mailman,nscd,gdm
nss_map_attribute uniqueMember member
nss_base_passwd ou=People,?one
nss_base_group ou=Group,?one
tls_cert
tls_key
uri ldap://ldap.hostname.com
ssl start_tls
TLS_CACERTDIR /etc/openldap/certs
pam_password md5
SUDOERS_BASE ou=SUDOers,o=org
내용은 다음과 같습니다 /etc/openldap/ldap.conf
.
TLS_CACERTDIR /etc/openldap/certs
URI ldap://ldap.hostname.com/
BASE o=org
내용은 다음과 같습니다 /etc/nslcd.conf
.
uid nslcd
gid ldap
uri ldap://ldap.hostname.com/
base o=org
ssl start_tls
tls_cacertdir /etc/openldap/cacerts
tls_cacertfile /etc/openldap/cacerts/authconfig_downloaded.pem
오류 메시지를 검색했지만 온라인에서 찾은 다양한 LDAP 문서에 약간 압도당했습니다. 어떤 조언이라도 대단히 감사하겠습니다.
답변1
버전 6 이후 rhel 및 파생 제품의 경우 update-ca-trust(모든 세부 정보는 man 8 update-ca-trust)를 사용합니다. 에 많은 정보가 있습니다https://www.happyassassin.net/2015/01/14/trusting-additional-cas-in-fedora-rhel-centos-dont-append-to-etcpkitlscertsca-bundle-crt-or-etcpkitlscert-pem/
기본적으로 ca 파일을 /etc/pki/ca-trust/source/anchors/에 PEM 형식으로 넣고 루트 update-ca-trust로 실행합니다. 확장된 신뢰할 수 있는 인증서 형식인 경우 /etc/pki/ca-trust/source에 배치하고 다시 update-ca-trust에 배치해야 합니다.
o, Centos 6에서는 nslcd를 실행하는 것이 권장되지 않습니다. sssd는 무엇보다도 정보 캐싱 작업을 훨씬 더 잘 수행합니다.