How to enable OpenLDAP server trust a self-signed certificate from a client?

I am using JNDI to connect to a remote OpenLDAP server via ldaps by the following code:

         Hashtable env = new Hashtable();
         env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
         env.put(Context.SECURITY_AUTHENTICATION, connectionType);
         env.put(Context.PROVIDER_URL, ldapUrl);
         env.put(Context.SECURITY_PRINCIPAL, userDn);
         env.put(Context.SECURITY_CREDENTIALS, password);
         String truststorePath = "C:\\Software\\OpenSSL-Win64\\CertificateEntityMatching\\truststore.ks";
         String keystorePath = "C:\\Software\\OpenSSL-Win64\\CertificateEntityMatching\\keystore.ks";
         String keyStorePassword = "123456789";
         System.setProperty("javax.net.ssl.trustStore", truststorePath);
         System.setProperty("javax.net.ssl.keyStore", keystorePath);
         System.setProperty("javax.net.ssl.keyStorePassword", keyStorePassword);
         try {
             InitialLdapContext ldap = new InitialLdapContext(env, null);
             System.out.println("Connect to LDAP successfully.");
             return ldap;
         } catch (AuthenticationException e) {
             e.printStackTrace();
             return null;
         } catch (NamingException e) {
             e.printStackTrace();
             return null;
         }

Here is how I enable TLS in my slapd.conf file on the OpenLDAP server:

# Enable TLS
TLSCipherSuite HIGH:MEDIUM:-SSLv2:-SSLv3
TLSVerifyClient demand
TLSCertificateFile /usr/local/etc/openldap/tls/certificate.pem
TLSCertificateKeyFile /usr/local/etc/openldap/tls/key.pem

The server's certificate.pem has alreay been added to the truststore of my application, so if TLSVerifyClient was set to never, my applicaiton can connect to LDAP server successfully. The problem is when I set TLSVerifyClient to demand, LDAP server rejects the connection because my applicaton uses a self-signed certificate:

TLS trace: SSL3 alert write:fatal:unknown CA
TLS trace: SSL_accept:error in error
TLS: can't accept: error:1417C086:SSL routines:tls_process_client_certificate:certificate verify failed (self signed certificate).
5bd922de connection_read(16): TLS accept failure error=-1 id=1001, closing

Could anyone guide me how to make OpenLDAP server trust the self-signed certificate of my application? Is there something similar to "truststore" for OpenLDAP server? Thanks in advance.

0
задан 31 October 2018 в 23:50
1 ответ

slapd.conf (5)

TLSCACertificateFile Задает файл, содержащий сертификаты для всех центров сертификации, которые распознает slapd. Сертификат ЦС, подписавший сертификат сервера, должен быть включен в эти сертификаты.
Если подписывающий ЦС не является ЦС верхнего уровня (корневым), должны присутствовать сертификаты для всей последовательности ЦС от подписывающего ЦС до ЦС верхнего уровня. К файлу просто добавляются несколько сертификатов; приказ не имеет значения.

TLSCACertificatePath Задает путь к каталогу, который содержит сертификаты центра сертификации в отдельных отдельных файлах. Обычно используется только один из них или TLSCACertificateFile. Эта директива не поддерживается при использовании GnuTLS.
При использовании Mozilla NSS может содержать базу данных сертификатов / ключей Mozilla NSS. Если он содержит базу данных сертификатов / ключей Mozilla NSS и файлы сертификатов CA, OpenLDAP будет использовать базу данных сертификатов / ключей и игнорировать сертификат CA файлы.

0
ответ дан 5 December 2019 в 05:09

Теги

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