【问题标题】:Which is the default location for keystore/truststore of Java applications?Java 应用程序的密钥库/信任库的默认位置是哪个?
【发布时间】:2010-11-04 14:03:55
【问题描述】:

我正在编写一个使用 SSL 的应用程序。 因此,我有一个虚拟密钥库和一个虚拟信任库,我想提供给我的客户。 是否有任何默认文件夹可以将它们放入我的发行版中? 例如文档、库、bin ...等。密钥库通常放在服务器的什么位置,而信任库通常放在客户端的什么位置?

谢谢

【问题讨论】:

    标签: java ssl keystore


    【解决方案1】:

    在 Java 中,根据JSSE Reference Guidekeystore 没有默认值,truststore 的默认值是“jssecacerts,如果存在。否则,cacerts”。

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

    我建议使用与应用程序捆绑在一起的特定于应用程序的值,它通常更适用。

    【讨论】:

    • Keystore 和 Truststore 是通用 PKI 术语,并非特定于 Java。
    • @user93353,它因实现而异。 PKI 以各种方式谈论信任,但可以是“信任存储”、“信任锚”或简单的“受信任证书”。在 Windows/schannel 上,您还可以获得“受信任的根证书颁发机构存储”等。 AFAIK,没有统一的术语。
    • 更具体地说,默认位置是 /lib/security/jssecacerts 和 /lib/security/cacerts,您可以使用 javax.net.ssl 覆盖它。 trustStore 系统属性。
    • 一个例子,如果使用命令“keytool”而不提供 -keystore ,keytool 将默认写入 ~/.keystore
    【解决方案2】:

    就像布鲁诺说的,你最好自己配置它。这是我的做法。 首先创建一个属性文件 (/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);
    

    【讨论】:

    • HI Kristian Benoit - 您的回答似乎是合乎逻辑的 - 您能否详细说明您的答案详情 - 或参考博客链接...以获取完整教程。对不起,我对密钥库有点新,感谢您的努力
    猜你喜欢
    • 1970-01-01
    • 2017-04-12
    • 1970-01-01
    • 1970-01-01
    • 2018-11-24
    • 1970-01-01
    • 2010-09-24
    • 2018-11-11
    • 1970-01-01
    相关资源
    最近更新 更多