我目前有一个带有Maven的Spring服务器,该服务器在src/main/java/com.resource包中存储带有用户私钥的KeyStore文件。问题在于,当执行Maven更新时,会重置密钥库文件,因此所有私钥都将丢失。我开始研究密钥库文件的放置位置并找到Apaches documentation on handling keystore files,但是当需要放置或获取密钥时,如何从servlet代码访问该文件?因为它不在Tomcat的范围内。

在处理要放在"%JAVA_HOME%\bin\keytool"中的密钥库文件时,这是正确的约定吗?

目前,我要在资源目录中访问密钥库文件:

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密钥库部署到文件系统上,并通过属性将其位置通知Java应用程序。如果计划将其部署到群集中,则可能需要将这些密钥持久保存到数据库中。

另外,您知道JAVA_HOME / bin / keytool是用于管理密钥和证书的二进制文件(例如,使用此工具创建JKS文件)。

09-11 02:54
查看更多