You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@camel.apache.org by "M.Ismail" <mo...@gmail.com> on 2010/06/03 08:31:27 UTC

Re: http component SSL problem

Hi, 

Solved this problem using good old System.setProperty and
Security.addProvider. Thus, I don't use
httpClientConfigurerRef=HttpClientConfigurer nor
httpClientConfigurerRef=HttpClientConfigurer and no
not-yet-commons-ssl-0.3.11 ! Should the camel-http documentation be updated?

M.Ismail



M.Ismail wrote:
> 
> Hi, 
> 
> 
> I'm using the camel-http component to communicate with an SSL web service
> and I'm receiving the following exception:
> 
> java.security.KeyStoreException: No private keys found in keystore!
>         at
> org.apache.commons.ssl.KeyStoreBuilder.validate(KeyStoreBuilder.java:269)
>         at
> org.apache.commons.ssl.KeyStoreBuilder.build(KeyStoreBuilder.java:129)
>         at org.apache.commons.ssl.KeyMaterial.<init>(KeyMaterial.java:179)
>         at org.apache.commons.ssl.KeyMaterial.<init>(KeyMaterial.java:170)
>         at org.apache.commons.ssl.KeyMaterial.<init>(KeyMaterial.java:160)
>         at org.apache.commons.ssl.KeyMaterial.<init>(KeyMaterial.java:64)
>         at org.apache.commons.ssl.KeyMaterial.<init>(KeyMaterial.java:139)
>         at
> org.apache.commons.httpclient.contrib.ssl.AuthSSLProtocolSocketFactory.<init>(AuthSSLProtocolSocketFactory.java:191)
>         at
> tutorial.HttpClientConfigurer.configureHttpClient(HttpClientConfigurer.java:22)
>         at
> org.apache.camel.component.http.CompositeHttpConfigurer.configureHttpClient(CompositeHttpConfigurer.java:40)
>         at
> org.apache.camel.component.http.HttpEndpoint.createHttpClient(HttpEndpoint.java:105)
>         at
> org.apache.camel.component.http.HttpProducer.<init>(HttpProducer.java:56)
>         at
> org.apache.camel.component.http.HttpEndpoint.createProducer(HttpEndpoint.java:75)
>         at
> org.apache.camel.impl.ProducerCache.doGetProducer(ProducerCache.java:196)
>         at
> org.apache.camel.impl.ProducerCache.doInProducer(ProducerCache.java:133)
>         at
> org.apache.camel.processor.SendProcessor.doProcess(SendProcessor.java:94)
>         at
> org.apache.camel.processor.SendProcessor.process(SendProcessor.java:82)
>         at
> org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:67)
>         at
> org.apache.camel.processor.DelegateProcessor.processNext(DelegateProcessor.java:53)
>         at
> org.apache.camel.processor.DelegateProcessor.proceed(DelegateProcessor.java:82)
>         at
> org.apache.camel.processor.interceptor.TraceInterceptor.process(TraceInterceptor.java:93)
>         at
> org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:67)
>         at
> org.apache.camel.processor.DefaultChannel.process(DefaultChannel.java:228)
>         at org.apache.camel.processor.Pipeline.process(Pipeline.java:74)
>         at
> org.apache.camel.processor.TryProcessor.process(TryProcessor.java:63)
>         at
> org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:67)
>         at
> org.apache.camel.processor.DelegateProcessor.processNext(DelegateProcessor.java:53)
>         at
> org.apache.camel.processor.DelegateProcessor.proceed(DelegateProcessor.java:82)
>         at
> org.apache.camel.processor.interceptor.TraceInterceptor.process(TraceInterceptor.java:93)
>         at
> org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:67)
>         at
> org.apache.camel.processor.DefaultChannel.process(DefaultChannel.java:228)
>         at
> org.apache.camel.processor.UnitOfWorkProcessor.processNext(UnitOfWorkProcessor.java:66)
>         at
> org.apache.camel.processor.DelegateProcessor.process(DelegateProcessor.java:48)
>         at
> org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:67)
>         at
> org.apache.camel.component.mina.MinaConsumer$ReceiveHandler.messageReceived(MinaConsumer.java:110)
>         at
> org.apache.mina.common.support.AbstractIoFilterChain$TailFilter.messageReceived(AbstractIoFilterChain.java:570)
>         at
> org.apache.mina.common.support.AbstractIoFilterChain.callNextMessageReceived(AbstractIoFilterChain.java:299)
>         at
> org.apache.mina.common.support.AbstractIoFilterChain.access$1100(AbstractIoFilterChain.java:53)
>         at
> org.apache.mina.common.support.AbstractIoFilterChain$EntryImpl$1.messageReceived(AbstractIoFilterChain.java:648)
>         at
> org.apache.mina.filter.LoggingFilter.messageReceived(LoggingFilter.java:89)
>         at
> org.apache.mina.common.support.AbstractIoFilterChain.callNextMessageReceived(AbstractIoFilterChain.java:299)
>         at
> org.apache.mina.common.support.AbstractIoFilterChain.access$1100(AbstractIoFilterChain.java:53)
>         at
> org.apache.mina.common.support.AbstractIoFilterChain$EntryImpl$1.messageReceived(AbstractIoFilterChain.java:648)
>         at
> org.apache.mina.filter.executor.ExecutorFilter.processEvent(ExecutorFilter.java:220)
>         at
> org.apache.mina.filter.executor.ExecutorFilter$ProcessEventsRunnable.run(ExecutorFilter.java:264)
>         at
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:651)
>         at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:676)
>         at java.lang.Thread.run(Thread.java:595)
> 
> I have implemented the interface HttpClientConfigurer and here it is:
> package tutorial;
> 
> import java.io.IOException;
> import java.net.MalformedURLException;
> import java.net.URL;
> import java.security.GeneralSecurityException;
> 
> import org.apache.commons.httpclient.HttpClient;
> import org.apache.commons.httpclient.protocol.Protocol;
> import org.apache.commons.httpclient.protocol.ProtocolSocketFactory;
> import org.apache.commons.httpclient.protocol.SecureProtocolSocketFactory;
> import org.apache.commons.httpclient.contrib.ssl.*;
> import org.apache.commons.httpclient.protocol.SSLProtocolSocketFactory;
> 
> public class HttpClientConfigurer implements
> 		org.apache.camel.component.http.HttpClientConfigurer {
> 
> 	public void configureHttpClient(HttpClient client) {
> 		 // register the customer SSLFactory				 
> 		 Protocol authhttps;
> 		try {
> 			authhttps = new Protocol("https",  
> 			          (ProtocolSocketFactory) new AuthSSLProtocolSocketFactory(
> 			              new URL("file:./src/main/resources/ClientKey.jks"),
> "pwd",
> 			              new URL("file:./src/main/resources/ClientTrust.jks"),
> "pwd"), 443);
> 			Protocol.registerProtocol("https", authhttps);
> 		} catch (MalformedURLException e) {
> 			// TODO Auto-generated catch block
> 			e.printStackTrace();
> 		} catch (GeneralSecurityException e) {
> 			// TODO Auto-generated catch block
> 			e.printStackTrace();
> 		} catch (IOException e) {
> 			// TODO Auto-generated catch block
> 			e.printStackTrace();
> 		} 
> //        ProtocolSocketFactory easy = new EasySSLProtocolSocketFactory();
> //        Protocol protocol = new Protocol("https", easy, 8443);
> //        Protocol.registerProtocol("https", protocol); 
> 						
> 	}
> }
> 
> and here is the camel-context:
> <?xml version="1.0" encoding="UTF-8"?>
> <beans xmlns="http://www.springframework.org/schema/beans"
>        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>        xmlns:camel="http://camel.apache.org/schema/spring"
>        xmlns:broker="http://activemq.apache.org/schema/core"
>        xsi:schemaLocation="
>        http://www.springframework.org/schema/beans
> http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
>        http://camel.apache.org/schema/spring
> http://camel.apache.org/schema/spring/camel-spring.xsd
>        http://activemq.apache.org/schema/core
> http://activemq.apache.org/schema/core/activemq-core.xsd">
>     
>    <bean id="MyRouteBuilder" class="tutorial.MyRouteBuilder"></bean>
>     <camel:camelContext id="camelContext">
>        <camel:routeBuilder ref="MyRouteBuilder"/>
>     </camel:camelContext>
> 	
> 	
> 	<bean id="HttpClientConfigurer" class="tutorial.HttpClientConfigurer">
> 
> 	</bean>
> 	
> 
> </beans>
> 
> and my route builder is :
> 
> from("mina:tcp://0.0.0.0:9002?sync=true&lazySessionCreation=true&minaLogger=true&textline=true&encoderMaxLineLength=50000&decoderMaxLineLength=50000&textlineDelimiter=WINDOWS&encoding=US-ASCII")
> .process(new transformationProcessor())
> .to("https://"+strIP+"/?httpClient.authenticationPreemptive=true&httpClientConfigurerRef=HttpClientConfigurer");
> 
> I'm using camel 2.2.0 and I use not-yet-commons-ssl version 0.3.11. I can
> send you the whole pom.xml if you want.
> 
> I think that this problem has to do with not-yet-commons-ssl since, I have
> searched for this error and the closest I found is:
> http://old.nabble.com/No-private-keys-found-in-keystore-td18165598.html
> 
> both the keystore and the trust store files and password are running
> correctly in an older application using System properties e.g.
> System.setProperty("javax.net.ssl.keyStore", "ClientKey.jks"); and the
> Security.addProvider( new com.sun.net.ssl.internal.ssl.Provider() );
> 
> Any suggestions?
> 

-- 
View this message in context: http://old.nabble.com/http-component-SSL-problem-tp28733226p28763634.html
Sent from the Camel - Users mailing list archive at Nabble.com.