2013-02-20 40 views
6

我有一个自定义的SSL工厂,我加载了我自己的信任库。如何加载资源文件夹(maven)内的密钥库?

现在,当我把truststore.jks文件到项目的根文件夹,它适用于以下行:

ks.load(new FileInputStream("/truststore.jks", passphrase); 

但我想我的资源文件夹,这与行家建在我的信任,其中路径是src/main/resources

然后我做,它不会与下面的行工作:

ks.load(this.getClass().getResourcesAsStream("/truststore.jks"), passphrase); 

虽然输入流存在。我检查了它。当我做ks.load(...)时它只会失败。

,我得到的唯一的例外是:

java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty 

这是为什么?

问候, 戴夫

+0

有一件事你可以尝试想到。在您的getResourceAsStream中指定“/truststore.jks”,以便从类路径的根目录搜索。 – 2013-02-20 23:09:27

+0

我也试过,没有运气...... – 2013-02-20 23:38:32

回答

0

奇怪,现在的工作......

Properties systemProps = System.getProperties(); 
systemProps.put("javax.net.ssl.trustStore", "/truststore.jks"); 
systemProps.put("javax.net.ssl.trustStorePassword", "changeit"); 
System.setProperties(systemProps); 

并更改第二行

systemProps.put("javax.net.ssl.trustStore", "src/main/resources/truststore.jks"); 

任何人都知道这是为什么?这个解决方案好吗?

+4

这只会在你当地的开发环境中工作。一旦你建立了人工制品,路径src/main/resources将会失效。 – vegemite4me 2015-10-28 12:02:52

+1

请更新您的原始问题,而不是发布新问题作为回答 – 2016-07-02 23:31:16

+0

此解决方案与信任库是资源无关。你的回答(如前所述)只在开发过程中有效,所以我不工作! – 2017-02-20 11:19:08