在我的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选项,但我不知道如何。我找到了一些帖子(例如this和this)但帖子大约是keystore
或X509Certificate
,我认为这些帖子与我的情况不同。
感谢任何帮助。
答案 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代码加载信任库。