Repository: thrift Updated Branches: refs/heads/master a199a1662 -> 4bf9399ca
THRIFT-3117 Java TSSLTransportFactory can't load certificates within JAR archive This closes #465 commit aa6d693b21ccc855921a23f507fbb367b91da2c4 Author: Smyatkin Maxim <[email protected]> Date: 2015-04-26T15:07:26Z Project: http://git-wip-us.apache.org/repos/asf/thrift/repo Commit: http://git-wip-us.apache.org/repos/asf/thrift/commit/4bf9399c Tree: http://git-wip-us.apache.org/repos/asf/thrift/tree/4bf9399c Diff: http://git-wip-us.apache.org/repos/asf/thrift/diff/4bf9399c Branch: refs/heads/master Commit: 4bf9399ca39ee4147a82aca8d69a97f2cee1b377 Parents: a199a16 Author: Roger Meier <[email protected]> Authored: Thu Apr 30 19:42:41 2015 +0200 Committer: Roger Meier <[email protected]> Committed: Thu Apr 30 19:42:41 2015 +0200 ---------------------------------------------------------------------- .../thrift/transport/TSSLTransportFactory.java | 50 +++++++++++++++----- 1 file changed, 39 insertions(+), 11 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/thrift/blob/4bf9399c/lib/java/src/org/apache/thrift/transport/TSSLTransportFactory.java ---------------------------------------------------------------------- diff --git a/lib/java/src/org/apache/thrift/transport/TSSLTransportFactory.java b/lib/java/src/org/apache/thrift/transport/TSSLTransportFactory.java index e830bb9..76c98c8 100755 --- a/lib/java/src/org/apache/thrift/transport/TSSLTransportFactory.java +++ b/lib/java/src/org/apache/thrift/transport/TSSLTransportFactory.java @@ -20,8 +20,12 @@ package org.apache.thrift.transport; import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.InputStream; import java.io.IOException; import java.net.InetAddress; +import java.net.URL; +import java.net.MalformedURLException; import java.security.KeyStore; import java.util.Arrays; @@ -171,8 +175,8 @@ public class TSSLTransportFactory { private static SSLContext createSSLContext(TSSLTransportParameters params) throws TTransportException { SSLContext ctx; - FileInputStream fin = null; - FileInputStream fis = null; + InputStream in = null; + InputStream is = null; try { ctx = SSLContext.getInstance(params.protocol); @@ -182,17 +186,17 @@ public class TSSLTransportFactory { if (params.isTrustStoreSet) { tmf = TrustManagerFactory.getInstance(params.trustManagerType); KeyStore ts = KeyStore.getInstance(params.trustStoreType); - fin = new FileInputStream(params.trustStore); - ts.load(fin, - (params.trustPass != null ? params.trustPass.toCharArray() : null)); + in = getStoreAsStream(params.trustStore); + ts.load(in, + (params.trustPass != null ? params.trustPass.toCharArray() : null)); tmf.init(ts); } if (params.isKeyStoreSet) { kmf = KeyManagerFactory.getInstance(params.keyManagerType); KeyStore ks = KeyStore.getInstance(params.keyStoreType); - fis = new FileInputStream(params.keyStore); - ks.load(fis, params.keyPass.toCharArray()); + is = getStoreAsStream(params.keyStore); + ks.load(is, params.keyPass.toCharArray()); kmf.init(ks, params.keyPass.toCharArray()); } @@ -209,16 +213,16 @@ public class TSSLTransportFactory { } catch (Exception e) { throw new TTransportException("Error creating the transport", e); } finally { - if (fin != null) { + if (in != null) { try { - fin.close(); + in.close(); } catch (IOException e) { e.printStackTrace(); } } - if (fis != null) { + if (is != null) { try { - fis.close(); + is.close(); } catch (IOException e) { e.printStackTrace(); } @@ -228,6 +232,30 @@ public class TSSLTransportFactory { return ctx; } + private static InputStream getStoreAsStream(String store) throws IOException { + try { + return new FileInputStream(store); + } catch(FileNotFoundException e) { + } + + InputStream storeStream = null; + try { + storeStream = new URL(store).openStream(); + if (storeStream != null) { + return storeStream; + } + } catch(MalformedURLException e) { + } + + storeStream = Thread.currentThread().getContextClassLoader().getResourceAsStream(store); + + if (storeStream != null) { + return storeStream; + } else { + throw new IOException("Could not load file: " + store); + } + } + private static TSocket createClient(SSLSocketFactory factory, String host, int port, int timeout) throws TTransportException { try { SSLSocket socket = (SSLSocket) factory.createSocket(host, port);
