Java应用程序的密钥库/信任库的默认位置是哪里?

56

我正在编写一个使用SSL的应用程序。因此,我有一个虚拟密钥库和虚拟信任库要提供给我的客户。是否有默认文件夹可以将它们放在我的分发中?例如docs、lib、bin等。服务器上通常将密钥库放在哪里,客户端上通常将信任库放在哪里?

谢谢。

2个回答

47

根据JSSE参考指南,在Java中,keystore没有默认值,truststore的默认值为“如果存在,则为jssecacerts。否则为cacerts”。

有些应用程序使用~/.keystore作为默认的密钥库,但这并不是没有问题的(主要是因为您可能不希望所有由用户运行的应用程序都使用该信任存储库)。

我建议使用与应用程序特定值捆绑的值作为默认值,这样通常更为适用。


3
密钥存储(Keystore)和信任库(Truststore)是PKI领域的通用术语,不仅局限于Java。 - user93353
@user93353,这取决于具体的实现。PKI以各种方式谈论信任,但可以是“信任存储”,“信任锚点”或仅仅是“受信任的证书”。在Windows/schannel上,您还可以获得“受信任的根证书颁发机构存储”等等。据我所知,没有统一的术语。 - Bruno
38
更具体地说,默认位置是<java-home>/lib/security/jssecacerts和<java-home>/lib/security/cacerts,您可以使用javax.net.ssl.trustStore系统属性覆盖它。 - Eric
举个例子,如果使用命令“keytool”而没有提供“-keystore <value>”,那么keytool将默认写入~/.keystore。 - dreadlock

16

就像Bruno所说的那样,最好自己进行配置。这是我做法的步骤。 首先创建一个属性文件(/etc/myapp/config.properties)。

javax.net.ssl.keyStore = /etc/myapp/keyStore
javax.net.ssl.keyStorePassword = 123456

然后从您的代码中将属性加载到您的环境中。这将使您的应用程序可配置。

FileInputStream propFile = new FileInputStream("/etc/myapp/config.properties");
Properties p = new Properties(System.getProperties());
p.load(propFile);
System.setProperties(p);

2
嗨,Kristian Benoit - 你的回答似乎很合理 - 你能否详细说明你的答案细节 - 或者提供一个博客链接...以获取完整的教程。抱歉,我对密钥库还有点陌生,感谢你的努力。 - Abdeali Chandanwala

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接