Cacerts文件路径到javax.net.ssl.trustStore在.war中不起作用

时间:2018-10-10 22:15:51

标签: java spring-boot

我需要将cacerts文件的路径设置为trustStore,要做到这一点:

String keystore = "src/main/resources/cacerts";
System.setProperty("javax.net.ssl.trustStore", keystore);

我想通过STS IDE(春季启动)运行项目,但是它可以工作,但是当我生成.war文件并从错误中运行它时,因为它找不到cacerts文件的路径,我该如何设置要与.WAR一起使用的文件?

我还试图在运行java -jar时删除System.setProperty并设置cacerts,但它也无法正常工作:

java -Djavax.net.ssl.trustStore=./cacerts -jar target/uaa-0.0.1-SNAPSHOT.war

1 个答案:

答案 0 :(得分:0)

.war文件是一个压缩的归档文件;其内容不是文件,不能在javax.net.ssl.trustStore属性中直接引用。

但是,您可以使用Class.getResourceAsStream将证书复制到新文件中:

Path keystore = Files.createTempFile(null, null);
try (InputStream stream = getClass().getResourceAsStream("/cacerts")) {
    Files.copy(stream, keystore, StandardCopyOption.REPLACE_EXISTING);
}

System.setProperty("javax.net.ssl.trustStore", keystore.toString());