Spring LDAP - java.io.IOException: неверный формат хранилища ключей - PullRequest
0 голосов
/ 02 ноября 2018

Мы перемещаем наш LDAP для использования SSL. У меня есть приложение Spring Boot, которое будет использовать spring-boot-starter-data-ldap и unboundid-ldapsdk .

Вот так я настраиваю свой контекст LDAP

@Bean
public LdapContextSource contextSource() {
    LOGGER.info("Loading LDAP Context");
    LdapContextSource contextSource = new LdapContextSource();

    contextSource.setUrl(url);
    contextSource.setBase(base);
    contextSource.setUserDn(username);
    contextSource.setPassword(password);
    contextSource.setPooled(true);

    System.setProperty("com.sun.jndi.ldap.connect.pool", "true");
    System.setProperty("com.sun.jndi.ldap.connect.pool.maxsize", "300");
    System.setProperty("com.sun.jndi.ldap.connect.pool.timeout", "300000");
    contextSource.afterPropertiesSet();
    return contextSource;
}

LdapTemplate

@Bean
public LdapTemplate ldapTemplate() {
    return new LdapTemplate(contextSource());
}

Я устанавливаю сертификат таким образом

ClassLoader classLoader = getClass().getClassLoader();

    System.setProperty("javax.net.ssl.trustStore", new File(classLoader.getResource("certificates/prod.jks").getFile()).getAbsolutePath());

Приложение запускается нормально, но когда я запрашиваю что-то в LDAP, например

        Filter filter = new EqualsFilter(filterAttr, request.getIdValue());

    LdapQuery query = query().searchScope(SearchScope.SUBTREE)
            .attributes(PROFILE_ATTRS).filter(filter);

    List<LDAPInfoResponse> response = ldapTemplate.search(query, new LDAPInfoResponseAttributesMapper());

Я получаю следующую ошибку

2018-11-02 11: 00: 06.640 ОШИБКА 10936 --- [nio-9010-exec-1] oaccC [. [. [. [DispatcherServlet]: Servlet.service () для сервлета [dispatcherServlet] в контексте с путем [/ ldapuser] выдало исключение [Ошибка обработки запроса; вложенным исключением является org.springframework.ldap.CommunicationException: abc.com:636; вложенное исключение - javax.naming.CommunicationException: abc.com:636 [Исключение корня - java.net.SocketException: java.security.NoSuchAlgorithmException: ошибка при построении реализации (алгоритм: по умолчанию, поставщик: SunJSSE, класс: sun.security.ssl. SSLContextImpl $ DefaultSSLContext)]] с основной причиной

java.io.IOException: неверный формат хранилища ключей at sun.security.provider.JavaKeyStore.engineLoad (JavaKeyStore.java:658) ~ [na: 1.8.0_171] at sun.security.provider.JavaKeyStore $ JKS.engineLoad (JavaKeyStore.java:56) ~ [na: 1.8.0_171] at sun.security.provider.KeyStoreDelegator.engineLoad (KeyStoreDelegator.java:224) ~ [na: 1.8.0_171] at sun.security.provider.JavaKeyStore $ DualFormatJKS.engineLoad (JavaKeyStore.java:70) ~ [na: 1.8.0_171] at java.security.KeyStore.load (KeyStore.java:1445) ~ [na: 1.8.0_171] at sun.security.ssl.TrustManagerFactoryImpl.getCacertsKeyStore (TrustManagerFactoryImpl.java:226) ~ [na: 1.8.0_171] at sun.security.ssl.SSLContextImpl $ DefaultManagersHolder.getTrustManagers (SSLContextImpl.java:771) ~ [na: 1.8.0_171] at sun.security.ssl.SSLContextImpl $ DefaultManagersHolder. (SSLContextImpl.java:748) ~ [na: 1.8.0_171] at sun.security.ssl.SSLContextImpl $ DefaultSSLContext. (SSLContextImpl.java:913) ~ [na: 1.8.0_171] at sun.reflect.NativeConstructorAccessorImpl.newInstance0 (собственный метод) ~ [na: 1.8.0_171] at sun.reflect.NativeConstructorAccessorImpl.newInstance (NativeConstructorAccessorImpl.java:62) ~ [na: 1.8.0_171] at sun.reflect.DelegatingConstructorAccessorImpl.newInstance (DelegatingConstructorAccessorImpl.java:45) ~ [na: 1.8.0_171] в java.lang.reflect.Constructor.newInstance (Constructor.java:423) ~ [na: 1.8.0_171] в java.security.Provider $ Service.newInstance (Provider.java:1595) ~ [na: 1.8.0_171] at sun.security.jca.GetInstance.getInstance (GetInstance.java:236) ~ [na: 1.8.0_171] at sun.security.jca.GetInstance.getInstance (GetInstance.java:164) ~ [na: 1.8.0_171] в javax.net.ssl.SSLContext.getInstance (SSLContext.java:156) ~ [na: 1.8.0_171] в javax.net.ssl.SSLContext.getDefault (SSLContext.java:96) ~ [na: 1.8.0_171] в javax.net.ssl.SSLSocketFactory.getDefault (SSLSocketFactory.java:122) ~ [na: 1.8.0_171] at sun.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод) ~ [na: 1.8.0_171] at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62) ~ [na: 1.8.0_171] at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) ~ [na: 1.8.0_171] at java.lang.reflect.Method.invoke (Method.java:498) ~ [na: 1.8.0_171] в com.sun.jndi.ldap.Connection.createSocket (Connection.java:284) ~ [na: 1.8.0_171] на com.sun.jndi.ldap.Connection. (Connection.java:203) ~ [na: 1.8.0_171] в com.sun.jndi.ldap.LdapClient. (LdapClient.java:137) ~ [na: 1.8.0_171] в com.sun.jndi.ldap.LdapClient.getInstance (LdapClient.java:1615) ~ [na: 1.8.0_171] на com.sun.jndi.ldap.LdapCtx.connect (LdapCtx.java:2749) ~ [na: 1.8.0_171] на com.sun.jndi.ldap.LdapCtx. (LdapCtx.java:319) ~ [na: 1.8.0_171] at com.sun.jndi.ldap.LdapCtxFactory.getUsingURL (LdapCtxFactory.java:192) ~ [na: 1.8.0_171]at com.sun.jndi.ldap.LdapCtxFactory.getUsingURLs (LdapCtxFactory.java:210) ~ [na: 1.8.0_171] at com.sun.jndi.ldap.LdapCtxFactory.getLdapCtxInstance (LdapCtxFactory.java:153) ~ [na: 1.8.0_171] в com.sun.jndi.ldap.LdapCtxFactory.getInitialContext (LdapCtxFactory.java:83) ~ [na: 1.8.0_171] в javax.naming.spi.NamingManager.getInitialContext (NamingManager.java:684) ~ [na: 1.8.0_171] at javax.naming.InitialContext.getDefaultInitCtx (InitialContext.java:313) ~ [na: 1.8.0_171]

Я не думаю, что речь идет о сертификате, так как он был выдан компанией, и он работает для других. Не уверен, что я что-то не так с конфигурацией.

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...