Hi Scott,

thanks for your help. The certificate is not signed commercially and I have
added the certificate to my JVM's cacerts file according to
http://www.ja-sig.org/wiki/display/CASUM/Demo

keytool -import -file server.crt -keypass changeit -keystore
..\jre\lib\security\cacerts

My ldap server is actually a Microsoft Active Directory (WIndows 2003
Server). It accepts connections on port 389 and 636 (tested with telnet).
But actually I'm not sure if ssl is really supported, so I tried connecting
to it without ssl but I got following exception:

2008-01-15 10:26:52,582 ERROR
[org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/cas].[cas]]
- <Servlet.service() for servlet cas threw exception>
javax.naming.AuthenticationException: [LDAP: error code 49 - 80090308:
LdapErr: DSID-0C090334, comment: AcceptSecurityContext error, data 525, vece

This is my configuration without the ssl option:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC  "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd";>
<beans>
        <bean id="authenticationManager"
                class="org.jasig.cas.authentication.AuthenticationManagerImpl">
                <property name="credentialsToPrincipalResolvers">
                        <list>
                                <bean
                                
class="org.jasig.cas.authentication.principal.UsernamePasswordCredentialsToPrincipalResolver"
/>
                                <bean
                                
class="org.jasig.cas.authentication.principal.HttpBasedServiceCredentialsToPrincipalResolver"
/>
                        </list>
                </property>
                <property name="authenticationHandlers">
                        <list>                          
                                <bean
                                
class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler">
                                        <property
                                                name="httpClient"
                                                ref="httpClient" />
                                </bean>                           
                 <bean
class="org.jasig.cas.adaptors.ldap.BindLdapAuthenticationHandler">
                                        <property name="filter" value="uid=%u" 
/>
                                        <property name="searchBase" 
value="cn=Users,dc=test,dc=net" />
                                        <property name="contextSource" 
ref="contextSource" />
                    <property name="ignorePartialResultException"
value="yes" /> 
                                </bean>
                        </list>
                </property>
        </bean>
<bean id="contextSource"
class="org.jasig.cas.adaptors.ldap.util.AuthenticatedLdapContextSource">
 <property name="password" value="{123}"/>
<property name="pooled" value="true" />
 <property name="urls">
  <list>
   <value>ldap://test.net:389/</value>
  </list>
 </property>
 <property name="userName" value="{cn=myuser,cn=Users,dc=test,dc=net}"/>
 <property name="baseEnvironmentProperties">
  <map> 
   <entry>
     <key>
      <value>java.naming.security.authentication</value>
     </key>
     <value>simple</value>
   </entry>
  </map>
 </property>
</bean>
</beans>


Thanks for your help,

Sarah




scott_battaglia wrote:
> 
> Sarah,
> 
> Is it a commercially signed certificate?  If not, make sure its in the
> JVM's
> cacerts file so that it can trust it.  Also, make sure your LDAP server is
> accepting SSL connections.
> 
> -Scott
> 
> On Jan 14, 2008 6:41 AM, Sara_Abasi <[EMAIL PROTECTED]> wrote:
> 
>>
>> Hi
>>  i`m newbie in LDAP with SLL.
>> My problem is, i connect in server LDAP from my web application and do
>> the
>> authentication by LDAP with SSL.
>> when i enter user name and password throws this exception:
>>
>> 2008-01-14 15:04:52,074 ERROR
>> [org.apache.catalina.core.ContainerBase
>> .[Catalina].[localhost].[/cas].[cas]]
>> - <Servlet.service() for servlet cas threw exception>
>> java.io.EOFException: SSL peer shut down incorrectly
>>        at com.sun.net.ssl.internal.ssl.InputRecord.read(InputRecord.java
>> :333)
>>        at
>> com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java
>> :723)
>>        at
>> com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(
>> SSLSocketImpl.java:1030)
>>        at
>> com.sun.net.ssl.internal.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java
>> :622)
>>        at
>> com.sun.net.ssl.internal.ssl.AppOutputStream.write(AppOutputStream.java
>> :59)
>>        at java.io.BufferedOutputStream.flushBuffer(
>> BufferedOutputStream.java:65)
>>        at java.io.BufferedOutputStream.flush(BufferedOutputStream.java
>> :123)
>>        at com.sun.jndi.ldap.Connection.writeRequest(Connection.java:390)
>>        at com.sun.jndi.ldap.LdapClient.ldapBind(LdapClient.java:334)
>>        at com.sun.jndi.ldap.LdapClient.authenticate(LdapClient.java:192)
>>        at com.sun.jndi.ldap.LdapCtx.connect(LdapCtx.java:2637)
>>        at com.sun.jndi.ldap.LdapCtx.<init>(LdapCtx.java:283)
>>        at
>> com.sun.jndi.ldap.LdapCtxFactory.getUsingURL(LdapCtxFactory.java
>> :175)
>>        at com.sun.jndi.ldap.LdapCtxFactory.getUsingURLs(
>> LdapCtxFactory.java:193)
>>        at
>> com.sun.jndi.ldap.LdapCtxFactory.getLdapCtxInstance(LdapCtxFactory.java
>> :136)
>>        at
>> com.sun.jndi.ldap.LdapCtxFactory.getInitialContext(LdapCtxFactory.java:66)
>>        at javax.naming.spi.NamingManager.getInitialContext(
>> NamingManager.java:667)
>>        at javax.naming.InitialContext.getDefaultInitCtx(
>> InitialContext.java:247)
>>        at javax.naming.InitialContext.init(InitialContext.java:223)
>>        at javax.naming.ldap.InitialLdapContext.<init>(
>> InitialLdapContext.java:134)
>>        at
>> org.springframework.ldap.support.LdapContextSource.getDirContextInstance(
>> LdapContextSource.java:59)
>>        at
>> org.springframework.ldap.support.AbstractContextSource.createContext(
>> AbstractContextSource.java:193)
>>        at
>> org.springframework.ldap.support.AbstractContextSource.getReadOnlyContext(
>> AbstractContextSource.java:104)
>>        at org.springframework.ldap.LdapTemplate.search(LdapTemplate.java
>> :263)
>>        at org.springframework.ldap.LdapTemplate.search(LdapTemplate.java
>> :314)
>>        at
>>
>> org.jasig.cas.adaptors.ldap.BindLdapAuthenticationHandler.authenticateUsernamePasswordInternal
>> (BindLdapAuthenticationHandler.java:70)
>>        at
>>
>> org.jasig.cas.authentication.handler.support.AbstractUsernamePasswordAuthenticationHandler.authenticate
>> (AbstractUsernamePasswordAuthenticationHandler.java:58)
>>        at
>> org.jasig.cas.authentication.AuthenticationManagerImpl.authenticate(
>> AuthenticationManagerImpl.java:79)
>>        at
>> org.jasig.cas.CentralAuthenticationServiceImpl.createTicketGrantingTicket(
>> CentralAuthenticationServiceImpl.java:282)
>>        at
>> org.jasig.cas.web.flow.AuthenticationViaFormAction.submit(
>> AuthenticationViaFormAction.java:116)
>>        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>        at
>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java
>> :39)
>>        at
>> sun.reflect.DelegatingMethodAccessorImpl.invoke(
>> DelegatingMethodAccessorImpl.java:25)
>>        at java.lang.reflect.Method.invoke(Method.java:585)
>>        at
>> org.springframework.webflow.util.DispatchMethodInvoker.invoke(
>> DispatchMethodInvoker.java:103)
>>        at
>> org.springframework.webflow.action.MultiAction.doExecute(MultiAction.java
>> :136)
>>        at
>> org.springframework.webflow.action.AbstractAction.execute(
>> AbstractAction.java:203)
>>        at
>> org.springframework.webflow.engine.AnnotatedAction.execute(
>> AnnotatedAction.java:142)
>>        at
>> org.springframework.webflow.engine.ActionExecutor.execute(
>> ActionExecutor.java:61)
>>        at
>> org.springframework.webflow.engine.ActionState.doEnter(ActionState.java
>> :180)
>>        at org.springframework.webflow.engine.State.enter(State.java:200)
>>        at
>> org.springframework.webflow.engine.Transition.execute(Transition.java:229)
>>        at
>> org.springframework.webflow.engine.TransitionableState.onEvent(
>> TransitionableState.java:112)
>>        at org.springframework.webflow.engine.Flow.onEvent(Flow.java:572)
>>        at
>>
>> org.springframework.webflow.engine.impl.RequestControlContextImpl.signalEvent
>> (RequestControlContextImpl.java:207)
>>        at
>> org.springframework.webflow.engine.ActionState.doEnter(ActionState.java
>> :185)
>>        at org.springframework.webflow.engine.State.enter(State.java:200)
>>        at
>> org.springframework.webflow.engine.Transition.execute(Transition.java:229)
>>        at
>> org.springframework.webflow.engine.TransitionableState.onEvent(
>> TransitionableState.java:112)
>>        at org.springframework.webflow.engine.Flow.onEvent(Flow.java:572)
>>        at
>>
>> org.springframework.webflow.engine.impl.RequestControlContextImpl.signalEvent
>> (RequestControlContextImpl.java:207)
>>        at
>> org.springframework.webflow.engine.impl.FlowExecutionImpl.signalEvent(
>> FlowExecutionImpl.java:214)
>>        at
>> org.springframework.webflow.executor.FlowExecutorImpl.resume(
>> FlowExecutorImpl.java:238)
>>        at
>>
>> org.springframework.webflow.executor.support.FlowRequestHandler.handleFlowRequest
>> (FlowRequestHandler.java:115)
>>        at
>>
>> org.springframework.webflow.executor.mvc.FlowController.handleRequestInternal
>> (FlowController.java:170)
>>        at
>> org.springframework.web.servlet.mvc.AbstractController.handleRequest(
>> AbstractController.java:153)
>>        at
>> org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(
>> SimpleControllerHandlerAdapter.java:48)
>>        at
>> org.springframework.web.servlet.DispatcherServlet.doDispatch(
>> DispatcherServlet.java:819)
>>        at
>> org.springframework.web.servlet.DispatcherServlet.doService(
>> DispatcherServlet.java:754)
>>        at
>> org.springframework.web.servlet.FrameworkServlet.processRequest(
>> FrameworkServlet.java:399)
>>        at
>> org.springframework.web.servlet.FrameworkServlet.doPost(
>> FrameworkServlet.java:364)
>>        at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
>>        at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
>>        at
>> org.jasig.cas.web.init.SafeDispatcherServlet.service(
>> SafeDispatcherServlet.java:115)
>>        at
>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(
>> ApplicationFilterChain.java:269)
>>        at
>> org.apache.catalina.core.ApplicationFilterChain.doFilter(
>> ApplicationFilterChain.java:188)
>>        at
>> org.apache.catalina.core.StandardWrapperValve.invoke(
>> StandardWrapperValve.java:210)
>>        at
>> org.apache.catalina.core.StandardContextValve.invoke(
>> StandardContextValve.java:174)
>>        at
>> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java
>> :127)
>>        at
>> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java
>> :117)
>>        at
>> org.apache.catalina.core.StandardEngineValve.invoke(
>> StandardEngineValve.java:108)
>>        at
>> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java
>> :151)
>>        at
>> org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:870)
>>        at
>>
>> org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection
>> (Http11BaseProtocol.java:665)
>>        at
>> org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(
>> PoolTcpEndpoint.java:528)
>>        at
>> org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(
>> LeaderFollowerWorkerThread.java:81)
>>        at
>> org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(
>> ThreadPool.java:685)
>>        at java.lang.Thread.run(Thread.java:595)
>>
>> this is  my deployConfigContext.xml
>>
>> <?xml version="1.0" encoding="UTF-8"?>
>> <!DOCTYPE beans PUBLIC  "-//SPRING//DTD BEAN//EN"
>> "http://www.springframework.org/dtd/spring-beans.dtd";>
>> <!--
>>        | deployerConfigContext.xml centralizes into one file some of the
>> declarative configuration that
>>        | all CAS deployers will need to modify.
>>        |
>>        | This file declares some of the Spring-managed JavaBeans that
>> make
>> up a
>> CAS deployment.
>>        | The beans declared in this file are instantiated at context
>> initialization time by the Spring
>>        | ContextLoaderListener declared in web.xml.  It finds this file
>> because
>> this
>>        | file is among those declared in the context parameter
>> "contextConfigLocation".
>>        |
>>        | By far the most common change you will need to make in this file
>> is to
>> change the last bean
>>        | declaration to replace the default
>> SimpleTestUsernamePasswordAuthenticationHandler with
>>        | one implementing your approach for authenticating usernames and
>> passwords.
>>        +-->
>> <beans>
>>
>>        <!--
>>                | This bean declares our AuthenticationManager.  The
>> CentralAuthenticationService service bean
>>                | declared in applicationContext.xml picks up this
>> AuthenticationManager
>> by reference to its id,
>>                | "authenticationManager".  Most deployers will be able to
>> use the default
>> AuthenticationManager
>>                | implementation and so do not need to change the class of
>> this bean.  We
>> include the whole
>>                | AuthenticationManager here in the
>> userConfigContext.xmlso that you can
>> see the things you will
>>                | need to change in context.
>>                +-->
>>        <bean id="authenticationManager"
>>                class="
>> org.jasig.cas.authentication.AuthenticationManagerImpl">
>>                <!--
>>                        | This is the List of
>> CredentialToPrincipalResolvers that identify what
>> Principal is trying to authenticate.
>>                        | The AuthenticationManagerImpl considers them in
>> order, finding a
>> CredentialToPrincipalResolver which
>>                        | supports the presented credentials.
>>                        |
>>                        | AuthenticationManagerImpl uses these resolvers
>> for two purposes.
>> First, it uses them to identify the Principal
>>                        | attempting to authenticate to CAS /login .  In
>> the default
>> configuration, it is the DefaultCredentialsToPrincipalResolver
>>                        | that fills this role.  If you are using some
>> other kind of credentials
>> than UsernamePasswordCredentials, you will need to replace
>>                        | DefaultCredentialsToPrincipalResolver with a
>> CredentialsToPrincipalResolver that supports the credentials you are
>>                        | using.
>>                        |
>>                        | Second, AuthenticationManagerImpl uses these
>> resolvers to identify a
>> service requesting a proxy granting ticket.
>>                        | In the default configuration, it is the
>> HttpBasedServiceCredentialsToPrincipalResolver that serves this purpose.
>>                        | You will need to change this list if you are
>> identifying services by
>> something more or other than their callback URL.
>>                        +-->
>>                <property name="credentialsToPrincipalResolvers">
>>                        <list>
>>                                <!--
>>                                        |
>> UsernamePasswordCredentialsToPrincipalResolver supports the
>> UsernamePasswordCredentials that we use for /login
>>                                        | by default and produces
>> SimplePrincipal instances conveying the
>> username from the credentials.
>>                                        |
>>                                        | If you've changed your
>> LoginFormAction to use credentials other than
>> UsernamePasswordCredentials then you will also
>>                                        | need to change this bean
>> declaration (or add additional declarations)
>> to declare a CredentialsToPrincipalResolver that supports the
>>                                        | Credentials you are using.
>>                                        +-->
>>                                <bean
>>
>> class="
>> org.jasig.cas.authentication.principal.UsernamePasswordCredentialsToPrincipalResolver
>> "
>> />
>>                                <!--
>>                                        |
>> HttpBasedServiceCredentialsToPrincipalResolver supports
>> HttpBasedCredentials.  It supports the CAS 2.0 approach of
>>                                        | authenticating services by SSL
>> callback, extracting the callback URL
>> from the Credentials and representing it as a
>>                                        | SimpleService identified by that
>> callback URL.
>>                                        |
>>                                        | If you are representing services
>> by something more or other than an
>> HTTPS URL whereat they are able to
>>                                        | receive a proxy callback, you
>> will need to change this bean
>> declaration (or add additional declarations).
>>                                        +-->
>>                                <bean
>>
>> class="
>> org.jasig.cas.authentication.principal.HttpBasedServiceCredentialsToPrincipalResolver
>> "
>> />
>>                        </list>
>>                </property>
>>
>>                <!--
>>                        | Whereas CredentialsToPrincipalResolvers identify
>> who it is some
>> Credentials might authenticate,
>>                        | AuthenticationHandlers actually authenticate
>> credentials.  Here we
>> declare the AuthenticationHandlers that
>>                        | authenticate the Principals that the
>> CredentialsToPrincipalResolvers
>> identified.  CAS will try these handlers in turn
>>                        | until it finds one that both supports the
>> Credentials presented and
>> succeeds in authenticating.
>>                        +-->
>>                <property name="authenticationHandlers">
>>                        <list>
>>                                <!--
>>                                        | This is the authentication
>> handler that authenticates services by
>> means of callback via SSL, thereby validating
>>                                        | a server side SSL certificate.
>>                                        +-->
>>                                <bean
>>
>> class="
>> org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler
>> ">
>>                                        <property
>>                                                name="httpClient"
>>                                                ref="httpClient" />
>>                                </bean>
>>
>>                                <!--
>>                                        | This is the authentication
>> handler declaration that every CAS
>> deployer will need to change before deploying CAS
>>                                        | into production.  The default
>> SimpleTestUsernamePasswordAuthenticationHandler authenticates
>> UsernamePasswordCredentials
>>                                        | where the username equals the
>> password.  You will need to replace
>> this with an AuthenticationHandler that implements your
>>                                        | local authentication strategy.
>>  You might accomplish this by coding a
>> new such handler and declaring
>>                                        |
>> edu.someschool.its.cas.MySpecialHandler here, or you might use one of
>> the handlers provided in the adaptors modules.
>>                                        +-->
>>
>>
>>                 <bean
>> class="org.jasig.cas.adaptors.ldap.BindLdapAuthenticationHandler">
>>                                        <property name="filter"
>> value="uid=%u" />
>>                                        <property name="searchBase"
>> value="cn=Users,dc=z,dc=z" />
>>                                        <property name="contextSource"
>> ref="contextSource" />
>>                    <property name="ignorePartialResultException"
>> value="yes" />
>>                                </bean>
>>                        </list>
>>                </property>
>>        </bean>
>> <bean id="contextSource"
>> class="org.jasig.cas.adaptors.ldap.util.AuthenticatedLdapContextSource">
>>  <property name="password" value="{11111}"/>
>> <property name="pooled" value="true" />
>>  <property name="urls">
>>  <list>
>>   <value>ldaps://irisad.net/</value>
>>  </list>
>>  </property>
>>  <property name="userName" value="{cn=aa,cn=Users,dc=z,dc=z}"/>
>>  <property name="baseEnvironmentProperties">
>>  <map>
>>        <entry>
>>                <key>
>>          <value>java.naming.security.protocol</value>
>>                </key>
>>                <value>ssl</value>
>>    </entry>
>>   <entry>
>>     <key>
>>      <value>java.naming.security.authentication</value>
>>     </key>
>>     <value>simple</value>
>>   </entry>
>>    <entry>
>>          <key>
>>            <value>java.naming.referral</value>
>>          </key>
>>          <value>follow</value>
>>     </entry>
>>  </map>
>>  </property>
>> </bean>
>> </beans>
>>
>> thanks.
>> --
>> View this message in context:
>> http://www.nabble.com/SSLHandshakeException-when-try-connect-LDAP-tp14799522p14799522.html
>> Sent from the CAS Users mailing list archive at Nabble.com.
>>
>> _______________________________________________
>> Yale CAS mailing list
>> [email protected]
>> http://tp.its.yale.edu/mailman/listinfo/cas
>>
> 
> 
> 
> -- 
> -Scott Battaglia
> 
> LinkedIn: http://www.linkedin.com/in/scottbattaglia
> 
> _______________________________________________
> Yale CAS mailing list
> [email protected]
> http://tp.its.yale.edu/mailman/listinfo/cas
> 
> 

-- 
View this message in context: 
http://www.nabble.com/SSLHandshakeException-when-try-connect-LDAP-tp14799522p14833046.html
Sent from the CAS Users mailing list archive at Nabble.com.

_______________________________________________
Yale CAS mailing list
[email protected]
http://tp.its.yale.edu/mailman/listinfo/cas

Reply via email to