2011-05-10 3 views
0

필자는 Start Tls를 사용하여 내 LDAP 서버에서 작동하는 데 어려움을 겪고 있습니다. 스프링 컨텍스트 파일에서 키 저장소와 암호를 구성했습니다. 내 구성은 SSL에서 작동하지만 Star Tls는 goosebumps를 일으 킵니다. StarTlsHandler를 LDAP 서버의 래퍼에 ExtendedOperationHandler로 추가했습니다. 다른 것을 구성해야합니까? 내가 SSL 또는 디버그를 사용할 때 내가 JDK 1.6.0_15StartTls, ApacheDS 문제

키 스토어와 비밀번호 하드 순간에 코딩을 사용하고

, 그들은 확인을 보인다.

구현을 테스트하기 위해 JLdap Client를 사용하고 있습니다.

다음은 Handler에 대해 추가 한 코드 단서입니다. ldapServer.setKeystoreFile ("C : /jdk/dgekey.ks"); ldapServer.setCertificatePassword ("secret"); 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] 공급자 = SUN 버전 1.6 2011-05-10 12 : 58 : 31,029 [rThread-4861-21] ERROR [org.apache.directory.server.core.security.CoreKeyStoreSpi] ERR_68 키 추출 시도에 실패했습니다. java.lang.IllegalStateException : ERR_436 프린시 펄에 사용되는 이름은 정규화되어야합니다! at org.apache.directory.server.core.LdapPrincipal. (LdapPrincipal.java:76) at org.apache.directory.server.core.security.CoreKeyStoreSpi.getTlsEntry (CoreKeyStoreSpi.java:84) at 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:112) 239) at org.apache.directory.server.ldap.handlers.extended.StartTlsHandler.setLdapServer (StartTlsHandler.java:170) at org.apa (LdapServer.java:446) at che..ldap.apap.LdapServerWrapper .afterPropertiesSet (LdapServerWrapper.java:103) org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.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.AbstractAutowireCapableBeanFactory.createBean (AbstractAutowireCapableBeanFactory.java:456에서 ) at org.springframework.beans.factory.support.AbstractBeanFactory $ 1.getObject (AbstractBeanFactory.java:291) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton (DefaultSingletonBeanRegistry.java:222) at org.springframework .beans.factory.support.AbstractBeanFactory.doGetBean (AbstractBeanFactory.java:288) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean (AbstractBeanFactory.java:190) at org.springframework.beans.factory.support .org.springframework.context.support.AbstractApplicationContext.refresh에서 org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization (AbstractApplicationContext.java:895) 에서 DefaultListableBeanFactory.preInstantiateSingletons (DefaultListableBeanFactory.java:574) (AbstractApplicationContext.java:425) org.springframework.web.context.ContextLoader.initWebApplicationContext에서 org.springframework.web.context.ContextLoader.createWebApplicationContext (ContextLoader.java:276) (ContextLoader.java:197) org.springframework.web.context에서 에서 . ContextLoaderListener.contextInitialized (ContextLoaderListener.java:47) at org.apache.catalina.core.StandardContext.listenerStart (StandardContext.java:4655) at org.apache.catalina.core.StandardContex t.start (StandardContext.java:5364) at com.sun.enterprise.web.WebModule.start (WebModule.java:345) at org.apache.catalina.core.ContainerBase.addChildInternal (ContainerBase.java:986) at org.apache.catalina.core.ContainerBase.addChild (ContainerBase.java:970) at org.apache.catalina.core.StandardHost.addChild (StandardHost.java:704) at 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) at com.sun.enterprise.server.WebModuleDeployEventListener.moduleDeployed (WebModuleDeployEventListener.java:278)com.sun.enterprise.admin.event.AdminEventMulticaster.handleModuleDeployEvent (AdminEventMulticaster.java:992)이 com.sun에서 에서 com.sun.enterprise.admin.event.AdminEventMulticaster.invokeModuleDeployEventListener (AdminEventMulticaster.java:1005) 에서 0. 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) at com.sun.enterprise.deployment.phasing.ServerDeploymentTarget.sendStartEvent (ServerDeploymentTarget.java:298) at com.sun.enterprise.deployment.phasing.ApplicationStartPhase.runPhase (ApplicationStartPhase.java:132) at com.sun.enterprise.deployment.phasing.DeploymentPhase.executePhase (DeploymentPhase.java:108) at 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에서 . sun.reflect에서 sun.reflect.NativeMethodAccessorImpl.invoke0 (기본 방법) 에서 PEDeploymentService.start com.sun.enterprise.admin.mbeans.ApplicationsConfigMBean.start (ApplicationsConfigMBean.java:773)에서 (PEDeploymentService.java:653) .NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:39)sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:25) com.sun.enterprise.admin.MBeanHelper.invokeOperationInBean에서 java.lang.reflect.Method.invoke (Method.java:597) 에서 (MBeanHelper에서. java : 390) com.sun.enterprise.admin.MBeanHelper.invokeOperationInBean (MBeanHelper.java:373) at com.sun.enterprise.admin.config.BaseConfigMBean.invoke (BaseConfigMBean.java:477) at com. sun.reflect.GeneratedMethodAccessor15.invoke에서 com.sun.jmx.mbeanserver.JmxMBeanServer.invoke (JmxMBeanServer.java:761) 에서 sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke (DefaultMBeanServerInterceptor.java:836) (알 소스) sun.reflect.DelegatingMethodAccessorImpl.(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) at com.sun.enterprise.admin.jmx.remote.server. com.sun.enterprise.admin.jmx.remote.server.servlet.RemoteJmxConnectorServlet.processRequest (RemoteJmxConnectorServlet.java:122)에서 MBeanServerRequestHandler.handle (MBeanServerRequestHandler.java:155) 01 com.sun.enterprise.admin.jmx.remote.server.servlet.RemoteJmxConnectorServlet.doPost (RemoteJmxConnectorServlet.java:193) javax.servlet.http.HttpServlet.service에서 (HttpServlet.java:754) javax의에서 에서 23,516,. servlet.http.HttpServlet.service (HttpServlet.java:847) at org.apache.catalina.core.ApplicationFilterChain.servletService (ApplicationFilterChain.java:427) at org.apache.catalina.core.StandardWrapperValve.invoke (StandardWrapperValve. java : 315) at org.apache.catalina.core.StandardContextValve.invokeInternal (StandardContextValve.java:287) at org.apache.catalina.core.StandardContextValve.invoke (StandardContextValve.java:218) at org.apache. 에서 catalina.core.StandardPipeline.doInvoke (StandardPipeline.java:648) 또는 g.apache.catalina.core.StandardPipeline.doInvoke (StandardPipeline.java:593) at com.sun.enterprise.web.WebPipeline.invoke (WebPipeline.java:94) at com.sun.enterprise.web.PESessionLockingStandardPipeline. 호출 (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) at org.apache.catalina.core.StandardPipeline.invoke (StandardPipeline.java:587) at org.apache.catalina.core.ContainerBase. 호출 (ContainerBase.java:1093) org.apache.catalina.core.StandardEngineValve.invoke에서 (StandardEngineValve.java:166) at org.apache.catalina.core.StandardPipeline.doInvoke (StandardPipeline.java:648) at org.apache.catalina.core.StandardPipeline.doInvoke (StandardPipeline.java:593) at org.apache.catalina.core. StandardPipeline.invoke (StandardPipeline.java:587) at org.apache.catalina.core.ContainerBase.invoke (ContainerBase.java:1093) at org.apache.coyote.tomcat5.CoyoteAdapter.service (CoyoteAdapter.java:291) com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.doProcess (DefaultProcessorTask.java:597) 에서 com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.invokeAdapter (DefaultProcessorTask.java:666) 에서 에서 com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.process (DefaultProcessorTask.java:872) (DefaultReadTask.java : 341) com.sun.enterprise.web.connector.grizzly.DefaultReadTask.executeProcessorTask .sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask (DefaultReadTask.java:214) com.sun.enterprise.web.connector.grizzly.TaskBase.run (TaskBase.java:264)에서 at com.sun .enterprise.web.connector.grizzly.WorkerThreadImpl.run (WorkerThreadImpl.java:117)

