[ 
https://issues.apache.org/jira/browse/CAMEL-10628?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Andrea Cosentino updated CAMEL-10628:
-------------------------------------
    Affects Version/s:     (was: 2.17.0)
                       2.18.0
                       2.18.1

> camel jetty9 endpoint configured with sslContextParametersRef and jetty 
> handlers causes SSL handshake failure
> -------------------------------------------------------------------------------------------------------------
>
>                 Key: CAMEL-10628
>                 URL: https://issues.apache.org/jira/browse/CAMEL-10628
>             Project: Camel
>          Issue Type: Bug
>          Components: camel-jetty
>    Affects Versions: 2.18.0, 2.18.1
>            Reporter: Joe Luo
>            Assignee: Andrea Cosentino
>             Fix For: 2.18.2
>
>         Attachments: patch.txt
>
>
> I have a camel route using Rest DSL with Jetty component:
> {code}
> <camelContext id="camel" trace="true" streamCache="true" 
> xmlns="http://camel.apache.org/schema/blueprint";>
>       <restConfiguration component="jetty" bindingMode="off" scheme="https" 
> host="localhost" port="9080" contextPath="/">
>         <endpointProperty key="sslContextParametersRef" 
> value="sslContextParameter"/>
>         <endpointProperty key="handlers" value="#securityHandler"/>
>         <endpointProperty key="matchOnUriPrefix" value="true"/>
>       </restConfiguration>
>       <rest path="/customerservice">
>           <get uri="/customers" >
>               <to uri="direct:processGet"/>
>           </get>
>           <get uri="/customers/{id}" >
>               <to uri="direct:processGet"/>
>           </get>
>           <post uri="/customers" consumes="application/json" 
> produces="application/json">
>               <to uri="direct:processPost"/>
>           </post>
>       </rest>
> {code}
> The underlying camel jetty component is configured with 
> sslContextParametersRef and a Jetty Handler 
> org.eclipse.jetty.security.ConstraintSecurityHandler to enforce 
> SecurityConstraints on the Jetty endpoint. 
> If I remove the Jetty ConstraintSecurityHandler, it works fine, for instance:
> {code}
> <camelContext id="camel" trace="true" streamCache="true" 
> xmlns="http://camel.apache.org/schema/blueprint";>
>       <restConfiguration component="jetty" bindingMode="off" scheme="https" 
> host="localhost" port="9080" contextPath="/">
>         <endpointProperty key="sslContextParametersRef" 
> value="sslContextParameter"/>
>         <!--endpointProperty key="handlers" value="#securityHandler"/-->
>         <endpointProperty key="matchOnUriPrefix" value="true"/>
>       </restConfiguration>
> {code}
> But when I add the Jetty ConstraintSecurityHandler back to the camel Rest 
> DSL, I am getting following error:
> {code}
> ***
> %% Initialized:  [Session-1, SSL_NULL_WITH_NULL_NULL]
> qtp1424237190-118, fatal error: 40: no cipher suites in common
> javax.net.ssl.SSLHandshakeException: no cipher suites in common
> %% Invalidated:  [Session-1, SSL_NULL_WITH_NULL_NULL]
> qtp1424237190-118, SEND TLSv1 ALERT:  fatal, description = handshake_failure
> qtp1424237190-118, WRITE: TLSv1 Alert, length = 2
> qtp1424237190-118, fatal: engine already closed.  Rethrowing 
> javax.net.ssl.SSLHandshakeException: no cipher suites in common
> {code}
> The root cause is that if we want to add a Jetty hander, we need to stop 
> Jetty server. As part of Jetty server stop process, it's SslConnectionFactory 
> also needs to stop, as well as SslContextFactory. Here is doStop() method of 
> SslContextFactory in Jetty 9.2.x code base:
> {code}
> public class SslContextFactory extends AbstractLifeCycle
> ...
>     protected void doStop() throws Exception
>      {
>          _context = null;
>          super.doStop();
>      }
> {code}
> We can see that it resets SSLContext to null. When the jetty server restarts, 
> SslContextFactory creates a new SSLContext object instead, therefore, losing 
> all the SSL properties from the original <camel:sslContextParameters> 
> configuration. 
> We need to preserve the SSLContext before stopping the jetty server so we can 
> reset the SSLContext back after the jetty server is restarted.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to