StartTls, проблема с ApacheDS

Я изо всех сил пытался заставить Start Tls работать на моем сервере ldap. Я настроил хранилище ключей и пароль в файле контекста spring. Моя конфигурация, кажется, работает для SSL, но Star Tls вызывает мурашки по коже. Я добавил StarTlsHandler в качестве ExtendedOperationHandler в оболочку моего сервера LDAP. Нужно ли мне настраивать что-то еще.

Я использую JDK 1.6.0_15.

Хранилище ключей и пароль на данный момент жестко закодированы, они кажутся нормальными, когда я использую SSL или отлаживаю.

Я использую клиент JLdap для проверки своей реализации.

Вот фрагмент кода, который я добавил для обработчика: ldapServer.setKeystoreFile("C:/jdk/dgekey.ks"); ldapServer.setCertificatePassword("секрет"); ldapServer.addExtendedOperationHandler (новый StartTlsHandler());

Ниже вы можете увидеть трассировку стека на стороне сервера, трассировка клиента находится ниже:

****Клиентская трассировка через javax.net.debug=all;****

keyStore: C:/jdk/cacerts Тип keyStore: jks Поставщик keyStore: init keystore init keymanager типа SunX509 trustStore: C:\jdk\cacerts trustStore Тип: jks trustStore Поставщик: init добавление хранилища доверенных сертификатов в качестве доверенного: Тема: CN=SwissSign Platinum CA - G2, O=SwissSign AG, C=CH Эмитент: CN=SwissSign Platinum CA - G2, O=SwissSign AG, C=CH Алгоритм: RSA; Серийный номер: 0x4eb200670c035d4f Действителен со среды, 25 октября, 10:36:00 по центральноевропейскому летнему времени 2006 г., до субботы, 25 октября, 10:36:00 по центральноевропейскому летнему времени 2036 г.

запустить заполнение SecureRandom выполнено заполнение SecureRandom %% Нет кэшированного сеанса клиента *** ClientHello, TLSv1 RandomCookie: GMT: 1288255192 байт = { 100, 146, 27, 29, 47, 10, 97, 247, 253, 145, 49, 147 , 239, 157, 90, 4, 34, 15, 99, 243, 191, 156, 251, 25, 64, 42, 210, 231} Идентификатор сеанса: {} шифров: [SSL_RSA_WITH_RC4_128_MD5, SSL_RSA_WITH_RC4_128_SHA, TLS_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_DSS_WITH_AES_128_CBC_SHA, SSL_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA, SSL_RSA_WITH_DES_CBC_SHA, SSL_DHE_RSA_WITH_DES_CBC_SHA, SSL_DHE_DSS_WITH_DES_CBC_SHA, SSL_RSA_EXPORT_WITH_RC4_40_MD5, SSL_RSA_EXPORT_WITH_DES40_CBC_SHA, SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA, SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA] Методы сжатия: {0}

[записать] Хэши MD5 и SHA1: len = 73 0000:01 00 00 45 03 01 4D C9 37 D8 64 92 1B 1D 2F 0A ...E..M.7.d.../. 0010: 61 F7 FD 91 31 93 EF 9D 5A 04 22 0F 63 F3 BF 9C a...1...Z.".c... 0020: FB 19 40 2A D2 E7 00 00 1E 00 04 00 05 00 2F 00 ..@........../.0030: 33 00 32 00 0A 00 16 00 13 00 09 00 15 00 12 00 3.2........... .. 0040: 03 00 08 00 14 00 11 01 00 ......... main, WRITE: TLSv1 Handshake, length = 73 [write] Хэши MD5 и SHA1: len = 98 0000: 01 03 01 00 39 00 00 00 20 00 00 04 01 00 80 00 ....9... ....... 0010: 00 05 00 00 2F 00 00 33 00 00 32 00 00 0A 07 00 ..../. .3..2..... 0020: C0 00 00 16 00 00 13 00 00 09 06 00 40 00 00 15 ............@... 0030: 00 00 12 00 00 03 02 00 80 00 00 08 00 00 14 00 ................ 0040:00 11 4D C9 37 D8 64 92 1B 1D 2F 0A 61 F7 FD 91 ..M. 7.d.../.a... 0050: 31 93 EF 9D 5A 04 22 0F 63 F3 BF 9C FB 19 40 2A 1...Z.".c.....@ 0060 : D2 E7 .. main, ЗАПИСАТЬ: Приветственное сообщение клиента SSLv2, длина = 98 main, ЧТЕНИЕ: Предупреждение TLSv1, длина = 2 main, RECV TLSv1 ALERT: фатальный , handshake_failure main, называется closeSocket() main, обрабатывает исключение: javax.net.ssl.SSLHandshakeException: получено фатальное предупреждение: handshake_failure Ошибка: LDAPException: не удалось согласовать безопасное соединение (91) Ошибка подключения javax.net.ssl.SSLHandshakeException: получено фатальное предупреждение: handshake_failure