* 클라이언트 추적은 javax.net을 통해 이루어집니다.debug = all; *

키스트이다 : C : 키스트 유형 인/JDK/인 cacerts : 키스트 인 JKS : 초기화 스토어 형 SunX509 신뢰의 초기화 KeyManager가있다 : C : \ JDK \ cacerts에 신뢰 유형 인 : JKS 신뢰 공급 업체이다 : 초기화 신뢰 신뢰할 수있는 인증서로 추가 : 제목 : CN = SwissSign 플래티넘 CA - G2, O = SwissSign AG, C = CH 발급자 : CN = SwissSign 플래티넘 CA - G2, O = SwissSign AG를 , C = CH 알고리즘 : RSA; 일련 번호 : SecureRandom의 의 유효한 수요일 10월 25일 중부 유럽 표준시 10시 36분 0초 2006 년 토 10월 25일 중부 유럽 표준시 10시 36분 0초까지 2036

트리거 파종 SecureRandom를 파종 할 0x4eb200670c035d4f %% 없음 캐시 클라이언트 세션 * ClientHello, TLSv1 랜덤 쿠키 : 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} 세션 ID : {} 암호 군 : 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}


[WRITE] 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 ... 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 0 00 00 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 : C00 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 .. 메인, WRITE : SSLv2 클라이언트 안녕 메시지, 길이 = 98 메인, READ : TLSv1 경고, 길이 = 2 주, RECV TLSv1의 경고 : 치명적, handshake_failure 주요이라는 closesocket 함수() 주, 예외 처리 : javax.net.ssl.SSLHandshakeException : 수신 치명적인 경고 : handshake_failure 오류 : LDAP 예외 : 보안 연결을 협상 할 수 없습니다 (91) 연결 오류 javax.net.ssl.SSLHandshakeException : 치명적인 경고 수신 : 핸드 셰이크 _ 실패

