以编程方式将cacerts文件添加到truststore

时间:2017-01-24 17:13:46

标签: spring ssl spring-security

在我的Spring启动应用程序中,我需要在另一台服务器上调用API(GET: https://anotherserver.com/api)。服务器管理员给了我一个名为cacerts的文件(没有扩展名),并告诉我每次启动Spring启动应用程序时都使用VM选项导入文件。

-Djavax.net.ssl.trustStore=C:\Users\k26342\Downloads\cacerts -Djavax.net.ssl.trustStorePassword=changeit

确实有效。现在我想编写一些代码而不是使用VM选项,但我不知道如何。我找到了一些帖子(例如thisthis)但帖子大约是keystoreX509Certificate,我认为这些帖子与我的情况不同。

感谢任何帮助。

3 个答案:

答案 0 :(得分:2)

使用自定义信任库是设置SSL连接中接受的受信任证书的正确选项。您还可以使用System.setProperty()而不是-D

设置默认信任
System.setProperty("javax.net.ssl.trustStore", trustStorePath); 
System.setProperty("javax.net.ssl.trustStorePassword", trustStorePassword)

或者,您可以为特定连接加载密钥库以配置信任库。见https://stackoverflow.com/a/859271/6371459

答案 1 :(得分:0)

虽然您应该小心摆弄JRE安装,但您可以以编程方式在JRE安装中安装新的cacerts文件,例如:

File from = new File("C:\\Users\\k26342\\Downloads\\cacerts");
File to = new File(System.getProperty("java.home") + File.separator + "lib" + File.separator + "security" + File.separator + "cacerts");
Files.copy(from, to);

注1:建议先备份原始cacerts文件。

注意2:如果您没有以管理员身份运行代码,可能存在安全限制使您无法从上面停止。

答案 2 :(得分:0)

System.setproperty有效,但我认为最好通过Java代码加载信任库。

https://stackoverflow.com/a/58695061/1938507