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-tp28733226p28733226.html
Sent from the Camel - Users mailing list archive at Nabble.com.

Reply via email to