В настоящее время TlsHandler может только прочитать сертификат из записи uid=admin,ou=system. Можете ли вы попробовать после установки сертификата и ключей в соответствующие значения атрибутов записи администратора (uid=admin,ou=system). Я постараюсь исправить это в последнем транке. (Спасибо, если вы можете подать отчет об ошибке).


person NODE.NODE    schedule 10.05.2011    source источник


Ответы (1)


@kayyagri Спасибо за помощь. Где я могу сообщить об этой ошибке, я не нашел ни одной ссылки на ApacheDs sitr directory.apache .org/apacheds/1.5/downloads.html Во-вторых, как я могу быстро решить эту проблему, так как у меня есть крайний срок, приближающийся через несколько дней

person kayyagari    schedule 10.05.2011
comment
Запись uid=admin,ou=system имеет атрибуты privateKey, publicKey и сертификат, заменяющие существующие значения ключами и сертификатом, которые у вас есть (вы можете использовать Apache Directory Studio, чтобы сделать это проще). Вы можете сообщить о проблеме здесь [issues.apache.org/jira/browse/DIRSERVER] - person NODE.NODE; 11.05.2011
comment
Еще раз привет @kayyagri и спасибо за ответ, я скопировал сертификат по умолчанию, присутствующий на сервере ApacheDs, создал хранилище ключей из этого сертификата и указал путь к этому хранилищу ключей в мой файл контекста ldap/spring. Но все же я получаю ту же ошибку. Сертификат и хранилище ключей, которые работают с автономными apacheD, не работают, когда я использую их через свою реализацию ldap. Должен ли я настроить что-то еще. - person kayyagari; 11.05.2011
comment
2011-05-10 12:51:29,345 [rThread-4861-21] DEBUG [org.apache.directory.server.ldap.handlers.extended.StartTlsHandler] Настройка службы LDAP 2011-05-10 12:51:29,345 [rThread -4861-21] DEBUG [org.apache.directory.server.ldap.handlers.extended.StartTlsHandler] поставщик = версия SUN 1.6 2011-05-10 12:58:31,029 [rThread-4861-21] ОШИБКА [org.apache .directory.server.core.security.CoreKeyStoreSpi] ERR_68 Ошибка при попытке извлечь ключ. java.lang.IllegalStateException: ERR_436 Имена, используемые для принципалов, должны быть нормализованы! в org.apache.directory.server.core.LdapPrincipal.(LdapPrincipal.java:76) в org.apache.directory.server.core.security.CoreKeyStoreSpi.getTlsEntry(CoreKeyStoreSpi.java:84) в org.apache.directory. server.core.security.CoreKeyStoreSpi.engineGetKey(CoreKeyStoreSpi.java:231) в java.security.KeyStore.getKey(KeyStore.java:763) в com.sun.net.ssl.internal.ssl.SunX509KeyManagerImpl.(SunX509KeyManagerImpl.java :113) в com.sun.net.ssl.internal.ssl.KeyManagerFactoryImpl$SunX509.engineInit(KeyManagerFactoryImpl.java:48) в javax.net.ssl.KeyManagerFactory.init(KeyManagerFactory.java:239) в org.apache. directory.server.ldap.handlers.extended.StartTlsHandler.setLdapServer(StartTlsHandler.java:170) в org.apache.directory.server.ldap.LdapServer.startNetwork(LdapServer.java:542) в org.apache.directory.server. ldap.LdapServer.start(LdapServer.java:446) в com..ldap.apacheds.LdapServerWrapper.afterPropertiesSet(LdapServerWrapper.java:103) в org.springframewor k.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1469) в org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1409) в org.springframework..beans.factory AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) в org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) в org.springframework.beans.factory.support.AbstractBeanFactory$1.getObjectAb :291) в org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) в org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288) в org.springframework. бобы.фабрика.поддержка. AbstractBeanFactory.getBean(AbstractBeanFactory.java:190) на org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:574) на org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:899) в org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:425) в org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:276) в org.springframework.web.context.ContextLoader.initWebApplicationContext (ContextLoader.java:197) в org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:47) в org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4655) в org.apache. catalina.core.StandardContext.start(StandardContext.java:5364) в com.sun.enterprise.web.WebModule.start(WebModule.java: 345) по адресу org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:986) по адресу org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:970) по адресу org.apache.catalina.core.StandardHost .addChild(StandardHost.java:704) в com.sun.enterprise.web.WebContainer.loadWebModule(WebContainer.java:1649) в com.sun.enterprise.web.WebContainer.loadWebModule(WebContainer.java:1254) в com. sun.enterprise.server.WebModuleDeployEventListener.moduleDeployed(WebModuleDeployEventListener.java:182) в com.sun.enterprise.server.WebModuleDeployEventListener.moduleDeployed(WebModuleDeployEventListener.java:278) в com.sun.enterprise.admin.event.AdminEventMulticaster(invokeListuleDeployed AdminEventMulticaster.java:1005) на com.sun.enterprise.admin.event.AdminEventMulticaster.handleModuleDeployEvent(AdminEventMulticaster.java:992) на com.sun.enterprise.admin.event.AdminEventMulticaster.processEvent(AdminEventMulticaster.java:470) на com .s un.enterprise.admin.event.AdminEventMulticaster.multicastEvent(AdminEventMulticaster.java:182) на com.sun.enterprise.admin.server.core.DeploymentNotificationHelper.multicastEvent(DeploymentNotificationHelper.java:308) на com.sun.enterprise.deployment. phasing.DeploymentServiceUtils.multicastEvent(DeploymentServiceUtils.java:231) на com.sun.enterprise.deployment.phasing.ServerDeploymentTarget.sendStartEvent(ServerDeploymentTarget.java:298) на com.sun.enterprise.deployment.phasing. ApplicationStartPhase.runPhase(ApplicationStartPhase.java:132) по адресу com.sun.enterprise.deployment.phasing.DeploymentPhase.executePhase(DeploymentPhase.java:108) по адресу com.sun.enterprise.deployment.phasing.PEDeploymentService.executePhases(PEDeploymentService.java: 966) по адресу com.sun.enterprise.deployment.phasing.PEDeploymentService.start(PEDeploymentService.java:609) по адресу com.sun.enterprise.deployment.phasing.PEDeploymentService.start(PEDeploymentService.java:653) по адресу com.sun.enterprise .admin.mbeans.ApplicationsConfigMBean.start(ApplicationsConfigMBean.java:773) в sun.reflect.NativeMethodAccessorImpl.invoke0(собственный метод) в sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) в sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:25) на java.lang.reflect.Method.invoke(Method.java:597) на com.sun.enterprise.admin.MBeanHelper.invokeOperationInBean(MBeanHelper.java:390) на com.sun.enterprise. админ.МБ eanHelper.invokeOperationInBean(MBeanHelper.java:373) в com.sun.enterprise.admin.config.BaseConfigMBean.invoke(BaseConfigMBean.java:477) в com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:836) на com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:761) на sun.reflect.GeneratedMethodAccessor15.invoke(неизвестный источник) на sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) на java.lang .reflect.Method.invoke(Method.java:597) в com.sun.enterprise.admin.util.proxy.ProxyClass.invoke(ProxyClass.java:90) в $Proxy1.invoke(неизвестный источник) в com.sun. enterprise.admin.server.core.jmx.SunoneInterceptor.invoke(SunoneInterceptor.java:304) на com.sun.enterprise.interceptor.DynamicInterceptor.invoke(DynamicInterceptor.java:170) на com.sun.enterprise.admin.jmx. remote.server.callers.InvokeCaller.call(InvokeCaller.java:69) на com.sun.enterprise.admin.jmx.remote.s erver.MBeanServerRequestHandler.handle(MBeanServerRequestHandler.java:155) на com.sun.enterprise.admin.jmx.remote.server.servlet.RemoteJmxConnectorServlet.processRequest(RemoteJmxConnectorServlet.java:122) на com.sun.enterprise.admin.jmx. remote.server.servlet.RemoteJmxConnectorServlet.doPost(RemoteJmxConnectorServlet.java:193) в javax.servlet.http.HttpServlet.service(HttpServlet.java:754) в javax.servlet.http.HttpServlet.service(HttpServlet.java:847) на org.apache.catalina.core. ApplicationFilterChain.servletService(ApplicationFilterChain.java:427) в org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:315) в org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:287) в org .apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:218) в org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:648) в org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline .java:593) в com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:94) в com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:98) в org.apache.catalina. core.StandardHostValve.invoke(StandardHostValve.java:222) в org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:648) в org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:593) на org.apache.catalina.core.StandardP ipeline.invoke(StandardPipeline.java:587) в org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1093) в org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:166) в org. .apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:648) в org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:593) в org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline .java:587) по адресу org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1093) по адресу org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:291) по адресу com.sun.enterprise. web.connector.grizzly.DefaultProcessorTask.invokeAdapter(DefaultProcessorTask.java:666) на com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.doProcess(DefaultProcessorTask.java:597) на com.sun.enterprise.web.connector. grizzly.DefaultProcessorTask.process(DefaultProcessorTask.java:872) на com.sun.enterprise.web.connector.grizzly.D efaultReadTask.executeProcessorTask(DefaultReadTask.java:341) в com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:263) в com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask( DefaultReadTask.java:214) по адресу com.sun.enterprise.web.connector.grizzly.TaskBase.run(TaskBase.java:264) по адресу com.sun.enterprise.web.connector.grizzly.WorkerThreadImpl.run(WorkerThreadImpl.java: 117) - person NODE.NODE; 12.05.2011