Как заставить сервер openldap доверять самозаверяющему сертификату от клиента? - PullRequest
0 голосов
/ 31 октября 2018

Я использую JNDI для подключения к удаленному серверу OpenLDAP через ldaps с помощью следующего кода:

         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;
         }

Вот как я могу включить TLS в моем файле slapd.conf на сервере OpenLDAP:

# 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

На сервере доверенных сертификатов моего приложения уже был добавлен сертификат certificate.pem, поэтому, если для TLSVerifyClient было задано значение никогда, мое приложение может успешно подключиться к серверу LDAP. Проблема в том, что когда я устанавливаю TLSVerifyClient по требованию, сервер LDAP отклоняет соединение, потому что мое приложение использует самозаверяющий сертификат:

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

Может ли кто-нибудь подсказать мне, как заставить сервер OpenLDAP доверять самоподписанному сертификату моего приложения? Есть ли что-то похожее на «хранилище доверенных сертификатов» для сервера OpenLDAP? Заранее спасибо.

...