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);
}