답변

1

현재 TlsHandler는 uid = admin, ou = system 항목에서만 인증서를 읽을 수 있습니다. 인증서 및 키를 admin 항목 (uid = admin, ou = system)의 해당 속성 값으로 설정 한 후 시도 할 수 있습니다. 최신 트렁크에서이 문제를 해결하려고 노력할 것입니다.(버그 리포트를 제출할 수 있다면 감사합니다).

+0

@kayyagri 도움에 감사드립니다. 이 버그를보고 할 수있는 곳은 ApacheDs 사이트 http://directory.apache.org/apacheds/1.5/downloads.html 에 대한 링크를 찾지 못했습니다. 둘째, 마감 기한이 가까워 지므로이 문제를 어떻게 신속하게 해결할 수 있습니까? 며칠 시간 –

+0

uid = admin, ou = system 항목에는 privateKey, publicKey 및 certificate 속성이 있습니다. 기존 값을 가지고있는 키와 인증서로 대체합니다 (Apache Directory Studio를 사용하면 더 쉽게 사용할 수 있습니다). 여기에서 문제를보고 할 수 있습니다. [https://issues.apache.org/jira/browse/DIRSERVER] – kayyagari

+0

안녕하세요. 다시 @kayyagri와 답장을 보내 주셔서 감사합니다. ApacheDs 서버에있는 기본 인증서를 복사하고 그로부터 키 저장소를 생성했습니다. 인증서 및이 키 스토어의 경로를 내 ldap/spring 컨텍스트 파일에 제공합니다. 하지만 여전히 같은 오류가 발생합니다. 독립 실행 형 apacheD로 작업하는 인증서 및 키 저장소는 LDAP 구현을 통해 사용할 때 작동하지 않습니다. 내가 다른 것을 구성해야합니까? –