我目前有一个带有 Maven 的 Spring 服务器,它在 src/main/java/com.resource
包中存储一个带有用户私钥的 KeyStore 文件。问题是当执行 maven 更新时, keystore 文件被重置,因此所有私钥都丢失了。我开始研究 keystore 文件应该放在哪里并找到 Apaches documentation on handling keystore files但是当需要放置或获取 key 时,我如何从 servlet 代码访问该文件?因为它不在Tomcat的范围内。
当处理 keystore 文件然后放置在 "%JAVA_HOME%\bin\keytool"
中时,这是正确的约定吗?
目前在我做的资源目录中访问 keystore 文件:
ApplicationContext appContext = new ClassPathXmlApplicationContext();
Resource resource = appContext.getResource("classpath:com/resources/" +fileName);
((ClassPathXmlApplicationContext) appContext).close();
InputStream inpusStream = resource.getInputStream();
KeyStore keyStore = null;
try {
keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
keyStore.load(inpusStream, <Password for JKS file>);
} finally {
if (inpusStream != null)
inpusStream.close();
}
最佳答案
您放入 src/main/resources 的任何内容都会被捆绑到 jar 中,就像 Andrea 所建议的那样。然而,这也意味着任何时候您重新打包和部署您的 jar,您都会丢失对这些文件所做的任何更改,正如您所观察到的那样。
如果您在单个主机上运行您的服务,请将 java keystore 部署到文件系统并通过属性将其位置告知您的 java 应用程序。如果您计划将其部署到集群中,您可能希望将这些 key 保存到数据库中。
此外,如您所知,JAVA_HOME/bin/keytool 是用于管理 key 和证书的二进制文件(例如,使用此工具创建 JKS 文件)。
关于java - Spring访问 keystore 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46490326/