Author: davsclaus
Date: Wed May  1 10:15:58 2013
New Revision: 1477943

URL: http://svn.apache.org/r1477943
Log:
CAMEL-6331: netty SSL can load keystore and truststore from classpath

Added:
    
camel/trunk/components/camel-netty/src/test/java/org/apache/camel/component/netty/NettySSLClasspathTest.java
      - copied, changed from r1477915, 
camel/trunk/components/camel-netty/src/test/java/org/apache/camel/component/netty/NettySSLTest.java
Modified:
    
camel/trunk/components/camel-netty/src/main/java/org/apache/camel/component/netty/DefaultClientPipelineFactory.java
    
camel/trunk/components/camel-netty/src/main/java/org/apache/camel/component/netty/DefaultServerPipelineFactory.java
    
camel/trunk/components/camel-netty/src/main/java/org/apache/camel/component/netty/NettyConfiguration.java
    
camel/trunk/components/camel-netty/src/main/java/org/apache/camel/component/netty/ssl/SSLEngineFactory.java
    
camel/trunk/components/camel-netty/src/test/java/org/apache/camel/component/netty/NettySSLTest.java

Modified: 
camel/trunk/components/camel-netty/src/main/java/org/apache/camel/component/netty/DefaultClientPipelineFactory.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-netty/src/main/java/org/apache/camel/component/netty/DefaultClientPipelineFactory.java?rev=1477943&r1=1477942&r2=1477943&view=diff
==============================================================================
--- 
camel/trunk/components/camel-netty/src/main/java/org/apache/camel/component/netty/DefaultClientPipelineFactory.java
 (original)
+++ 
camel/trunk/components/camel-netty/src/main/java/org/apache/camel/component/netty/DefaultClientPipelineFactory.java
 Wed May  1 10:15:58 2013
