मेरे पास नीचे ElasticSearch कॉन्फ़िगरेशन है, जहाँ ES को CA और जारीकर्ता CA दोनों पर भरोसा करने के लिए कॉन्फ़िगर किया गया है। (LDAP1 क्षेत्र में प्रासंगिक जानकारी शामिल है।)
xpack:
security:
enabled: true
transport:
ssl:
enabled: true
verification_mode: certificate
keystore:
path: /etc/elasticsearch/security/elastic-certificates.p12
truststore:
path: /etc/elasticsearch/security/elastic-certificates.p12
http:
ssl:
enabled: true
verification_mode: certificate
certificate_authorities: ["/etc/elasticsearch/security/rootCA.pem", "/etc/elasticsearch/security/issuingCA.pem"]
certificate: "/etc/elasticsearch/security/elstcweb1.company.com.cer"
key: "/etc/elasticsearch/security/elstcweb1.company.com.key"
authc:
realms:
native:
type: native
order: 0
ldap1:
type: ldap
order: 1
url: "ldaps://ldapserver.company.com:636"
bind_dn: "user"
user_search:
base_dn: "redacted"
group_search:
base_dn: "redacted"
ssl:
certificate_authorities: ["/etc/elasticsearch/security/rootCA.cer", "/etc/elasticsearch/security/issuingCA.cer"]
हालाँकि, जब सेवा में प्रवेश करने का प्रयास कर रहा हूं, तो मुझे नीचे दिए गए LDAP अपवाद मिल रहे हैं।
[es-prod-1] Authentication to realm ldap1 failed - authenticate failed (Caused by LDAPException(resultCode=91 (connect error), errorMessage='An error occurred while attempting to connect to server ldapserver.company.com:636: java.io.IOException: LDAPException(resultCode=91 (connect error), errorMessage='Unable to verify an attempt to to establish a secure connection to 'ldapserver.company.com:636' because an unexpected error was encountered during validation processing: SSLPeerUnverifiedException(message='peer not authenticated', trace='getPeerCertificates(SSLSessionImpl.java:440)
मुझे शुरू में सूचित किया गया था कि रूट और जारी करने वाले CA प्रमाण पत्र वे थे जो LDAP सर्वर प्रमाणपत्र पर हस्ताक्षर करने के लिए उपयोग किए जाते थे। हालाँकि, समस्या निवारण का उपयोग करते समय openssl verify
, मुझे निम्न अपवाद प्राप्त हुए, जिसके कारण मुझे विश्वास हो गया कि ऐसा नहीं हो सकता है:
openssl verify -verbose -CAfile /etc/elasticsearch/security/[rootCA.cer,issuingCA.cer,combinedRootIssuingCA.cer] ldap.pem
ldap.pem: C = US, L = REDACTED, O = REDACTED, OU = DSS, CN = ldapserver.company.com, emailAddress = REDACTED
error 20 at 0 depth lookup:unable to get local issuer certificate
मैंने LDAP सर्वर का प्रमाणपत्र ( ldap.pem
उपरोक्त उदाहरण में) के माध्यम से प्राप्त किया openssl s_client
:
openssl s_client -connect ldapserver.company.com:636 2>/dev/null </dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ldap.pem
उपरोक्त को देखते हुए, क्या मेरा आकलन है कि LDAP सर्वर के प्रमाण पत्र पर मूल / हस्ताक्षरित CA द्वारा हस्ताक्षरित नहीं था? या s_client
विधि LDAP सर्वर का CA प्राप्त करने का उपयुक्त तरीका नहीं था ?
संपादित करें: मैन्युअल रूप से सम्मिलित पंक्ति विराम के साथ पूर्ण त्रुटि संदेश:
[2019-01-21T15:03:22,268][WARN ][o.e.x.s.a.AuthenticationService] [es-prod-1] Authentication to realm ldap1 failed - authenticate failed (Caused by LDAPException(resultCode=91 (connect error), errorMessage='An error occurred while attempting to connect to server ldapserver.company.com:636: java.io.IOException: LDAPException(resultCode=91 (connect error), errorMessage='Unable to verify an attempt to to establish a secure connection to 'ldapserver.company.com:636' because an unexpected error was encountered during validation processing: SSLPeerUnverifiedException(message='peer not authenticated', trace='getPeerCertificates(SSLSessionImpl.java:440)
verifySSLSocket(HostNameSSLSocketVerifier.java:113)
<init>(LDAPConnectionInternals.java:166) connect(LDAPConnection.java:860)
connect(LDAPConnection.java:760)
connect(LDAPConnection.java:710)
<init>(LDAPConnection.java:534)
getConnection(SingleServerSet.java:229)
getConnection(ServerSet.java:98)
getConnection(FailoverServerSet.java:545)
createConnection(LDAPConnectionPool.java:1205)
createConnection(LDAPConnectionPool.java:1178)
getConnection(LDAPConnectionPool.java:1706)
doPrivileged(AccessController.java:native)
privilegedConnect(LdapUtils.java:75)
searchForEntry(LdapUtils.java:258)
searchForEntry(LdapUtils.java:210)
findUser(LdapUserSearchSessionFactory.java:225)
getSessionWithPool(LdapUserSearchSessionFactory.java:78)
session(PoolingSessionFactory.java:101)
lambda$doAuthenticate$1(LdapRealm.java:125)
doRun(LdapRealm.java:283)
doRun(ThreadContext.java:723)
run(AbstractRunnable.java:37)
runWorker(ThreadPoolExecutor.java:1149)
run(ThreadPoolExecutor.java:624)
run(Thread.java:748)', revision=24201)')'))
/
वर्ण के साथ लॉग इंगित लाइन विराम । मैंने नीचे दिए गए लाइन-ब्रेक के साथ पूरा संदेश जोड़ा है।