Я изо всех сил пытался заставить Start Tls работать на моем ldap-сервере.Я настроил хранилище ключей и пароль в весеннем контекстном файле.Кажется, моя конфигурация работает для SSL, но Star Tls вызывает мурашки по коже.Я добавил StarTlsHandler в качестве ExtendedOperationHandler в оболочку моего сервера LDAP.Нужно ли настраивать что-нибудь еще?
Я использую JDK 1.6.0_15
В настоящий момент жестко запрограммированы хранилище ключей и пароль, они кажутся нормальными, когда я использую SSL или отладку.
Я использую JLdap Clientчтобы проверить мою реализацию.
Вот фрагмент кода, который я добавил для обработчика: ldapServer.setKeystoreFile ("C: /jdk/dgekey.ks");ldapServer.setCertificatePassword ( "секрет");ldapServer.addExtendedOperationHandler (new StartTlsHandler ());
Ниже вы можете увидеть трассировку стека на стороне сервера, трассировка клиента еще ниже:
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] provider = 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.irectserver.core.security.CoreKeyStoreSpi.engineGetKey (CoreKeyStoreSpi.java:231) в java.security.KeyStore.getKey (KeyStore.java:763) в com.sun.net.ssl.internal.ssl.SunX509KeyManagerImpl. SunX.: 113) в com.sun.net.ssl.internal.ssl.KeyManagerFactoryImpl $ SunX509.engineInit (KeyManagerFactoryImpl.java:48) в javax.net.ssl.KeyManagerFactory.init (KeyManagerFactory.java:239) в org.ap.directory.server.ldap.handlers.extended.StartTlsHandler.setLdapServer (StartTlsHandler.java:170) в org.apache.directory.server.ldap.LdapServer.startNetwork (LdapServer.java:542) в org.apache.directory.ldap.LdapServer.start (LdapServer.java:446) в com..ldap.apacheds.LdapServerWrapper.afterPropertiesSet (LdapServerWrapper.java:103) в org.springframework.beans.factory.support.AbapaAtobleBeanFactory.invokeInitMethods (AbstractAutowireCapableBeanFactory.java:1469) в org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean (AbstractAutowireCapableBeanFactory.java:1409) в org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean (AbstractAutowireCapableBeanFactory.java:519) в org.springframework.beans.factory.support.Bbbeans.factory.support.DefaultSingletonBeanRegistry.getSingleton (DefaultSingletonBeanRegistry.java:222) в org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean (AbstractBeanFactory.java:pr.getBean (AbstractBeanFactory.java:190) в org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons (DefaultListableBeanFactory.java:574) в org.springframework.context.support..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.invokeModuleDeployEventListener (AdminEventMulticaster.java:1005)
в com.sun.enterprise.admin.event.AdminEventMulticaster.handleModuleDeployEvent (AdminEventMulticaster.java:992)
на com.sun.enterprise.admin.event.AdminEventMulticaster.processEvent (AdminEventMulticaster.java:470)
на com.sun.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)
at sun.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод)
at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:39)
at 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.admin.MBeanHelper.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)
at sun.reflect.GeneratedMethodAccessor15.invoke (неизвестный источник)
at 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.server.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.StandardPipeline.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.DefaultReadTask.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)
* Трассировка клиента через javax.net.debug = все; *
хранилище ключей: C: / jdk / cacerts
Тип хранилища ключей: jks
Поставщик keyStore является:
хранилище ключей инициализации
init keymanager типа SunX509
trustStore - это: C: \ jdk \ cacerts
Тип доверенного хранилища: jks
Поставщик trustStore - это:
init truststore
добавив в качестве доверенного сертификата:
Тема: 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 CEST 2006 до субботы 25 октября 10:36:00 CEST 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}
Идентификатор сессии: {}Cipher Suites: [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 .........
основной, НАПИСАТЬ: TLSv1 Рукопожатие, длина = 73
[запись] 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, WRITE: приветственное сообщение клиента SSLv2, длина = 98
основной, ЧИТАЙТЕ: оповещение TLSv1, длина = 2
основной, RECV TLSv1 ALERT: смертельно, handshake_failure
main, называется closeSocket ()
main, исключение обработки: javax.net.ssl.SSLHandshakeException: получено фатальное предупреждение: handshake_failure
Ошибка: LDAPException: не удалось согласовать безопасное соединение (91) Ошибка подключения
javax.net.ssl.SSLHandshakeException: получено фатальное предупреждение: handshake_failure