@@ -112,21 +112,31 @@ public class DefaultClientPipelineFactor
             engine.setUseClientMode(true);
             return new SslHandler(engine);
         } else {
-            if (producer.getConfiguration().getKeyStoreFile() == null) {
+            if (producer.getConfiguration().getKeyStoreFile() == null && 
producer.getConfiguration().getKeyStoreResource() == null) {
                 LOG.debug("keystorefile is null");
             }
-            if (producer.getConfiguration().getTrustStoreFile() == null) {
+            if (producer.getConfiguration().getTrustStoreFile() == null && 
producer.getConfiguration().getTrustStoreResource() == null) {
                 LOG.debug("truststorefile is null");
             }
             if (producer.getConfiguration().getPassphrase().toCharArray() == 
null) {
                 LOG.debug("passphrase is null");
             }
-            SSLEngineFactory sslEngineFactory = new SSLEngineFactory(
-                producer.getConfiguration().getKeyStoreFormat(),
-                producer.getConfiguration().getSecurityProvider(),
-                producer.getConfiguration().getKeyStoreFile(),
-                producer.getConfiguration().getTrustStoreFile(),
-                producer.getConfiguration().getPassphrase().toCharArray());
+            SSLEngineFactory sslEngineFactory;
+            if (producer.getConfiguration().getKeyStoreFile() != null || 
producer.getConfiguration().getTrustStoreFile() != null) {
+                sslEngineFactory = new SSLEngineFactory(
+                    producer.getConfiguration().getKeyStoreFormat(),
+                    producer.getConfiguration().getSecurityProvider(),
+                    producer.getConfiguration().getKeyStoreFile(),
+                    producer.getConfiguration().getTrustStoreFile(),
+                    producer.getConfiguration().getPassphrase().toCharArray());
+            } else {
+                sslEngineFactory = new 
SSLEngineFactory(producer.getContext().getClassResolver(),
+                        producer.getConfiguration().getKeyStoreFormat(),
+                        producer.getConfiguration().getSecurityProvider(),
+                        producer.getConfiguration().getKeyStoreResource(),
+                        producer.getConfiguration().getTrustStoreResource(),
+                        
producer.getConfiguration().getPassphrase().toCharArray());
+            }
             SSLEngine sslEngine = sslEngineFactory.createClientSSLEngine();
             return new SslHandler(sslEngine);
         }

Modified: 
camel/trunk/components/camel-netty/src/main/java/org/apache/camel/component/netty/DefaultServerPipelineFactory.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-netty/src/main/java/org/apache/camel/component/netty/DefaultServerPipelineFactory.java?rev=1477943&r1=1477942&r2=1477943&view=diff
==============================================================================
--- 
camel/trunk/components/camel-netty/src/main/java/org/apache/camel/component/netty/DefaultServerPipelineFactory.java
 (original)
+++ 
camel/trunk/components/camel-netty/src/main/java/org/apache/camel/component/netty/DefaultServerPipelineFactory.java
 Wed May  1 10:15:58 2013
@@ -124,12 +124,31 @@ public class DefaultServerPipelineFactor
             
engine.setNeedClientAuth(consumer.getConfiguration().isNeedClientAuth());
             return new SslHandler(engine);
         } else {
-            SSLEngineFactory sslEngineFactory = new SSLEngineFactory(
-                consumer.getConfiguration().getKeyStoreFormat(),
-                consumer.getConfiguration().getSecurityProvider(),
-                consumer.getConfiguration().getKeyStoreFile(), 
-                consumer.getConfiguration().getTrustStoreFile(), 
-                consumer.getConfiguration().getPassphrase().toCharArray());
+            if (consumer.getConfiguration().getKeyStoreFile() == null && 
consumer.getConfiguration().getKeyStoreResource() == null) {
+                LOG.debug("keystorefile is null");
+            }
+            if (consumer.getConfiguration().getTrustStoreFile() == null && 
consumer.getConfiguration().getTrustStoreResource() == null) {
+                LOG.debug("truststorefile is null");
+            }
+            if (consumer.getConfiguration().getPassphrase().toCharArray() == 
null) {
+                LOG.debug("passphrase is null");
+            }
+            SSLEngineFactory sslEngineFactory;
+            if (consumer.getConfiguration().getKeyStoreFile() != null || 
consumer.getConfiguration().getTrustStoreFile() != null) {
+                sslEngineFactory = new SSLEngineFactory(
+                        consumer.getConfiguration().getKeyStoreFormat(),
+                        consumer.getConfiguration().getSecurityProvider(),
+                        consumer.getConfiguration().getKeyStoreFile(),
+                        consumer.getConfiguration().getTrustStoreFile(),
+                        
consumer.getConfiguration().getPassphrase().toCharArray());
+            } else {
+                sslEngineFactory = new 
SSLEngineFactory(consumer.getContext().getClassResolver(),
+                        consumer.getConfiguration().getKeyStoreFormat(),
+                        consumer.getConfiguration().getSecurityProvider(),
+                        consumer.getConfiguration().getKeyStoreResource(),
+                        consumer.getConfiguration().getTrustStoreResource(),
+                        
consumer.getConfiguration().getPassphrase().toCharArray());
+            }
             SSLEngine sslEngine = sslEngineFactory.createServerSSLEngine();
             sslEngine.setUseClientMode(false);
             
sslEngine.setNeedClientAuth(consumer.getConfiguration().isNeedClientAuth());

Modified: 
camel/trunk/components/camel-netty/src/main/java/org/apache/camel/component/netty/NettyConfiguration.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-netty/src/main/java/org/apache/camel/component/netty/NettyConfiguration.java?rev=1477943&r1=1477942&r2=1477943&view=diff
==============================================================================
--- 
camel/trunk/components/camel-netty/src/main/java/org/apache/camel/component/netty/NettyConfiguration.java
 (original)
+++ 
camel/trunk/components/camel-netty/src/main/java/org/apache/camel/component/netty/NettyConfiguration.java
 Wed May  1 10:15:58 2013
@@ -57,6 +57,8 @@ public class NettyConfiguration implemen
     private String passphrase;
     private File keyStoreFile;
     private File trustStoreFile;
+    private String keyStoreResource;
+    private String trustStoreResource;
     private SslHandler sslHandler;
     private List<ChannelHandler> encoders = new ArrayList<ChannelHandler>();
     private List<ChannelHandler> decoders = new ArrayList<ChannelHandler>();
@@ -154,11 +156,13 @@ public class NettyConfiguration implemen
         setPort(uri.getPort());
 
         sslHandler = component.resolveAndRemoveReferenceParameter(parameters, 
"sslHandler", SslHandler.class, sslHandler);
-        passphrase = component.resolveAndRemoveReferenceParameter(parameters, 
"passphrase", String.class, passphrase);
+        passphrase = component.getAndRemoveParameter(parameters, "passphrase", 
String.class, passphrase);
         keyStoreFormat = component.getAndRemoveParameter(parameters, 
"keyStoreFormat", String.class, keyStoreFormat == null ? "JKS" : 
keyStoreFormat);
         securityProvider = component.getAndRemoveParameter(parameters, 
"securityProvider", String.class, securityProvider == null ? "SunX509" : 
securityProvider);
         keyStoreFile = 
component.resolveAndRemoveReferenceParameter(parameters, "keyStoreFile", 
File.class, keyStoreFile);
         trustStoreFile = 
component.resolveAndRemoveReferenceParameter(parameters, "trustStoreFile", 
File.class, trustStoreFile);
+        keyStoreResource = component.getAndRemoveParameter(parameters, 
"keyStoreResource", String.class, keyStoreResource);
+        trustStoreResource = component.getAndRemoveParameter(parameters, 
"trustStoreResource", String.class, trustStoreResource);
         clientPipelineFactory = 
component.resolveAndRemoveReferenceParameter(parameters, 
"clientPipelineFactory", ClientPipelineFactory.class, clientPipelineFactory);
         serverPipelineFactory = 
component.resolveAndRemoveReferenceParameter(parameters, 
"serverPipelineFactory", ServerPipelineFactory.class, serverPipelineFactory);
 
@@ -427,22 +431,42 @@ public class NettyConfiguration implemen
         this.passphrase = passphrase;
     }
 
+    @Deprecated
     public File getKeyStoreFile() {
         return keyStoreFile;
     }
 
+    @Deprecated
     public void setKeyStoreFile(File keyStoreFile) {
         this.keyStoreFile = keyStoreFile;
     }
 
+    @Deprecated
     public File getTrustStoreFile() {
         return trustStoreFile;
     }
 
+    @Deprecated
     public void setTrustStoreFile(File trustStoreFile) {
         this.trustStoreFile = trustStoreFile;
     }
 
+    public String getKeyStoreResource() {
+        return keyStoreResource;
+    }
+
+    public void setKeyStoreResource(String keyStoreResource) {
+        this.keyStoreResource = keyStoreResource;
+    }
+
+    public String getTrustStoreResource() {
+        return trustStoreResource;
+    }
+
+    public void setTrustStoreResource(String trustStoreResource) {
+        this.trustStoreResource = trustStoreResource;
+    }
+
     public String getKeyStoreFormat() {
         return keyStoreFormat;
     }

Modified: 
camel/trunk/components/camel-netty/src/main/java/org/apache/camel/component/netty/ssl/SSLEngineFactory.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-netty/src/main/java/org/apache/camel/component/netty/ssl/SSLEngineFactory.java?rev=1477943&r1=1477942&r2=1477943&view=diff
==============================================================================
--- 
camel/trunk/components/camel-netty/src/main/java/org/apache/camel/component/netty/ssl/SSLEngineFactory.java
 (original)
+++ 
camel/trunk/components/camel-netty/src/main/java/org/apache/camel/component/netty/ssl/SSLEngineFactory.java
 Wed May  1 10:15:58 2013
@@ -17,24 +17,67 @@
 package org.apache.camel.component.netty.ssl;
 
 import java.io.File;
+import java.io.InputStream;
 import java.security.KeyStore;
-
 import javax.net.ssl.KeyManagerFactory;
 import javax.net.ssl.SSLContext;
 import javax.net.ssl.SSLEngine;
 import javax.net.ssl.TrustManagerFactory;
 
 import org.apache.camel.converter.IOConverter;
+import org.apache.camel.spi.ClassResolver;
+import org.apache.camel.util.IOHelper;
+import org.apache.camel.util.ResourceHelper;
 
 public class SSLEngineFactory {
 
     private static final String SSL_PROTOCOL = "TLS";
     private static SSLContext sslContext;
-    
+
+    public SSLEngineFactory(ClassResolver classResolver, String 
keyStoreFormat, String securityProvider, String keyStoreResource, String 
trustStoreResource, char[] passphrase) throws Exception {
+        KeyStore ks = KeyStore.getInstance(keyStoreFormat);
+
+        InputStream is = 
ResourceHelper.resolveMandatoryResourceAsInputStream(classResolver, 
keyStoreResource);
+        try {
+            ks.load(is, passphrase);
+        } finally {
+            IOHelper.close(is);
+        }
+
+        KeyManagerFactory kmf = 
KeyManagerFactory.getInstance(securityProvider);
+        kmf.init(ks, passphrase);
+
+        sslContext = SSLContext.getInstance(SSL_PROTOCOL);
+
+        if (trustStoreResource != null) {
+            KeyStore ts = KeyStore.getInstance(keyStoreFormat);
+            is = 
ResourceHelper.resolveMandatoryResourceAsInputStream(classResolver, 
trustStoreResource);
+            try {
+                ts.load(is, passphrase);
+            } finally {
+                IOHelper.close(is);
+            }
+            TrustManagerFactory tmf = 
TrustManagerFactory.getInstance(securityProvider);
+            tmf.init(ts);
+            sslContext.init(kmf.getKeyManagers(), tmf.getTrustManagers(), 
null);
+        } else {
+            sslContext.init(kmf.getKeyManagers(), null, null);
+        }
+    }
+
+    /**
+     * Use {@link #SSLEngineFactory(org.apache.camel.spi.ClassResolver, 
String, String, String, String, char[])}
+     */
+    @Deprecated
     public SSLEngineFactory(String keyStoreFormat, String securityProvider, 
File keyStoreFile, File trustStoreFile, char[] passphrase) throws Exception {
         KeyStore ks = KeyStore.getInstance(keyStoreFormat);
 
-        ks.load(IOConverter.toInputStream(keyStoreFile), passphrase);
+        InputStream is = IOConverter.toInputStream(keyStoreFile);
+        try {
+            ks.load(is, passphrase);
+        } finally {
+            IOHelper.close(is);
+        }
 
         KeyManagerFactory kmf = 
KeyManagerFactory.getInstance(securityProvider);
         kmf.init(ks, passphrase);
@@ -42,9 +85,14 @@ public class SSLEngineFactory {
         sslContext = SSLContext.getInstance(SSL_PROTOCOL);
         
         if (trustStoreFile != null) { 
-            KeyStore ts = KeyStore.getInstance(keyStoreFormat); 
-            ts.load(IOConverter.toInputStream(trustStoreFile), passphrase); 
-            TrustManagerFactory tmf = 
TrustManagerFactory.getInstance(securityProvider); 
+            KeyStore ts = KeyStore.getInstance(keyStoreFormat);
+            is = IOConverter.toInputStream(trustStoreFile);
+            try {
+                ts.load(is, passphrase);
+            } finally {
+                IOHelper.close(is);
+            }
+            TrustManagerFactory tmf = 
TrustManagerFactory.getInstance(securityProvider);
             tmf.init(ts); 
             sslContext.init(kmf.getKeyManagers(), tmf.getTrustManagers(), 
null); 
         } else { 

Copied: 
camel/trunk/components/camel-netty/src/test/java/org/apache/camel/component/netty/NettySSLClasspathTest.java
 (from r1477915, 
camel/trunk/components/camel-netty/src/test/java/org/apache/camel/component/netty/NettySSLTest.java)
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-netty/src/test/java/org/apache/camel/component/netty/NettySSLClasspathTest.java?p2=camel/trunk/components/camel-netty/src/test/java/org/apache/camel/component/netty/NettySSLClasspathTest.java&p1=camel/trunk/components/camel-netty/src/test/java/org/apache/camel/component/netty/NettySSLTest.java&r1=1477915&r2=1477943&rev=1477943&view=diff
==============================================================================
--- 
camel/trunk/components/camel-netty/src/test/java/org/apache/camel/component/netty/NettySSLTest.java
 (original)
+++ 
camel/trunk/components/camel-netty/src/test/java/org/apache/camel/component/netty/NettySSLClasspathTest.java
 Wed May  1 10:15:58 2013
@@ -17,26 +17,14 @@
 
 package org.apache.camel.component.netty;
 
-import java.io.File;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.impl.JndiRegistry;
 import org.junit.Test;
 
-public class NettySSLTest extends BaseNettyTest {
+public class NettySSLClasspathTest extends BaseNettyTest {
 
     @Override
-    protected JndiRegistry createRegistry() throws Exception {
-        JndiRegistry registry = super.createRegistry();
-        registry.bind("password", "changeit");
-        registry.bind("ksf", new File("src/test/resources/keystore.jks"));
-        registry.bind("tsf", new File("src/test/resources/keystore.jks"));
-        return registry;
-    }
-    
-    @Override
     public boolean isUseRouteBuilder() {
         return false;
     }
@@ -50,7 +38,7 @@ public class NettySSLTest extends BaseNe
 
         context.addRoutes(new RouteBuilder() {
             public void configure() {
-                
from("netty:tcp://localhost:{{port}}?sync=true&ssl=true&passphrase=#password&keyStoreFile=#ksf&trustStoreFile=#tsf")
+                
from("netty:tcp://localhost:{{port}}?sync=true&ssl=true&passphrase=changeit&keyStoreResource=classpath:keystore.jks&trustStoreResource=classpath:keystore.jks")
                     .process(new Processor() {
                         public void process(Exchange exchange) throws 
Exception {
                             exchange.getOut().setBody("When You Go Home, Tell 
Them Of Us And Say, For Your Tomorrow, We Gave Our Today.");                    
       
@@ -61,7 +49,7 @@ public class NettySSLTest extends BaseNe
         context.start();
 
         String response = template.requestBody(
-                
"netty:tcp://localhost:{{port}}?sync=true&ssl=true&passphrase=#password&keyStoreFile=#ksf&trustStoreFile=#tsf",
+                
"netty:tcp://localhost:{{port}}?sync=true&ssl=true&passphrase=changeit&keyStoreResource=classpath:keystore.jks&trustStoreResource=classpath:keystore.jks",
                 "Epitaph in Kohima, India marking the WWII Battle of Kohima 
and Imphal, Burma Campaign - Attributed to John Maxwell Edmonds", String.class);
         assertEquals("When You Go Home, Tell Them Of Us And Say, For Your 
Tomorrow, We Gave Our Today.", response);
     }

Modified: 
camel/trunk/components/camel-netty/src/test/java/org/apache/camel/component/netty/NettySSLTest.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-netty/src/test/java/org/apache/camel/component/netty/NettySSLTest.java?rev=1477943&r1=1477942&r2=1477943&view=diff
==============================================================================
--- 
camel/trunk/components/camel-netty/src/test/java/org/apache/camel/component/netty/NettySSLTest.java
 (original)
+++ 
camel/trunk/components/camel-netty/src/test/java/org/apache/camel/component/netty/NettySSLTest.java
 Wed May  1 10:15:58 2013
@@ -30,7 +30,6 @@ public class NettySSLTest extends BaseNe
     @Override
     protected JndiRegistry createRegistry() throws Exception {
         JndiRegistry registry = super.createRegistry();
-        registry.bind("password", "changeit");
         registry.bind("ksf", new File("src/test/resources/keystore.jks"));
         registry.bind("tsf", new File("src/test/resources/keystore.jks"));
         return registry;
@@ -50,7 +49,7 @@ public class NettySSLTest extends BaseNe
 
         context.addRoutes(new RouteBuilder() {
             public void configure() {
-                
from("netty:tcp://localhost:{{port}}?sync=true&ssl=true&passphrase=#password&keyStoreFile=#ksf&trustStoreFile=#tsf")
+                
from("netty:tcp://localhost:{{port}}?sync=true&ssl=true&passphrase=changeit&keyStoreFile=#ksf&trustStoreFile=#tsf")
                     .process(new Processor() {
                         public void process(Exchange exchange) throws 
Exception {
                             exchange.getOut().setBody("When You Go Home, Tell 
Them Of Us And Say, For Your Tomorrow, We Gave Our Today.");                    
       
@@ -61,7 +60,7 @@ public class NettySSLTest extends BaseNe
         context.start();
 
         String response = template.requestBody(
-                
"netty:tcp://localhost:{{port}}?sync=true&ssl=true&passphrase=#password&keyStoreFile=#ksf&trustStoreFile=#tsf",
+                
"netty:tcp://localhost:{{port}}?sync=true&ssl=true&passphrase=changeit&keyStoreFile=#ksf&trustStoreFile=#tsf",
                 "Epitaph in Kohima, India marking the WWII Battle of Kohima 
and Imphal, Burma Campaign - Attributed to John Maxwell Edmonds", String.class);
         assertEquals("When You Go Home, Tell Them Of Us And Say, For Your 
Tomorrow, We Gave Our Today.", response);
     }


Reply via email to