Мы переводим наш LDAP на использование SSL. У меня есть приложение Spring Boot, которое будет использовать весна-загрузка-стартер-данные-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 ERROR 10936 --- [nio-9010-exec-1] o.a.c.c.C.[.[.[.[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [/ldapuser] threw exception [Request processing failed; nested exception is org.springframework.ldap.CommunicationException: abc.com:636; nested exception is javax.naming.CommunicationException: abc.com:636 [Root exception is java.net.SocketException: java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: Default, provider: SunJSSE, class: sun.security.ssl.SSLContextImpl$DefaultSSLContext)]] with root cause
java.io.IOException: Invalid keystore format 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(Native Method) ~[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] at java.lang.reflect.Constructor.newInstance(Constructor.java:423) ~[na:1.8.0_171] at 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] at javax.net.ssl.SSLContext.getInstance(SSLContext.java:156) ~[na:1.8.0_171] at javax.net.ssl.SSLContext.getDefault(SSLContext.java:96) ~[na:1.8.0_171] at javax.net.ssl.SSLSocketFactory.getDefault(SSLSocketFactory.java:122) ~[na:1.8.0_171] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[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] at com.sun.jndi.ldap.Connection.createSocket(Connection.java:284) ~[na:1.8.0_171] at com.sun.jndi.ldap.Connection.(Connection.java:203) ~[na:1.8.0_171] at com.sun.jndi.ldap.LdapClient.(LdapClient.java:137) ~[na:1.8.0_171] at com.sun.jndi.ldap.LdapClient.getInstance(LdapClient.java:1615) ~[na:1.8.0_171] at com.sun.jndi.ldap.LdapCtx.connect(LdapCtx.java:2749) ~[na:1.8.0_171] at 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] at com.sun.jndi.ldap.LdapCtxFactory.getInitialContext(LdapCtxFactory.java:83) ~[na:1.8.0_171] at 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]
Я действительно не думаю, что дело в сертификате, так как он мне был выдан компанией, и он работает для других. Не уверен, что я что-то не так делаю с конфигурацией.
Спасибо,
Я делал это несколько раз, но безуспешно.
ты можешь попробовать это? keytool -list -v -keystore keystore.jks
Он запросил у меня пароль, но я не уверен, что он такой же, как тот, который я здесь поместил: contextSource.setPassword (password);
просто нажмите Enter после того, как он запросит пароль.
Когда я выполняю эту команду, я вижу много вещей. Ищу ли я что-то конкретное?




может файл как-то испортился? вы можете скачать его снова и использовать?